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里面直接复制过来:

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

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

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

<dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>

</body>
</html>

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

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<h1>登录</h1>
<div style="text-align: center">
    <%--这里表单表示的意思:以post的方式提交表单,提交到我们的login请求--%>
    <form action="${pageContext.request.contextPath}/login"  method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        爱好:
        <input type="checkbox" name="hobbies" value="女孩">女孩
        <%--多选框checkbox--%>
        <input type="checkbox"  name="hobbies" value="代码">代码
        <input type="checkbox"  name="hobbies" value="唱歌">唱歌
        <input type="checkbox" name="hobbies" value="电影">电影
        <br>
        <input type="submit">
    </form>
</div>
</body>
</html>

设置完毕之后,我们进行该类代码的编写:
 

package com.rgf.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");//getParameter获取单个参数
        String password = req.getParameter("password");
        String[] hobbies = req.getParameterValues("hobbies");//getP一组参数arameterValues获取
        System.out.println("=================================");
        System.out.println(username);
        System.out.println(password);
        System.out.println(Arrays.toString(hobbies));
        System.out.println("==================================");
        //resq.sendRedirect();重定向一个界面
        //this.getServletContext(); 请求转发
        resp.setCharacterEncoding("UTF-8");

        //通过请求转发
        req.getRequestDispatcher(req.getContextPath()+"success.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

为了达到请求转发到新的页面,我们可以设置新的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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值