JavaWeb---Servlet的请求和响应

来源:互联网 发布:电子数据交换的意思 编辑:程序博客网 时间:2024/06/04 19:11

Request 和Response 对象都是由服务器创建,管理,销毁.  由我们来使用.

继承体系结构:

ServletRequest(接口)<--------继承<-------HttpServletRequest(接口)<--------实现 org.apache.catalina.connector.RequestFacade@6049a827
ServletResponse(接口)<---------继承---  HttpServletResponse(接口)<-------------实现------org.apache.catalina.connector.ResponseFacade@3bec9d4

1.请求对象:获取请求的消息

1)为了防止编码格式的错误,首先应该设置请求编码和响应编码.

//设置请求编码和响应编码request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");

2)/获取请求头

String name = request.getHeader("username");//获取请求头的值long date  = request.getDateHeader(name);//获取日期头int i = request.getIntHeader(name);//获取数字头

3)获取请求行

String method = request.getMethod();//获取请求的方式:get/postString uri = request.getRequestURI();//获取UriStringBuffer url = request.getRequestURL();//获取URLString addr = request.getRemoteAddr();//获取IP地址String queryString = request.getQueryString();//获取请求的参数String protocol = request.getProtocol();//获取访问的版本,浏览器的信息
4)获取请求体:封装post请求的请求参数
//获取请求体:封装post请求的请求参数BufferedReader reader = request.getReader();String line = reader.readLine();

5)获取请求的参数

//获取请求参数的不同方式String na = request.getParameter("username");//通过参数名称获取值String[] strings = request.getParameterValues("hobby");//通常用于复选框Map<String,String[]> map = request.getParameterMap();//遍历map集合Set<String> keySet = map.keySet();for(String key:keySet){System.out.println(key);//遍历参数名String[] ss = map.get(key);//获取参数的值for(String v:ss){System.out.println(key+"="+v);}}Enumeration names = request.getParameterNames();//通过枚举的方式获取
6)中文乱码的解决:post请求

//处理post请求中文乱码的问题String n = request.getParameter("name");//服务器使用ISO-8859-1 的方式解码byte[] bys = n.getBytes("ISO-8859-1");n = new String(bys,"utf-8");

7)重定向和请求转发

重定向特点:两次请求,两次转发;既可以访问内部资源,也可以访问外部资源,地址栏内的地址发生变化

请求转发:一次请求,一次响应;只可以访问项目内部的资源;地址栏的地址不发生改变.

//重定向//1.设置302状态response.setStatus(302);response.setHeader("location", "http:baidu.com");//重定向:合二为一response.sendRedirect("http:baidu.com");//请求转发request.getRequestDispatcher("/demo1").forward(request, response);

重定向和请求转发的区别:

1.一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发。

2.一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向。

3.RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目
录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改
变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

4.HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。

 5.RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

2.响应对象:封装响应的数据,当真正的响应之前,取出里面的数据,给浏览器响应.

1)为了防止编码格式的错误,首先应该设置请求编码和响应编码.

//设置请求编码和响应编码request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");

2)响应字符串:

//响应一个字符串'PrintWriter writer = response.getWriter();writer.write("正在请求");

3)响应一个图片

//响应一个图片String path = this.getServletContext().getRealPath("xxx.jpg");//获取图片的真是路径//读取文件FileInputStream  fis=new FileInputStream(new File(path));//获取要读的文件ServletOutputStream fos = response.getOutputStream();byte[]  by=new byte[1024];int len=0;while((len=fis.read(by))!=-1){fos.write(by,0,len);fos.flush();}//关闭资源fis.close();fos.close();



原创粉丝点击