fufu学JAVA之HttpServletRequest接口详解
发布日期:2021-05-07 03:04:43 浏览次数:20 分类:精选文章

本文共 4983 字,大约阅读时间需要 16 分钟。

HttpServletRequest接口

HttpServletRequest接口的作用

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的Http协议信息解析好封装到Request对象中,然后传递到Service方法中去,我们可以通过HttpServletRequest对象获取到请求的信息

HttpServletRequest接口的常用方法

  • getRequestURI():获取请求的URI地址
  • getRquestURL():获取请求的绝对路径地址
  • getRemoteHost():获取客户端的ip地址
  • getHeader():获取指定的请求头信息
  • getMethod():获取请求方式
  • getAttribute():获取会话域数据
  • setAttribute():设置会话域数据
  • getRequestDispatcher():获取请求转发对象
  • getParameter():获取请求的参数

如何获取请求的参数

直接上代码:

/head>        
用户名:
密 码:

以上定义了一个form表单,当我们点击提交按钮,就会将数据用户名和密码发送到指定的Servlet类,这里的action参数锁一下:http://localhost:2233/JavaWeb_02/getLoginMessage

http://localhost:2233/JavaWeb_02:表示当前的工程路径
/getLoginMessage:表示映射的Servler类

Servlet类的配置如下:

GetLoginMessage
com.hsf.servlet.GetLoginMessage
GetLoginMessage
/getLoginMessage

Servlet类代码:

package com.hsf.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class GetLoginMessage extends HttpServlet {       @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {           String username = req.getParameter("username");        System.out.println("用户名:"+username);        String pwd = req.getParameter("pwd");        System.out.println("密码:" + pwd);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {           //设置请求的字符集为utf-8,从而解决post请求的中文乱码问题        //这句话是设置请求体重内容的编码方式,因为get请求没有请求体,所以该方式不适合get请求。        req.setCharacterEncoding("utf-8");        String username = req.getParameter("username");        System.out.println("用户名:"+username);        String pwd = req.getParameter("pwd");        System.out.println("密码:" + pwd);    }}

运行如下:

在这里插入图片描述

Request请求乱码的问题

本段选自kaka_1994的

https://blog.csdn.net/javakaka666/article/details/79950161

解决request中文乱码问题,要分成两种情况:get请求和post请求

1.Get //这里取到的值是iso编码过后的值, 是乱码。因为Tomcat中默认使用的是iso8859-1编码

String username = request.getParameter("username");  //这里使用ISO的编码, 先逆转回去,变成字节数据,然后在用U8的编码转成中文    byte [] bytes = username .getBytes("ISO-8859-1");

username = new String(bytes, “utf-8”);

2.Post

//如果是Post方式提交的数据上来,解决乱码,一句话就可以了。

request.setCharacterEncoding(“UTF-8”); //这句话是设置请求体重内容的编码方式,因为get请求没有请求体,所以该方式不适合get请求。

请求转发的特点

客户端通过资源路径将请求发送给Servlet1,Servlet1拿到数据并对其进行处理,之后将请求转发给另一个Servlet2类,Servlet2类对参数进行处理再返回客户端

(画个图吧!)
在这里插入图片描述

以上,相信你应该已经对请求转发有一个大概的理解了,下面我们开始写代码:

我们先写一个form表单用来提交数据

用户名:
密 码:

然后,创建一个的Servlet类去进行第一次接收处理

package com.hsf.servlet;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class GetLoginMessage extends HttpServlet {       @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {           String username = req.getParameter("username");        System.out.println("用户名:"+username);        String pwd = req.getParameter("pwd");        System.out.println("密码:" + pwd);        if(username.equals("fufu")&&pwd.equals("123456")){               //获取请求转发对象,这里的参数表示要转发的位置            RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servletDemo1");            req.setAttribute("name","金木研");            requestDispatcher.forward(req,resp);        }    }

处理完之后在会话域中存入数据并将请求转发,这时候,第二个Servlet类接收到请求,并从会话域中拿到数据进行判断,结果为真,再进行其他操作,否则进行操作

package com.hsf.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class ServletDemo1 extends HttpServlet {       @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {           String requestURI = req.getRequestURI();        if(req.getAttribute("name").equals("金木研")) {               System.out.println("获取请求的地址 => " + requestURI);            StringBuffer requestURL = req.getRequestURL();            System.out.println("获取请求资源的绝对路径 => " + requestURL);            String remoteHost = req.getRemoteHost();            System.out.println("获取客户端(发送请求的)的ip地址 => " + remoteHost);            String header = req.getHeader("Accept");            System.out.println("获取请求头的指定信息:=>" + header);            String method = req.getMethod();            System.out.println("获取请求的方式 =>" + method);        }else{               System.out.println(req.getAttribute("name"));        }    }

这里稍微提一下,存入会话域里的数据只在当前会话过程中有效,当我们切断会话是获取不到会话域里的数据的,所以会抛出NullpaintException异常,

以上,就是请求转发的全过程了!!!

2020-11-29 今日任务完成

————加油吧,代码人!
上一篇:fufu学前端之H5+Javascript
下一篇:fufu学JAVA之浏览器HTTP协议请求信息解读

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月12日 02时58分18秒