2022-8-30 servlet

打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

HttpServletRequest  --- request(请求)
  1. 所有的 和请求相关的操作,都用这对象来处理
  2. 当有请求来的时候 , request就被实例化
复制代码
HttpServletResponse --- response(响应)
  1. 所有和响应相关的操作,都用这个对象来处理
  2. 当有请求来的时候 , response 就被实例化
  3. 当你想要给出响应就使用 response ,,  我们给出的响应,必须要展示在客户端(浏览器)
复制代码
init方法什么时候执行?
  1. * 默认当我们第一次访问servlet的时候被调用,延迟加载。
  2. * 初始化方法只执行一次。
  3. public class HelloServlet extends HttpServlet {
  4.         @Override
  5.         public void init(ServletConfig config) throws ServletException {
  6.                 System.out.println("servlet初始化");
  7.                 System.out.println(config.getInitParameter("username"));
  8.                 System.out.println(config.getInitParameter("password"));
  9.         }
  10.         @Override
  11.         protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  12.                 doGet(req,resp);
  13.         }
  14.         @Override
  15.         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16.                 //接收参数 ,处理请求
  17.                   request.getParameter("username");
  18.                   request.getParameter("password");
  19.                   // 给出响应
  20.                 // 客户端和服务器端的信息传递
  21.                 // 设置响应的字符集   一定要放在获取流之前
  22.                 // 服务器处理字符串按照UTF-8处理
  23.                 response.setCharacterEncoding("utf-8");
  24.                 // 添加响应头,告诉浏览器以HTML的格式来解析响应字符串
  25.                 response.addHeader("content-type","text/html;charset=utf-8");
  26.                 //Io流
  27.                 PrintWriter writer = response.getWriter();
  28.                 //向客户端回复数据
  29.                 writer.write("我是后台返回的数据");
  30.                    //  * writer.write---写字符。
  31.                    //  * writer.print---写字节。
  32.                 //流的操作
  33.                 writer.flush();
  34.                 writer.close();
  35.         }
  36. }
复制代码
System.out.println("请求的方法:"   + request.getMethod());
System.out.println("请求的根路径:" + request.getContextPath());
System.out.println("请求的URI:"   + request.getRequestURI());
System.out.println("请求的URL:"    + request.getRequestURL());
System.out.println("请求的servletPath:" + request.getServletPath());
  1. @WebServlet("/demo.do")
  2. public class Demo01Servlet extends HttpServlet {
  3.         @Override
  4.         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5.                 // 根据key获取对应的value
  6.            request.getParameter("");
  7.                 // 获取一个key对应的多个值,返回值为String类型的数组  例如:复选框
  8.            String[] hobbies = request.getParameterValues("hobby");
  9. //        System.out.println(Arrays.toString(hobbies));
  10.     // 获取请求中传过来的参数的key值,根据key值获取对应的value值
  11.    Enumeration<String> parameterNames = request.getParameterNames();
  12.    while(parameterNames.hasMoreElements()){
  13.        System.out.println(parameterNames.nextElement());
  14.    }
  15.     // 可以获取到请求中的所有的键值对,返回值是一个map集合
  16.     // 这个map集合的key是String,value是String[]
  17.     // username=admin,password=123456,hobby=a,b,c,gender=man
  18.     Map<String, String[]> map = request.getParameterMap();
  19.     for (Map.Entry<String, String[]> name : map.entrySet()) {
  20.         String key = name.getKey();
  21.         String[] value = name.getValue();
  22.         System.out.println(key + "--->" + Arrays.toString(value));
  23.     }
  24. }
  25. @Override
  26. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  27.     doGet(request,response);
  28. }
复制代码
}
转发 request.getRequestDispatcher("demo03.do").forward(request,response);
  1. @WebServlet("/demo02.do")
  2. public class Demo02Servlet extends HttpServlet {
  3.         @Override
  4.         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5.                 /*
  6.                 * 请求转发---由多个servlet来处理同一个请求
  7.                 *
  8.                 * 请求转发是在服务器上完成的,跟客户端是否无关!!!
  9.                 *
  10.                 *
  11.                 */
  12.                 String name = request.getParameter("name");
  13.                 System.out.println("Demo02Servlet,name:" + name);
  14.                 // getRequestDispatcher参数:转发的servlet的地址
  15.                 // forward参数:request,response,把当前servlet用的request和response传给下一个
  16.                 request.getRequestDispatcher("demo03.do").forward(request,response);
  17.         }
  18.         @Override
  19.         protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  20.                 doGet(request, response);
  21.         }
  22. }
复制代码
  1. @WebServlet("/demo04.do")
  2. public class Demo04Servlet extends HttpServlet {
  3. @Override
  4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5.     /*
  6.     * 作用域:起作用的区域
  7.     *
  8.     * 往request作用域中添加了一个属性name,值是zhangsan
  9.     *
  10.     * 请求转发的时候是同一个request
  11.     *
  12.     */
  13.     request.setAttribute("name","zhangsan");
  14.     // name怎么取出来?
  15.     System.out.println("demo04.do---name:" + request.getAttribute("name"));
  16.     request.getRequestDispatcher("demo05.do").forward(request,response);
  17. //        根据指定的key,删除对应的value
  18. //        request.removeAttribute("name");
  19.                 // 获取request作用域中的所有的key
  20. //        Enumeration<String> attributeNames = request.getAttributeNames();
  21. }
  22. @Override
  23. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  24. }
  25. }
  26.     request.getRequestDispatcher("demo03.do").forward(request,response);
  27. }
  28. @Override
  29. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  30.     doGet(request, response);
  31. }
  32. }
复制代码
重定向     response.sendRedirect("success.html");
  1. @WebServlet("/demo06.do")
  2. public class Demo06Servlet extends HttpServlet {
  3.         @Override
  4.         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5.            response.getWriter()
  6.            response.setCharacterEncoding("utf-8");
  7.            response.addHeader("content-type","text/html;charset=utf-8");
  8.            response.sendRedirect("success.html");
  9. }
  10. @Override
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. }
  13. }
复制代码
请求转发和重定向的区别:
  1.         1.重定向是两次请求,请求转发是一个请求
  2.         2.重定向是客户端行为,请求转发是服务器行为
  3.         3.重定向浏览器地址会发生改变,转发不会
复制代码
最常见的客户端传参的方式两种,get,post
  1. * 浏览器地址栏直接输入:一定是get请求
  2. * 超级链接:一定是get请求
  3. * 表单:可以是get,也可以是post,取决于method
  4. *
  5. * GET请求和POST请求的区别:
  6. * GET:请求的参数会在浏览器的地址栏中显示,不安全;请求的长度限制在1K之内。
  7. *      没有请求体,无法通过request去设置一些参数。
  8. * POST:请求的参数不会在浏览器的地址栏中显示,相对安全。
  9. *       把请求的参数封装成几个数据报文(请求体)。请求参数的长度没有限制。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表