每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议解析好封装到Request对象中,然后传递到service方法(doGet和doPost)中,我们可以通过HttpServletRequest对象获取到所有请求的信息。
一. HttpServletRequest类的常用方法
1.getRequestURI():获取请求的资源路径
2.getRequestURL():获取请求的统一资源定位符(绝对路径)
3.getRemoteHost():获取客户端的ip地址
4.getHeader():获取请求头
5.getMethod():获取请求的方式()GET或POST
6.setAttribute(key,value):设置域数据
7.getAttribute(key):获取域数据
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 TestRequestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.getRequestURI():获取请求的资源路径
System.out.println("URI: " + req.getRequestURI() );
//2.getRequestURL():获取请求的统一资源定位符(绝对路径)
System.out.println("URL:" + req.getRequestURL());
//3.getRemoteHost():获取客户端的ip地址
System.out.println("IP: " + req.getRemoteHost());
//4.getHeader():获取请求头
System.out.println("Header: " + req.getHeader("User-Agent"));
//5.getMethod():获取请求的方式()GET或POST
System.out.println("Method: " + req.getMethod());
//6.setAttribute(key,value):设置域数据
//7.getAttribute(key):获取域数据
req.setAttribute("key1","value1");
System.out.println(req.getAttribute("key"));
}
}
TestRequestServlet TestServlet.TestRequestServlet TestRequestServlet /requestServlet
8.getParameter():获取请求的参数
9.getParameterValues():获取请求的参数(多个值的时候使用)
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 ParameterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//8.getParameter():获取请求的参数
System.out.println("username: " + req.getParameter("username")); //张三
System.out.println("password: " + req.getParameter("password")); //123456
//9.getParameterValues():获取请求的参数(多个值的时候使用)
String[] hobby = req.getParameterValues("hobby");
System.out.println("hobby: " + Arrays.asList(hobby)); //hobby: [Java, Python]
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//需要设置字体的字符集为UTF-8,来解决POST请求的中文乱码问题(英文可以正常显示,POST请求和GET请求一致)
req.setCharacterEncoding("UTF-8"); //要在获取请求参数之前调用才有效
//8.getParameter():获取请求的参数
System.out.println("username: " + req.getParameter("username")); //张三
System.out.println("password: " + req.getParameter("password")); //123456
//9.getParameterValues():获取请求的参数(多个值的时候使用)
String[] hobby = req.getParameterValues("hobby");
System.out.println("hobby: " + Arrays.asList(hobby)); //hobby: [Java, Python]
}
}
ParameterServlet TestServlet.ParameterServlet ParameterServlet /parameterServlet
Title
10.getRequestDispatcher():获取请求转发对象
请求转发是指服务器收到请求后,从一个资源跳到另一个资源(例如:当有两个Servlet程序共同执行一个完整的功能时,客户端首先发送请求到Servlet1,Servlet1执行完后请求转发到Servlet2,Servlet2执行完后才相当于把整个请求的任务完成了,然后把响应的数据发送给客户端。其中Servlet1到Servlet2的操作叫请求转发)。
该请求是一次请求,两个Servlet程序共用请求且共用Request域中的数据,地址栏中的地址一直是Servlet1中的地址。
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 Servlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//Servlet1获取请求的参数
String username = req.getParameter("username");
System.out.println("Servlet1查看请求内容:" + username);
//设置数据让Servlet2查看(让Servlet2知道自己已经执行过)
req.setAttribute("key","Servlet1");
//请求转发到Servlet2,请求转发的地址是web.xml中为Servlet2配置的地址
//斜杠表示地址为:http://ip:port/工程名/ ,映射到了工程下的web目录
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
//走向Servlet2
requestDispatcher.forward(req,resp);
}
}
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 Servlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//Servlet1获取请求的参数
String username = req.getParameter("username");
System.out.println("Servlet2查看请求内容:" + username);
//Servlet2查看Servlet1是否执行过
System.out.println("Servlet1是否执行过:" + req.getAttribute("key"));
//Servlet2执行自己的操作
System.out.println("Servlet2执行");
}
}
Servlet1 TestServlet.Servlet1 Servlet1 /servlet1 Servlet2 TestServlet.Servlet2 Servlet2 /servlet2
Title



