HttpServletRequest

HttpServletRequest对象是封装了用户的请求信息,包括请求参数去,请求头等信息,service()f方法中的两个HttpServletRequest和HttpServletResponse的形参是由Tomcat将创建好的实例对象传进来,不需要我们关心。(如果感兴趣的话,可以看看Tomcat的底层实现,如果有时间的话,我们可以再详细讨论一下这个原理)。

HttpservletRequest的常用方法

  1. import java.io.IOException;
  2.  
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. public class Servlet01 extends HttpServlet{
  9. @Override
  10. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. String url=req.getRequestURL().toString();
  12. System.out.println("url--->"+url);
  13.  
  14. String uri=req.getRequestURI();
  15. System.out.println("uri--->"+uri);
  16.  
  17. String qs=req.getQueryString();
  18. System.out.println("请求参数:"+qs);
  19.  
  20. String method=req.getMethod();
  21. System.out.println("请求参数"+method);
  22.  
  23. String protocol=req.getProtocol();
  24. System.out.println("请求协议:"+protocol);
  25.  
  26. String context=req.getContextPath();
  27. System.out.println("请求站点名:"+context);
  28.  
  29. }
  30. }
获取请求头

  1. import java.io.IOException;
  2. import java.util.Enumeration;
  3.  
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. public class Servlet02 extends HttpServlet{
  10. @Override
  11. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  12. String header=req.getHeader("host");
  13. System.out.println(header);
  14.  
  15. System.out.println("++++++++++++++++");
  16. Enumeration<String> enu=req.getHeaderNames();
  17. while(enu.hasMoreElements()){
  18. System.out.println(enu.nextElement());
  19. }
  20. }
  21. }
获取客户端请求参数

  1. import java.io.IOException;
  2. import java.util.Enumeration;
  3. import java.util.Map;
  4.  
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. public class Servlet03 extends HttpServlet {
  11. @Override
  12. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. String name=req.getParameter("uname");
  14. System.out.println(name);
  15.  
  16. String [] hobby=req.getParameterValues("hobby");
  17. for(String temp:hobby){
  18. System.out.println(temp);
  19. }
  20.  
  21. Enumeration<String> es=req.getParameterNames();
  22. while(es.hasMoreElements()){
  23. es.nextElement();
  24. }
  25.  
  26. Map<String, String[]> map =req.getParameterMap();
  27. for(String key:map.keySet()){
  28. System.out.println(key);
  29. for(String str:map.get(key)){
  30. System.out.println(str);
  31. }
  32. }
  33. }
  34. }
乱码问题的解决方式

由于现在的 request 属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设置 request 中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。

方式一:req.setCharacterEncoding("UTF-8");

该方法值针对post有效,对get是无效的,但是Tomcat8 起,以后的 GET方式请求是不会出现乱码的,所以使用Tomcat8及以上的Tomcat版本,只需要设置该post的编码即可

方式二:

String str=req.getParameter("uname");
String str1=new String(str.getBytes("ISO-8859-1"),"UTF-8");

该方式借助了 String 对象的方法,该种方式对任何请求有效,是通用的,但只能针对单个参数进行编码转换来达到解决乱码的问题

请求转发

请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。实现方式如下,达到多个资源协同响应的效果。

  1.    servlet01.java
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. public class servlet01 extends HttpServlet {
  9. @Override
  10. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. String name= req.getParameter("uname");
  12. req.setAttribute("uname", name);
  13.  
  14. //转发到servlet02
  15. req.getRequestDispatcher("s02").forward(req,resp);
  16. }
  17. }
  18.  
  19.   servlet02.java
    import java.io.IOException;
  20. import javax.servlet.ServletException;
  21. import javax.servlet.http.HttpServlet;
  22. import javax.servlet.http.HttpServletRequest;
  23. import javax.servlet.http.HttpServletResponse;
  24.  
  25. public class servlet02 extends HttpServlet {
  26. @Override
  27. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  28. System.out.println(req.getAttribute("uname"));
  29. //转发到index.jsp页面 ,请求转发的过程中,用的是同一个request和response
  30. req.getRequestDispatcher("index.jsp").forward(req,resp);
  31. }
  32. }
  33.  
  34. index.jsp页面
  35. <%@ page language="java" contentType="text/html; charset=UTF-8"
  36. pageEncoding="UTF-8"%>
  37. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  38. <html>
  39. <head>
  40. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  41. <title>Insert title here</title>
  42. </head>
  43. <body>
  44. 欢迎${uname }来到首页
  45. </body>
  46. </html>

HttpServletResponse

Web 服务器收到客户端的 http 请求,会针对每一次请求,分别创建一个用于 代表请求的 request 对象和 代表响应的 response 对象。request 和 response 对象代表请求和响应:获取客户端数据,需要通过request 对象; 向客户端输出数据,需要通过 response 对象。HttpServletResponse 的主要功能用于服务器对客户端的请求进行响应,将Web 服务器处理后的结果返回给客户端。service()方法中形参接收的是HttpServletResponse 接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

常用方法

  1. import java.io.IOException;
  2.  
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. public class Servlet04 extends HttpServlet{
  9. @Override
  10. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. req.setCharacterEncoding("UTF-8");
  12. String str=req.getParameter("uname");
  13. String str1=new String(str.getBytes("ISO-8859-1"),"UTF-8");
  14. System.out.println(str1);
  15.  
  16. resp.addHeader("name", "zhangsan");
  17. resp.setHeader("name", "lisi");
  18.  
  19. resp.setHeader("refresh", "3;url=http://www.shsxt.com");
  20. resp.sendError(404);
  21.  
  22. }
  23. }
  1. import java.io.IOException;
  2.  
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. public class Servlet04 extends HttpServlet{
  9. @Override
  10. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. resp.setContentType("text/html;charset=UTF-8");
  12. resp.getOutputStream().write("<h3> hello world</h3> ".getBytes());

将图片显示在网页上

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletOutputStream;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. public class Servlet05 extends HttpServlet {
  13. @Override
  14. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. resp.setContentType("image/jpg;charset=UTF-8");
  16. String realpath=req.getServletContext().getRealPath("/");
  17. System.out.println(realpath);
  18.  
  19. String filepath=realpath+"1.jpg";
  20. File file=new File(filepath);
  21. if(file.exists()&& file.isFile()){
  22. InputStream is=new FileInputStream(file);
  23. byte[] bs=new byte[1024];
  24. int len=0;
  25. while((len=is.read(bs))!=-1){
  26. resp.getOutputStream().write(bs,0,len);
  27. }
  28. resp.getOutputStream().close();
  29. is.close();
  30. }
  31. else{
  32. resp.setContentType("text/html;charset=UTF-8");
  33. resp.getWriter().write("<h1>文件不存在!</h1>");
  34. }
  35.  
  36. }
  37. }

重定向

  1. import java.io.IOException;
  2.  
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. public class Servlet06 extends HttpServlet{
  9. @Override
  10. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. resp.sendRedirect("s05");
  12.  
  13. }
  14.  
  15. }

javaWeb的HttpServletRequest和HttpServletResponse的更多相关文章

  1. javaweb学习总结(八)——HttpServletResponse对象(二)

    一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类,

  2. javaweb(十)——HttpServletRequest对象(一)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  3. javaweb学习总结(八)——HttpServletResponse对象(二)(转)

    (每天都会更新至少一篇以上,有兴趣的可以关注)转载自孤傲苍狼 一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedI ...

  4. HttpServletrequest 与HttpServletResponse总结

    如果说DOM是javascript与HTML的桥梁,那么servlet就是前端与后端的桥梁,HttpServletRequest和HttpServletResponse就是之间的信使,好了,废话不多说 ...

  5. javaweb学习总结(七)——HttpServletResponse对象(一)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  6. GenericServlet,HttpServletRequest和HttpServletResponse

    最基本的是通过实现Servlet接口来编写Servlet类,这需要实现Servlet接口中定义的5个方法. 为了简化Servlet的编写,在javax.servlet包中提供了一个抽象类Generic ...

  7. javaweb学习总结(七)——HttpServletResponse对象(一)(转)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...

  8. javaweb学习总结(七)——HttpServletResponse对象(一)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3789624.html Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对 ...

  9. @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式

    在springmvc的应用中有些限制会出现必须是 public void save(HttpServletRequest request, HttpServletResponse response) ...

随机推荐

  1. springboot打war包部署到tomcat

    1:build.gradle plugins { id 'org.springframework.boot' version '2.1.5.RELEASE' id 'java' } apply plu ...

  2. python实践项目九:操作文件-修改文件名

    描述:多个文件,文件名名包含美国风格的日期( MM-DD-YYYY),需要将它们改名为欧洲风格的日期( DD-MM-YYYY) 代码1:先创建100个文件名为美国风格日期的文件(文件路径为项目当前路径 ...

  3. VyOS 关于dhcp server 和dhcp relay 切换需要注意的

    dhcp server : /config/dhcpd.leases dhcp relay 两个dhcp 模式切换需要删除这个配置文件

  4. BugkuCTF~Misc~WriteUp

    1.签到 get flag: Qftm{You should sign in} 2.这是一张单纯的图片 查看图片十六进制 提去特殊字符串进行解码 get flag: key{you are right ...

  5. web版本的用户登陆票据 FormsAuthenticationTicket

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "username", DateTime.N ...

  6. 【Linux文件目录】的一点小结

    1. 相关指令:      chgrp:改变文件所属用户组 点击(此处)折叠或打开 chgrp [-R] group dirname/filename -R: 基本-r参数都是递归recursive ...

  7. LeetCode 946. 验证栈序列(Validate Stack Sequences) 26

    946. 验证栈序列 946. Validate Stack Sequences 题目描述 Given two sequences pushed and popped with distinct va ...

  8. Markdown Html高级功能 测试用例

    插入音频 后台样式代码: #cnblogs_post_body .music { height: 140px; /*padding-bottom: 14.39%;*/ /* 16:9 */ posit ...

  9. Apache Kafka用例

    1.目标 在我们上一篇Kafka教程中,我们讨论了Kafka Pros and Cons.今天,在这篇Kafka文章中,我们将讨论Apache Kafka用例和Kafka应用程序.Kafka是新数据堆 ...

  10. Windows下Charles抓包https协议配置

    最近设置https协议对手机app抓包遇到一些问题,现在在这里记录下,以防以后遇到问题没有记录 1.从官网下载Charles的安装包 https://www.charlesproxy.com/down ...