
本文共 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 今日任务完成
————加油吧,代码人!
发表评论
最新留言
关于作者
