Day07_request-response

来源:互联网 发布:杭州浪尖网络 编辑:程序博客网 时间:2024/05/22 07:03

01 Request入门

客户端向服务器发送请求时,会将所有的请求都封装在HttpServletRequest对象当中,那么我们就可以通过这个对象获取客户端的一些有用数据。

★02 Request对象常用API

对于POST请求,表单项不填,那么request.getParameter()返回,返回”“空白字符串

  • requeset获取客户端的信息

getRequestURL()方法返回客户端发出请求时的完整URL
getRequestUR()I方法返回请求行中的资源名部分
getQueryString() 方法返回请求行中的参数部分
getRemoteAddr()方法返回发出请求的客户机的IP地址
getLocalAddr()方法返回WEB服务器的IP地址
getMethod()方法返回客户机请求方式
getServletPath()方法返回Servlet映射路径
request.getContextPath()方法返回当前web应用根目录

对于GET方式,请求参数是写在请求行中
对于POST方式,请求参数是写在请求体中
表单不写mothod,默认是GET请求。

  • 获取请求头的信息

获得客户机请求头
getHeader(name)方法 — String
getHeaderNames方法 — Enumeration

  • 获得请求体的参数

getParameter(name) —返回 String 通过name获得值 getParameterValues(name) —返回String[ ] 通过name获得多值 getParameterNames — 返回Enumeration<String> 获得所有name

★03 Request对象的应用

用户注册

★04 表单乱码的原因和解决方案

服务器的默认编码方式ISO8859-1编码,;而浏览器是UTF-8,

解决办法
1. response.setContentType("text/html;charset=UTF-8"); 服务器设置浏览器的解码方式
2. request.setCharacterEncoding("UTF-8")只能针对post请求。直接设置请求的编码
3.

    //读取进来就就是被ISO编码了。现在我们需要继续把它编码成为二进制文件,然后用UTF-8去解码    byte[] buf = username.getBytes("ISO8859-1");    username = new String(buf,"UTF-8");

★05 Request域对象

request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。
个人理解就是生存在服务器端的一个对象。这样我们既可以在服务器端传递数据,而浏览器端的地址不会改变

request.setAttribute("NAME", username);设置域对象属性
getAttribute("NAME")获取对应的值
removeAttribute("NAME")移除对应的域对象。

    //把这个页面重新转发到其他servlet中,这里的"/"代表程序的跟目录         request.getRequestDispatcher("/Demo02B").forward(request, response);        

★06 转发的细节

如上

07 练习:用户注册

08 Response入门

web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。用于服务器将数据发送到客户端。`HttpServletResponse`

★09 Response对象常用的API

response.setContentType("text/html;charset=UTF-8");两层含义:一层是让服务器按照UTF-8编码。一层是让浏览器按照UTF-8的方式解码。

当你想输出中文字符串时,可以采用字符或者字节的方式

  1. 字符 response.getWriter()

  2. 字节response.getOutputStream()

★10 Response对象的应用

  1. 文件下载。
    //设置浏览器响应方式。下载        response.setHeader("content-disposition","attachment;filename="+fileName);<a href="/Day07_itcaset_request-response/Demo03">下载</a>// "/"就是服务器webapps的根目录,Demo03是存在WEB-INF目录下面,但是浏览器是无法访问这个目录的。/Demo03是我们在web.xml目录下配置的映射目录
  1. 验证码(设置浏览器不缓存)

    response.setDateHeader("expires",-1);response.setHeader("cache-control","no-cache");response.setHeader("pragma","no-cache");

★11 Response向浏览器输出中文乱码的原因和解决方案

 response.setContentType("text/html;charset=UTF-8");

★12 重定向的细节

在重定向的情况下,原来的`request`的域对象不能用了。我们用servletContext域对象替代。

servletContext域对象在部署的时候就创建了。 所以我们在

    //由Demo09A重定向到Demo09B中,这里的/表示webapps目录response.sendRedirect(request.getContextPath()+"/Demo09B");

★13 RequestDispatcher对象常用的API

在第5条我已经做了简述

### 14 练习:用户登录和JS验证登录表单
老师的08练习问题。

在得到验证码图片的时候可以通过javaScript的开动态改变img标签的src属性。

function shuaxin() {    document.getElementById("imgID").src = "/Day07_itcaset_request-response/Demo04?" + new Date().getTime();            }
0 0
原创粉丝点击