JavaWeb基础知识总结. (6)

l 浏览器在没有得到Content-Type头时,会使用GBK来解读字符串,当如果你设置了Content-Type,会使用你指定编码来解读字符串。response.setContentType(“html/texgt;charset=utf-8”);

4 response字符流的缓冲区

l response字符流缓冲区大小为8KB;

l 可以调用response.getWriter().flush()方法完成刷新,这会把当前缓冲区中的数据发送给客户端。

l 当response一旦开始了发送,那么response的内部会有一个提交状态为true。可以调用response的isCommitted()方法来查看当前的提交状态。

5 自动刷新

l 有一个响应头:Refresh,它的作用是在指定的时间后,自动重定向到指定路径。例如:response.setHeader(“Refresh”, “5;URL=http://www.baidu.com”);,表示在5秒后自动跳转到百度。

6 设置状态码

l response.sendError(404, “没找到您访问的资源”)

l response.sendStatus(302);

7 重定向

l 重定向:两个请求。

Ø 第一个请求,服务器响应码:302

Ø 第一个请求的响应头有一个Location头,它说明了要重定向的URL;

Ø 第二个请求,浏览器重新向Location头指定的URL发出。

l 重定向:可以重定向到本项目之外的页面。例如可以重定向到百度!

l 重定向:可以重定向到本项目内的其他资源,可以使用相对路径,以“/项目名”开头

l 重定向:会使浏览器的地址栏发生变化!

注意事项:

l 当response为以提交状态,就不能再重定向了!

l 当使用了response的输出流响应后,再重定向。如果没有造成response提交,那么说明数据还在缓冲区中,tomcat会把缓冲区清空,然后重定向。

request post请求方式

l 有主体(正文)

l 有Content-Type,表示主体的类型,默认值为application/x-www-form-urlencoded;

2 request功能:

l 可以获取请求方式:String getMethod()

l 可以获取请求头:String getHeader(String name)

l 可以获取请求参数(包含主体或路径后面的参数):String getParameter(String name)

3 请求编码

l 地址栏的参数是GBK的;

l 在页面中点击链接或提交表单,参数都由当前页面的编码来决定,而页面的编码由当初服务器响应的编码来决定。

l 服务器请求form.html,服务器响应utf-8的页面给浏览器,然后在form.html页面上点击链接和提交表单发送的参数都是utf-8。

l 如果服务器的所有页面都是utf-8的,那么只要不在浏览器的地址栏中给出中文,那么其他的参数都是utf-8的。

服务器:

l 服务器默认使用ISO-8859-1来解读请求数据。(tomcat7以前是这个编码)

l 可以使用request.setCharacterEncoding(“utf-8”)设置编码来解读请求参数。这个方法只对请求主体有效,而GET请求没有主体。说白了就是只对POST请求有效!

l 设置Tomcat 其中GET请求的默认编码:

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/>

 

l 因为编码的设置不能依赖tomcat的配置,所以还是需要我们自己手动转码

Ø String name = request.getParamter(“username”);//使用默认的iso来解码

Ø byte[] bytes = name.getBytes(“iso-8859-1”);//使用iso回退到字节数组

Ø name = new String(bytes, “utf-8”);//重新使用utf-8来解码

4 获取参数(详细)

l *String getParameter(String name) :通过参数名称获取参数值!

l String[] getParameterValues(String name):通过参数名称获取多个参数值!一般复选框会出现一个名称多个值的情况。

l *Map<String,String[]> getParameterMap():获取所有参数,封装到Map中,基参数名为key,参数值为value。

l Enumeration getParameterNames():获取所有参数的名称

5  requestServlet三大域对象之

域功能:

l void setAttribute(String name,Object value)

l Object getAttribute(String name)

l void removeAttribute(String name)

request 的存储范围:整个请求链!如果一个请求经过了多个Servlet,那么这些Servlet可以共享request域!

6 request获取头信息

l String getHeader(String name):通过头名称,获取头信息;

l Enumeration getHeaderNames() :获取所有头的名称;

l Enumeration getHeaders(String name):通过头名称,获取多个头信息;

l int getIntHeader(String name):通过头名称,获取头信息,本方法再把String的头信息转换成int类型。

7 reuqest的请求转发

如何请求转发

l 一个请求内经过多个资源(Servlet,还有jsp,而且经常是jsp)

l 请求转发需要使用RequestDispatcher的forward(HttpServletRequest,HttpServletResponse)

l RequestDispatcher rd = request.getRequestDispatcher(“/BServlet”);//参数是要转发的目标

l rd.forward(request,response);//转发到BServlet

其实你可以理解成在一个Servlet中,调用另一个Servlet的service()方法。

请求转发的注意事项

l 在第一个Servlet中可以使用request域保存数据,在第二个Servlet中可以使用request域获取数据。因为这两个Servlet共享同一个request对象。

l

l 在转发语句之后,其他语句是否会执行?答案是“可以”!

l 不能在一个Servlet中即重定向,又转发。

请求转发与重定向比较

l 请求转发后,地址栏中的地址不变!重定向变

l 请求转发是一个请求,重定向是两个请求;

l 请求转发可以共享request域,而重定向因为是两个请求,所以不能共享request。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html