• HttpServletRequest详解


    我们在前文Response的基础上,找到里面的HttpServletRequest类别,按住ctrl键,进入源码界面,如下所示:

     我们发现Response里面为set,Request为get的一些方法。

    HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息。

    我们了解到getContextPath为获得上下文的路径。

    getAuthType为获得作者信息,就是谁访问的

    getHeaders为获得头信息

    getHttpServletMapping为获得请求路径。

    getMethod为获得请求的方法

    getPathTranslated为获得最后一次登录。

    getRemoteUser获取远程的用户。

    getRequestURL获取请求的路径

    getServletPath获取Servlet的路径

    这些方法与Response完全对应。

    获取前端传递的参数和请求转发

    获取参数的四个方法: :

    getParameter()   //获取指定前端传回来的名字,并且返回一个字符串,得到一个前端的类型

    getParameterMap()    //通常不使用这个

    getParameterNames()   //返回一个枚举,通常不用这个

    getParameterValues()     //返回一个数组,返回多个参数

    我们进行创建一个新的模块,命名为Request。

    创建完成之后,我们进行创建java,resources,进行该模块的完善。之后我们将web.xml利用之前的Note.md里面直接复制过来:

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    5. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    6. version="3.1"
    7. metadata-complete="true">
    8. web-app>

    完成之后,我们删除掉index.jsp,重新创建一个新的index.jsp。如果在这个过程中我们没有创建index.jsp。

    当我们出现以上问题的时候,我们可以将pom.xml里面的仓库给复制过来到Request里面的类,然后进行刷新即可:

    1. javax.servlet.jsp
    2. javax.servlet.jsp-api
    3. 2.3.3
    4. provided

    之后我们创建index.jsp如下所示:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. 登录

     之后我们即可进行编写登录界面:

    我们首先进行index.jsp的页面的编辑:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. 登录
    3. 登录

    4. "text-align: center">
    5. <%--这里表单表示的意思:以post的方式提交表单,提交到我们的login请求--%>
    6. "${pageContext.request.contextPath}/login" method="post">
    7. 用户名:"text" name="username">
    8. 密码:"password" name="password">
    9. 爱好:
    10. "checkbox" name="hobbies" value="女孩">女孩
    11. <%--多选框checkbox--%>
    12. "checkbox" name="hobbies" value="代码">代码
    13. "checkbox" name="hobbies" value="唱歌">唱歌
    14. "checkbox" name="hobbies" value="电影">电影

    15. "submit">
  • 设置完毕之后,我们进行该类代码的编写:
     

    1. package com.rgf.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. import java.util.Arrays;
    8. public class LoginServlet extends HttpServlet {
    9. @Override
    10. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    11. String username = req.getParameter("username");//getParameter获取单个参数
    12. String password = req.getParameter("password");
    13. String[] hobbies = req.getParameterValues("hobbies");//getP一组参数arameterValues获取
    14. System.out.println("=================================");
    15. System.out.println(username);
    16. System.out.println(password);
    17. System.out.println(Arrays.toString(hobbies));
    18. System.out.println("==================================");
    19. //resq.sendRedirect();重定向一个界面
    20. //this.getServletContext(); 请求转发
    21. resp.setCharacterEncoding("UTF-8");
    22. //通过请求转发
    23. req.getRequestDispatcher(req.getContextPath()+"success.jsp").forward(req,resp);
    24. }
    25. @Override
    26. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    27. doGet(req, resp);
    28. }
    29. }

    为了达到请求转发到新的页面,我们可以设置新的jsp,如下所示:

     之后我们修改了tomcat里面的配置:

    然后进行运行后为如下所示: 

     我们进行该功能的判定:
    我们将用户名和密码写进去之后,选好爱好,进行提交,我们发现出现如下界面:

     我们发现404,我们回到IDEA,发现如下所示:

     我们发现用户名和密码进行了输出,而问号代表乱码的输出。

    我们修改代码,让其接收的时候也为utf-8的编码:

    req.setCharacterEncoding("UTF-8");  //请求和响应都要这样子处理

    我们进行修改了之后,重新运行如下所示:

     但是我们提交之后,浏览器仍然显示的是404:

     我们发现出错之后,我们修改一个转发的访问路径的代码如下所示:

     req.getRequestDispatcher("/Request_war/success.jsp").forward(req,resp);

    我们重新运行之后,我们发现还是出现404.这个时候我们思考所转发访问路径的代码是不是存在问题。 我们发现多了一个/,/为相对路径。这是进行转发,我们在进行转发之后,会默认加一个后缀,再加我们的路径。我们可以不用写根目录名字了。(转发是不需要写项目路径的,不需要写当前web应用的名字,重定向需要写)

    我们所修改的代码如下所示:

    req.getRequestDispatcher("/success.jsp").forward(req,resp);

    我们进行运行后发现成功的登录成功了:

    我们这个时候发现地址栏没有出现我们的登录信息了:

    http://localhost:9571/Request_war/login

    没有我们所输入的信息了,这是我们使用post方式与get方式不同的地方,get方式会裸露出来我们的登录信息。而post却不会这样子。

    与此同时,我们不用带/进行请求的时候也可以达到同样的目的:

    我们的代码如下所示:

     req.getRequestDispatcher("success.jsp").forward(req,resp);

    我们运行之后也成功的出现了登录成功的界面了:

     面试题:请你聊聊重定向和转发的区别:

    相同点:页面都会实现跳转

    不同点:请求转发的时候,url不会产生变化(307)

    重定向的时候,url地址栏会发生变化。(302

    我们再接下来会进行了解MVC三层架构。

    dao(操作数据库的,用JDBC写的)

    service层(业务层,平时写的代码)

    servlet(这是往前端调的,我们把他称为控制层)controller

  • 相关阅读:
    十八、图像像素类型转换和归一化操作
    通过阿里云server配置属于自己的云笔记leanote
    做软件测试是在浪费时间吗,有未来吗?
    第十四届中国深圳创新创业大赛坪山预选赛区暨2022年“坪山高新区杯”创新创业大赛获奖名单的通知
    Matlab在线性代数中的应用(四):相似矩阵及二次型
    斐波那契数列|||川(马蹄集)
    基于24位Δ-ΣADC和FPGA的高精度数据采集系统开发
    SQL自学进阶知识点
    Power BI 傻瓜入门 2. Power BI的人员、方式和内容
    Python-函数进阶
  • 原文地址:https://blog.csdn.net/weixin_59448049/article/details/126682076