Servlet学习笔记

1、开发一个Servlet 步骤:

1)编写java类,继承HttpServlet类
2)重新doGet和doPost方法
3)Servlet程序交给tomcat服务器运行!!
		3.1 servlet程序的class码拷贝到WEB-INF/classes目录
		3.2 在web.xml文件中进行配置
@WebServlet(urlPatterns="/FirstServlet")
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L; 
	int n=1;

//构造方法: 创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象	,只调用1次。证明servlet对象在tomcat是单实例的。
    public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
        System.out.println("1.servlet对象第一次被创建");
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: "+n+"次").append(request.getContextPath());
		System.out.println("2.完成doGet方法");
		n++;
	} 
	

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
		System.out.println("3.完成dopost方法");
	}

//	init方法: 创建完servlet对象的时候调用。只调用1次。
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
		System.out.println("4.init方法被调用");
		
	}

//service方法: 每次发出请求时调用。调用n次。
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.service(arg0, arg1);
		System.out.println("5.service法法被调用");
		
	}
	
//destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署
//web应用时销毁servlet对象。只调用1次。
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		super.destroy();
		System.out.println("6.servlet对象被销毁");
	}
}

2、常用的Servlet对象

HttpServletRequest  请求对象:获取请求信息

HttpServletResponse 响应对象: 设置响应对象

ServletConfig对象    servlet配置对象

ServletContext对象; servlet的上下文对象

HttpServletRequest对象: 请求对象。获取请求信息
请求行:request.getMethod() 、request.getRequestURI/getRequestURL() 、request.getProtocol();

请求头: request.getHeader(“name”) 、 request.getHeaderNames()

实体内容: request.getInputStream()

获取参数数据:(GET或POST)
request.getParameter(“name”) 一个值的参数
request.getParameterValues(“name”); 多个值的参数
request.getParameterNames() 所有参数

HttpServletResponse对象: 响应对象。设置响应信息。
响应行: response.setStatus();

响应头: response.setHeader(“name”,“value”)

实体内容:
(PrintWriter) response.getWriter().writer(); 字符内容
(OutputStream)response.getOutputStream().writer(); 字节内容

3、ServletConfig对象

ServletConfig对象: 主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)

//实例化一个ServletConfig对象

ServletConfig config=this.getServletConfig();
ServletConfig config=request.getServletConfig();

ServletConfig的API:

				java.lang.String getInitParameter(java.lang.String name)  根据参数名获取参数值
				
				java.util.Enumeration getInitParameterNames()    获取所有参数
				
			    ServletContext getServletContext()     得到servlet上下文对象
			    
				java.lang.String getServletName()       得到servlet的名称

案例:

	//通过getInitParameterNames获取initparam中的键值对
		Enumeration<String> paramNames=config.getInitParameterNames();
		while(paramNames.hasMoreElements()){
			String paramName=paramNames.nextElement();
			pw.append(paramName+":"+config.getInitParameter(paramName));
		}

4、 ServletContext对象
ServletContext对象 ,叫做Servlet的上下文对象。表示一个当前的web应用环境。一个web应用中只有一个ServletContext对象。

实例化有关ServletContext对象

ServletContext context=this.getServletContext();

ServletContext context=ServletConfig.getServletContext();


		java.lang.String getContextPath()   --得到当前web应用的路径
		
		java.lang.String getInitParameter(java.lang.String name)  --得到web应用的初始化参数
		
		java.util.Enumeration getInitParameterNames() 
		 
		void setAttribute(java.lang.String name, java.lang.Object object) --域对象有关的方法
		
		java.lang.Object getAttribute(java.lang.String name)  
		
		void removeAttribute(java.lang.String name)  
		
		RequestDispatcher getRequestDispatcher(java.lang.String path)   --转发(类似于重定向)
		
		java.lang.String getRealPath(java.lang.String path)     --得到web应用的资源文件
		
		java.io.InputStream getResourceAsStream(java.lang.String path)  
		
		java.lang.String getContextPath()  得到web应用路径 

得到web应用的初始化参数(全局)

		java.lang.String getInitParameter(java.lang.String name)  --得到web应用的初始化参数
		
		java.util.Enumeration getInitParameterNames()  
			web应用参数可以让当前web应用的所有servlet参数获取!!!

3、转发&重定向

//转发

		request.getRequestDispatcher("/aa_IndexServlet").forward(request, response);
		a)地址栏不会改变
		b)转发只能转发到当前web应用内的资源
		c)可以在转发过程中,可以把数据保存到request域对象中

//重定向

		//response.sendRedirect(request.getContextPath()+"/aa_IndexServlet");
		a)地址栏会改变,变成重定向到地址。
		b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
		c)不能再重定向的过程,把数据保存到request中。

结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!

5、Cooke技术:会话数据保存在浏览器客户端。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		//1)服务器创建cookie对象,把会话数据存储到cookie对象中。
		Cookie cookie=new Cookie("name","kaihua");
		
		/**将Cookie的数据发送到浏览器
		 *方法一、(通过响应头发送: set-cookie名称)!!!注意发送数据方式name=value,...
		 *方法二、response.addCookie(cookie1);
		 */
		/**response.setHeader("set-cookie1",cookie.getName()+
				"="+cookie.getValue()+",email=@qq.com");*/
		response.addCookie(cookie1);
		
		
		/**
		 * 1)设置cookie的有效路径。默认情况:有效路径在当前web应用下。 
		 */
		cookie.setPath(request.getContextPath());
		cookie1.setPath("/WEB_Servlet_test");
		
		/**
		 * 2)设置cookie的有效时间
		 * 正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间(秒)。
			负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
			零:表示删除同名的cookie数据

		 */
		/*
		cookie.setMaxAge(10);
		cookie2.setMaxAge(0); //删除同名的cookie
		*/
	
		//服务器接收cookie里的数据
		Cookie[] cookies=request.getCookies();
		if(cookies!=null){
			for(Cookie c:cookies){
				System.out.println(c.getName()+"="+c.getValue());
			}
		}else{
				System.out.println("cookie没有数据");
			}
	}
 Cookie的细节
		1)void setPath(java.lang.String uri)   :设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。
		
		2)void setMaxAge(int expiry) : 设置cookie的有效时间。
				正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
				负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
				零:表示删除同名的cookie数据
				
		3)Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

6、 Session特点:会话数据保存在服务器端。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		//创建或得到session对象
		HttpSession session=request.getSession();
		
		//把会话数据保存到session对象中
		session.setAttribute("name", "kaihua");

		//把JSESSIONID作为Cookie的值发送给浏览器保存
		Cookie cookie=new Cookie("JSESSIONID",session.getId());
			
		response.addCookie(cookie);
	}
	

HttpSession类:用于保存会话数据

		1)创建或得到session对象
			HttpSession getSession()  
			HttpSession getSession(boolean create)
			  
		2)设置session对象
			void setMaxInactiveInterval(int interval)  : 设置session的有效时间
			void invalidate()     : 销毁session对象
			java.lang.String getId()  : 得到session编号
			
		3)保存会话数据到session对象
			void setAttribute(java.lang.String name, java.lang.Object value)  : 保存数据
			java.lang.Object getAttribute(java.lang.String name)  : 获取数据
			void removeAttribute(java.lang.String name) : 清除数据

7、引入
Cookie的局限:
1)Cookie只能存字符串类型。不能保存对象
2)只能存非中文。
3)1个Cookie的容量不超过4KB。

如果要保存非字符串,超过4kb内容,只能使用session技术!!!

//配置Servlet
@WebServlet(urlPatterns="/SecondServlet",
			name="SecondServlet",
			loadOnStartup =1,
			initParams={
				@WebInitParam(name="name",value="kaihua"),
				@WebInitParam(name="pwb",value="1346464")
			}
			)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值