Servlet二
一、HttpServletRequest类
- 作用:每次客户端发送请求到Tomcat服务器,都会把请求的协议信息解析封装到Request对象中,然后传递到service方法(doGet或doPost)中,我们可以通过HttpRequestServlet对象,获取到所有的请求信息。
- 常用方法:
- getRequestURI() 获取请求的资源路径
- getRequestURL() 获取请求的统一资源定位符
- getRemoteHost() 获取客户端ip地址
- getHeader() 获取请求头
- getParameter() 获取请求体的参数
- getParameterValues() 获取请求体的参数(多个值调用时)
- getMethod() 获取请求的方法
- setAttribute() 设置域数据
- getAttribute() 获取域数据
- getRequestDispatcher() 请求重定向
1 //获取请求的资源路径 2 System.out.println(req.getRequestURI()); 3 //获取请求的统一资源定位符 4 System.out.println(req.getRequestURL()); 5 //获取请求头 6 System.out.println(req.getHeader("User-Agent")); 7 //获取请求体里的参数 8 System.out.println(req.getParameter("name")); 9 //获取请求的ip地址 10 System.out.println(req.getRemoteHost()); 11 //获取请求的方法 12 System.out.println(req.getMethod()); 13 //设置域数据 14 req.setAttribute("key2", "value2"); 15 //获取域数据 16 Object key2 = req.getAttribute("key2"); 17 System.out.println(key2); 18 //请求转发 19 req.getRequestDispatcher("/servlet2").forward(req,resp);
二、doGet请求的中文乱码解决
//获取请求体的参数出现中文乱码的解决方案 String name = req.getParameter("name"); String newString = new String(name.getBytes("iso-8859-1"),"UTF-8"); System.out.println(newString);
三、doPost请求的中文乱码解决
1 //设置请求体的字符集,解决中文乱码问题 2 req.setCharacterEncoding("UTF-8");
四、请求转发
- 概念:指服务器收到客户端发送的请求后,从当前资源转发至另一个资源的操作
- 特点:
- 浏览器地址栏没有变化
- 一次请求
- 共享request域中的数据
- 可以访问web_inf下的数据
不能访问web工程以外的数据
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求的参数 String name = req.getParameter("name"); System.out.println(name); //盖章 if("Tom".equalsIgnoreCase(name)){ req.setAttribute("password","123456"); } //走路 req.getRequestDispatcher("/servlet4").forward(req,resp); }
六、base标签的作用
- 关于网页跳转
- 点击a标签,网址会发生变化,如从index.html跳转至localhost:8080/untitled/a/b/c.html,想跳转回index.html,则需要以当前浏览器网址为相对路径,通过../../index.html进行跳转
- 请求转发,网址不会发生变化,因此相对路径依旧是同一个路径
- Web中的相对路径和绝对路径
- 相对路径: .-表示当前目录 ..-上一级目录 资源名-当前目录下的资源名相当于(./资源名)
- 绝对路径:http://ip:port/工程路径/资源路径
- 实际开发中,路径都使用绝对路径,而不是使用简单地相对路径
- base标签可以设置页面相对路径工作时参照的地址即href属性的值
<base href="http://localhost:8080/untitled/">
- web中斜杆/的不同含义
- /如果被浏览器解析-->http://ip/port/
/如果被服务器解析-->http://ip/port/工程路径/
1 req.getRequestDispatcher("/").forward(req,resp); 2 req.getRealPath("/"); 3 <url-pattern>/servlet3</url-pattern>
4//特殊情况
5 response.sendRedirect("/")将/发送给浏览器解析,得到http://ip:port/
七、HttpServletResponse类
- 作用:和HttpServletRequest一样,当Tomcat服务器接收到请求时,都会实例化这两个类传递给Servlet程序去使用,HTTPServletResponse表示所有响应的信息,如果我们需要设置返回给客户端的参数,可通过该类进行设置。
- 两个输出流的说明
- resp.getOutputStream 常用于下载(传递二进制数据)
- resp.getWriter 常用于回传数据(常用)
- 注意:两个流只能用一个,否则就会报错
- 如何往客户端回传数据
PrintWriter writer = resp.getWriter();
writer.write("123456");
- 解决中文乱码问题
//设置服务器使用UTF-8字符集 resp.setCharacterEncoding("UTF-8"); //设置让浏览器也使用UTF-8字符集 resp.setHeader("Content-Type","text/html;charset=UTF-8") //以上方式不推荐,以下方式能够一步到位 resp.setContentType("text/html;charset=UTF-8")
八、请求重定向
- 概念:就是指当服务器收到请求时,告诉客户端一个新的地址,让它去访问因为之前的地址可能已经废弃
- 特点:
- 两次请求
- 地址会发生变化
- 不共享request域中的数据
- 不能访问web_inf下的数据
- 代码
1 //方案一:推荐 2 resp.setStatus(302); 3 resp.setHeader("location","http://localhost:8080/untitled/index.jsp"); 4 //方案二:推荐 5 resp.sendRedirect("http://localhost:8080/untitled/index.jsp");

浙公网安备 33010602011771号