学习笔记
【尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版-哔哩哔哩】
1.HttpServletRequest类
a)HttpServletRequest类有什么作用。
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。 然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpSerdetRequest对象,获取到所有请求的信息。
b)HttpServletRequest类的常用方法
i. getRequestURI() 获取请求的资源路径
ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
iii. getRemoteHost() 获取客户端的ip地址
iv. getHeader() 获取请求头
v. getParameter() 获取请求的参数
vi. getParameterValues() 获取请求的参数(多个值的时候使用)
vii. getMethod() 获取请求的方式GET或POST
viii. setAttribute(key, value);设置域数据
ix. getAttribute(key); 获取域数据
x. getRequestDispatcher() 获取请求转发对象
c) 如何获取请求参数
d) POST请求的中文乱码解决
演示
创建web模块07_servlet
创建Tomcat实例
application context:07_servlet
创建包和类
RequestAPIServlet
package com.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 RequestAPIServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // i. getRequestURI() 获取请求的资源路径 System.out.println("URI =>"+req.getRequestURI()); // ii. getRequestURL() 获取请求的统一资源定位符(绝对路径) System.out.println("URL =>"+req.getRequestURL()); // iii. getRemoteHost() 获取客户端的ip地址 /** * 在IDEA中,使用localhost访问时,得到的客户端ip地址是===>>>0:0:0:0:0:0:0:1 * 在IDEA中,使用127.0.0.1访问时,得到的客户端ip地址是===>>>127.0.0.1 * 在IDEA中,使用 真实ip 访问时,得到的客户端ip地址是===>>>真实的客户端ip */ System.out.println("客户端 ip地址"+req.getRemoteHost()); // iv. getHeader() 获取请求头 System.out.println("请求头User-Agent==>>"+req.getHeader("User-Agent")); // vii. getMethod() 获取请求的方式GET或POST System.out.println("请求的方式===>>"+req.getMethod()); } }
ParameterServlet
package com.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 RequestAPIServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // i. getRequestURI() 获取请求的资源路径 System.out.println("URI =>"+req.getRequestURI()); // ii. getRequestURL() 获取请求的统一资源定位符(绝对路径) System.out.println("URL =>"+req.getRequestURL()); // iii. getRemoteHost() 获取客户端的ip地址 /** * 在IDEA中,使用localhost访问时,得到的客户端ip地址是===>>>0:0:0:0:0:0:0:1 * 在IDEA中,使用127.0.0.1访问时,得到的客户端ip地址是===>>>127.0.0.1 * 在IDEA中,使用 真实ip 访问时,得到的客户端ip地址是===>>>真实的客户端ip */ System.out.println("客户端 ip地址"+req.getRemoteHost()); // iv. getHeader() 获取请求头 System.out.println("请求头User-Agent==>>"+req.getHeader("User-Agent")); // vii. getMethod() 获取请求的方式GET或POST System.out.println("请求的方式===>>"+req.getMethod()); } }
form.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="http://localhost:8080/07_servlet/parameterServlet" method="get"> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> 兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++ <input type="checkbox" name="hobby" value="java">java <input type="checkbox" name="hobby" value="js">JavaScript<br/> <input type="submit"> </form> </body> </html>
web.xml
<?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_4_0.xsd" version="4.0"> <servlet> <servlet-name>RequestAPIServlet</servlet-name> <servlet-class>com.servlet.RequestAPIServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RequestAPIServlet</servlet-name> <url-pattern>/requestAPIServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>ParameterServlet</servlet-name> <servlet-class>com.servlet.ParameterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ParameterServlet</servlet-name> <url-pattern>/parameterServlet</url-pattern> </servlet-mapping> </web-app>
e) 请求的转发
什么是请求的转发?
请求转发是指,服务器收到请求后,从一次资源跳转到另一个服务器资源的操作叫请求转发。
代码
Servlet1
package com.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 Servlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求的参数(办事的材料) String username = req.getParameter("username"); System.out.println("在Servlet1(柜台1)中查看参数(材料)"+username); //改材料盖一个章,并传递到Servlet2(柜台2)去查看 req.setAttribute("key1","柜台1的章"); //问路:Servlet2(柜台2)怎么走 /** * 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/,映射到IDEA代码的web目录 */ RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2"); //走向Servlet2(柜台2) requestDispatcher.forward(req,resp); } }
Servlet2
package com.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 Servlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求的参数(办事的材料) String username = req.getParameter("username"); System.out.println("在Servlet1(柜台1)中查看参数(材料)"+username); //查看 柜台1 是否有盖章 Object key1 = req.getAttribute("key1"); System.out.println("柜台1 是否有盖章:"+key1); //处理自己的业务 System.out.println("Servlet2处理自己的业务"); } }
web.xml
<servlet> <servlet-name>Servlet1</servlet-name> <servlet-class>com.servlet.Servlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet1</servlet-name> <url-pattern>/servlet1</url-pattern> </servlet-mapping> <servlet> <servlet-name>Servlet2</servlet-name> <servlet-class>com.servlet.Servlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet2</servlet-name> <url-pattern>/servlet2</url-pattern> </servlet-mapping>