1 request和response简介
1.1 request和response介绍
服务器接收到来自浏览器的请求后,会调用Servlet的service方法处理请求,在调用service之前,会创建request对象(用于封装Http请求信息)和response对象(用于封装最后将要发送给浏览器的响应信息)
在执行service处理请求的过程中, 如果要获取任何请求相关的信息, 可以通过request(调用方法)来获取;
如果有任何数据要发送给浏览器, 可以通过response对象进行发送。
2 request对象
2.1 request对象的方法
另,请求参数也属于请求信息,request也提供了方法获取。
2.2获取请求参数
1、request获取请求参数的方法: request.getParameter(String name) – 根据请求参数的名称获取参数值。返回String类型的参数值。 例如,获取用户名:String username =
request.getParameter(“username”);
request.getParameterValues(String name) – 根据请求参数的名称获取多个值组成的数组。返回String类型的数组。 例如获取爱好:String[] likes =
request.getParameterValues(“like”);
2、在获取中文请求参数时,请求参数可能会有乱码问题,关于请求参数的乱码问题:
(1)如果请求方式为POST提交,必然会出现乱码,解决方式是在任何获取参数的代码之前,添加如下代码:
request.setCharacterEncoding(“utf-8”);
(2)如果请求方式为GET提交,tomcat8及之后的版本已经解决了中文参数乱码的问题,不需要处理,tomcat7及之前的版本只需要在 [tomcat]/conf/server.xml中添加如下配置也可以解决乱码问题。
2.3请求转发、域对象
1、请求转发:是指定服务器中的某一个资源(Servlet或JSP)在处理请求的过程中,将请求转发给一个其他的资源,让其他资源来处理请求。
实现代码:
request.getRequestDispatcher("转发到资源的路径").forward(req, res)
2、域对象:能够在指定的范围内, 利用自身的map实现数据的共享
在request对象内部保存了一个map,专门用于存取数据。这个map我们可以称之为是request域
request.setAttribute(String attrName, Object attrValue) –
往request域中添加一个域属性。属性名只能是字符串,属性值可以是任意类型。 request.getAttribute(String
attrName) – 通过属性名获取存放在request域中的属性值。
3、请求转发和域对象经常配合着使用,实现从Servlet中带数据到JSP进行显示!!
提示:(1)请求转发是一次请求,一次响应
(2)转发前后地址栏地址不会发生变化
4、实例:利用请求转发、域对象实现(模拟)查询个人信息功能
UserServlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.查询个人信息(模拟)
String name = “王海涛”;
String age = “18”;
//2.将数据存入request对象的map中
request.setAttribute(“name”, name);
request.setAttribute(“age”, age);
//3.通过转发讲request对象(及其中的数据)带到JSP进行显示
request.getRequestDispatcher("/show.jsp").forward(request, response);
}
show.jsp:
姓名:<%= request.getAttribute("name") %>
年龄:<%= request.getAttribute("age") %>
3response对象 3.1response对象的方法
3.2向客户端发送数据
向浏览器客户端发送响应数据, 可以通过两个流进行:
response.getOutputStream() – 字节流
response.getWriter() – 字符流
在通过字符流发送文本数据时可能会有乱码问题
/* 0.通知服务器使用utf-8发送数据给浏览器
• 同时通知浏览器也使用utf-8接收服务器发送过来的数据 */
response.setContentType(“text/html;charset=utf-8”);//1.获取字符流
PrintWriter pw = response.getWriter();
pw.write(“哈喽”);
3.3实现重定向
转发只能在同一个Web应用内部的两个资源之间进行跳转, 不可以是不同的Web应用或者不同的服务器中进行跳转。而重定向则没有此限制
1、重定向:是指当用户浏览某个网址时,将其导向到另一个网址的技术。
http://localhost/day03/ResponseDemo2 http://localhost/day03/index.html
例如,在注册或登录成功后,浏览器地址栏地址将会跳转到首页。
实现重定向:(模拟登录成功后跳转到首页)
response.sendRedirect("/LoginServlet/index.html");