1.service方法处理请求/响应
对于每一个HTTP请求,servlet容器会创建一个封装了HTTP请求的ServletRequest实例传递给servlet
的service方法,ServletResponse则表示一个Servlet响应,其隐藏了将响应发给浏览器的复杂性。
通过ServletRequest的方法你可以获取一些请求相关的参数,而ServletResponse则可以将设置一些返
回参数信息,并且设置返回内容。
a.HttpServlet中的service方法:
b. 常用方法
Request对象:接口封装了客户请求信息,如客户请求方式、参数、客户使用的协议、以及发出请求的远程主机信息等,其主要方法:
HttpServletResquest常用方法:
req.getParameter(String); //根据名字获取参数的值:表单中的参数,地址栏中的参数
req.getParameterValues(String);//根据名字获取一组参数的值(复选框)
req.getParameterMap()://获得一个Map<String, String[]>对象,所有的参数值都放在字符串数组
中
req.getAttribute(String);//根据名字获取属性的值
req.setAttribute(String,Object);//根据属性设置值
req.getRequestDispatcher(String);//请求转发器
req.setCharacterEncoding("utf-8"); //设置请求的编码方式
Response对象:接口封装了服务器响应信息,主要用来输出信息到客户端浏览器,其主要方法:
HttpServletResponse常用方法:
Response.setContentType("text/html;charset=utf-8");设置响应的内容类型
PrintWriter response.getWriter();//获得响应的输出流
response.sendRedirect(redirect);//重定向到指定的网址
2.请求转发跟重定向的区别?
请求转发,服务器转发:地址栏不会发生改变,在服务器端完成,效率高。携带数据可以在Servlet之间进行传递。
//请求转发,服务器转发
request.setAttribute("msg","欢迎你登陆成功");//request存储数据
request.getAttribute("msg"); //request对象获取数据
request.getRequestDispatcher("/welcomeServlet").forward(request,response);
客户端重定向:客户端重新发送新的请求,无法携带数据。地址栏会发生改变。
//客户端重定向
//服务器会向客户端浏览器发送一个响应:url, 客户端会重新请求该URL
request.setAttribute("msg","欢迎你登陆成功");//request存储数据
request.getAttribute("msg"); //request对象获取数据
response.sendRedirect("/login.html");
转发使用的是req.getRequestDispatcher()方法;重定向使用的是resp.sendRedirect();
转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
转发是服务器行为,重定向是客户端行为;
转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围);
转发和重定向的选择
- 重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的
时候建议使用转发。 - 因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外
一个WEB站点上的资源的情况,这个时候就只能使用重定向了