java之servlet学习基础(二)

上一次写到Servlet的实现方法,主要仍是经过继承HttpServlet来实现Servlet。下面主要是回顾一下HttpServletRequest和HttpServletResponse对象中的一些方法。由于Web服务器收到客户端的http请求,会针对每一次请求建立一个用于表明请求的request的对象,和表明响应的response对象。html


 

1.HttpServletResponseweb

  设置响应状态码:setStatus(int )浏览器

  请求重定向:sendRedirect(String location)
缓存

  设置响应消息头:setHeader(String name, String value)  服务器

    eg,  response.setHeader("content-type","text/html;charset=UTF-8")cookie

        告知浏览器使用什么码表,即让浏览器用UTF-8来解析返回的数据session

  设置服务器端编码:setCharacterEncoding(String charset)  
post

    eg,  response.setCharacterEncoding("UTF-8");优化

        告知服务器(servlet)用UTF-8来转码,而不是用ISO-8859-1(服务器端默认编码)
编码

  设置客户端和服务器端编码:setContentType(String charset)

        setHeader和setCharacterEncoding的优化,同时告诉客户端和服务器端使用什么格式的编码。

  得到字符输出流:getWrite()

  得到字节输出流:getOutputStream()//注意编码

 

2.HttpServletRequest

  得到请求方式:getMethod();//post or get

  得到客户端发出请求时完整的url:getRequestURL();

  得到请求行中的uri:getRequestURI();

  得到当前应用的虚拟目录:getContextPath();

  得到请求行中的参数部分:getQueryString();

  根据请求消息头的名称得到其对应的值:getHeader(String name);

 如下是关于请求正文方面的方法,比较重要

  <input type="text" name="username"/>

  getParameter(String name);根据表单中name属性的名,获取value值

  getParameterValues(String name)为复选框提供的得到值得方法

  getParameterNames();获取表单提交的全部name名称

  getParameterMap();获得表单提交的全部的键值

 由于request也是一个域对象,因此有如下方法

  setAttribute(String name, Object value);

  getAttribute(String name);

  removeAttribute(String name);

 请求转发相关:(注意:请求转发不能转发到其余路径,必须是本项目之下的,而重定向能够到其余路径)

 

  getRequestDispatcher(String path)//得到一个RequestDispatcher对象

    forword(ServletRequest , ServletResponse )//转发

    include(ServletRequest , ServletResponse )//请求包含

 解决post方式编码问题:

  request.setCharacterEncoding("UTF-8");//告诉服务器要使用什么编码,注:浏览器是用什么编码传到服务器端就是什么编码

 解决get方式编码问题:

   byte b[] = name.getBytes("ISO-8859-1");//1010101

 

  String name = new String(b,"UTF-8");//解决

  即:String name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

 


 

如下回顾Cookie和Session。

3.Cookie 

  cookie是servlet发送到web浏览器的少许信息,这些信息由浏览器保存,而后发送回服务器。cookie的值能够惟一的标识客户端。所以,cookie经常使用于会话管理。一个cookie拥有一个键、值和一些可选属性(注释,路径,域限定符、版本号)。Servlet经过视同HttpServletResponse的addCookie方法,将建立的cookie发送到客户端浏览器,该方法将字段添加到HTTP响应头,以便于一次一个地将cookie发送到浏览器。而客户端浏览器经过向HTTP响应头添加字段将cookie返回给服务器端(即servlet),可以使用HttpServletRequest的getCookie方法从请求中获取cookie。注意,一些cookie可能有相同的键,但却有不一样的路径属性。

  属性:

    (1)name:至关于键。名称不能惟一肯定一个Cookie。由于cookie的路径可能不一样。

    (2)value:值。

    (3)path:默认值是写cookie所在的应用程序的访问路径。(客户端在访问服务器资源时,根据访问的路径决定是否带着cookie到服务器,若是访问的路径是以cookie所在的path,就带着cookie,不然不带)。

    (4)maxAge:cookie的缓存时间。默认-1(存在浏览器的内存中)。经过setMaxAge(int )来设置缓存时间。(可实现记住用户的功能)

        负数:cookie的数据存在浏览器缓存中

        0:删除。

        整数:缓存到磁盘上的时间。(单位s)

 

4.Session

  session也是一个域对象。(目前已知的域对象:ServletContext,request,Session)。sesseion可使处在同一个会话下的应用共享数据。cookie是客户端技术,只能存字符串。HttpSession是服务器端技术,能够存对象。

  经过getSession()得到Session对象。

  HttpSession request.getSession()内部执行原理:

    (1)获取名称为JSESSIONID的cookie的值。(session是依赖于cookie的)

    (2)若是没有这样的cookie,就建立一个新的httpsession对象,并分配一个惟一的SessionID,并向客户端返回一个键值为JSESSIONID=SessionID的cookie。

    (3)若是有这样的cookie,获取cookie的值(即HttpSession对象的值),从服务器内存中根据ID找到HttpSession对象。

        找到了:取出来继续服务。

        找不到:从(2)开始。

  方法:

    setAttribute(String )

    getAttribute(String )

相关文章
相关标签/搜索