Java Web Servlet学习要点有哪些?

2026-05-23 22:322阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2828个文字,预计阅读时间需要12分钟。

Java Web Servlet学习要点有哪些?

文章目录+ Servlet概述+ Servlet核心接口和类+ 三种自定义Servlet接口的方法 1. 实现Servlet接口 2. 继承GenericServlet抽象类 3. 继承HttpServlet抽象类+ 1. 实现Servlet接口+ 2. 继承GenericServlet抽象类+ 3. 继承HttpServlet抽象类

文章目录

  • ​​Servlet概述​​
  • ​​Servlet核心接口和类​​
  • ​​三种自定义Servlet接口的方法​​
  • ​​1.实现Servlet接口​​
  • ​​2.继承GenericServlet抽象类​​
  • ​​3.继承HttpServlet抽象类​​
  • ​​生命周期​​
  • ​​概述​​
  • ​​配置方式​​
  • ​​Servlet3.0之后允许使用注解方式配置​​
  • ​​任何一个版本都允许使用web.xml配置​​
  • ​​Servlet获取请求数据​​
  • ​​Servlet请求乱码问题​​
  • ​​GET请求使用​​
  • ​​POST请求使用​​
  • ​​Servlet响应乱码问题​​
  • ​​针对乱码问题总结解决方案​​
  • ​​ServletRequest和ServletResponse​​
  • ​​重定向​​
  • ​​请求转发​​
  • ​​请求资源路径​​
  • ​​单Servlet实现多请求​​
  • ​​ServletContext Servlet上下文对象​​
  • ​​HttpServletRequest对象​​
  • ​​HttpServletResponse对象​​

Servlet概述

  • 即Server Applet
  • Servlet 是 JavaWEB 服务端的一个小程序,主要用户用户数据的交互,WEB 数据展示和数据传递,是一个动态的资源
  • Servlet 程序可以应对搜友类型的请求和响应,Servlet 主要用于 HTTP 协议的 WEB 服务器程序实现
  • Servlet 开发需要用到两个包javax.servletjavax.servlet.xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- Servlet 程序声明,告知Servlet程序对应的名字和Servlet程序对应的class --> <servlet> <!-- ServletName --> <servlet-name>WebXmlServlet</servlet-name> <!-- Servlet对应的class,该名字必须是完整的包名.类名 --> <servlet-class>cn.ocean.WebXmlServlet</servlet-class> <!-- 当前Servlet程序初始化操作,需要放在servlet-class之后 --> <init-param> <param-name>param1</param-name> <param-value>ocean</param-value> </init-param> <init-param> <param-name>param2</param-name> <param-value>ocean</param-value> </init-param> <!-- 当前Servlet随着Tomcat服务器启动加载 --> <load-on-startup>1</load-on-startup> </servlet> <!-- Servlet映射关系 --> <servlet-mapping> <!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet --> <servlet-name>WebXmlServlet</servlet-name> <!-- URL匹配原则 --> <url-pattern>/WebXmlServlet</url-pattern> </servlet-mapping> <!-- Servlet映射关系 --> <servlet-mapping> <!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet --> <servlet-name>WebXmlServlet</servlet-name> <!-- URL匹配原则 --> <url-pattern>/wxs</url-pattern> </servlet-mapping></web-app>

    两种方式对比

    注解 配置简单,直观,高效 url-pattern 冲突问题,并且是在Tomcat启动时发现,需要注意细节 web.xml 繁琐,麻烦,步骤繁多 url-pattern 一旦写错或者冲突,web.xml文件会提示错误!!!

    Servlet获取请求数据

    1. 要求前端提交数据的name属性和后台获取getParameter参数一致 2. 在后台通过HttpServletRequest获取数据使用getParameter方法,返回值是String类型

    前端代码

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>02-ParameterUpload</title></head><body><form action="GetParameterServlet" method="get"> <span>姓名:</span><input type="text" name="userName"> <br> <span>密码:</span><input type="password" name="password"> <br> <input type="submit" value="提交"></form><hr><form action="GetParameterServlet" method="post"> <span>姓名:</span><input type="text" name="userName"> <br> <span>密码:</span><input type="password" name="password"> <br> <input type="submit" value="提交"></form></body></html>

    后端代码

    /** * 获取前端通过HTTP请求方式发送过来的数据 * * @author MI 2020/3/30 16:02 */@WebServlet("/GetParameterServlet")public class GetParameterServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 浏览器通过form表单提交的数据都在HttpServletRequest对象中 // 通过getParameter获取对应的参数名数据,参数名和form表单中的name属性一致 String userName = req.getParameter("userName"); String password = req.getParameter("password"); System.out.println(userName + ":" + password); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("POST请求方式"); doGet(req, resp); }}

    Servlet请求乱码问题

    GET请求使用

    Tomcat7以及以下版本使用情况下,前端数据传输使用的HTTP协议,传递的方式是UTF-8编码,Tomcat服务器Request对象接收数据时,使用的编码是ISO-8859-1。 数据接收方式和发送方式使用的编码集不一致,导致中文乱码 Tomcat8以上GET请求中文乱码基本上不会出现String userName = req.getParameter("userName");// 这里需要转换对应你的编码集方式userName = new String(userName.getBytes("ISO-8859-1"), "UTF-8");String password = req.getParameter("password");System.out.println(userName + ":" + password);

    POST请求使用

    客户端发送数据的方式是通过该UTF-8传输,客户端需要设置同样的方式接受,需要设置HttpServletRequest.setCharacterEncoding("utf-8");统一设置编码。

    Servlet响应乱码问题

    HttpServletResponse响应对象默认采用的编码集方式是根据当前系统编码集有关,这里使用的编码集是GB2312,浏览器默认解析方式是UTF-8 解决方案: 告知HttpServletResponse,当前响应编码集和方式为UTF-8 response.setContentType("text/html;charset=utf-8");

    针对乱码问题总结解决方案

    针对于Tomcat8及其以上版本的Tomcat服务器软件,需要在接受数据时和响应数据时设置对应的编码集 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); 以上两行代码可以放在所有的Servlet程序之前 Tomcat7及其以下版本,需要注意GET请求方式使用的编码集为ISO-8859-1

    ServletRequest和ServletResponse

    重定向

    浏览器发送HTTP请求 ==> 服务器服务器接收到请求之后 发送302状态码 新的location ==> 浏览器浏览器收到302状态码 + location 按照新的location发送新的请求 ==> 服务器特征: 1. 该操作是浏览器行为 2. 重定向最少存在两次的浏览器请求 3. 重定向情况下,浏览器的地址栏会发生改变 4. 重定向操作存在两个或者两个以上的请求,每一次新的请求,都会丢失之前的请求数据,也就是request对象 5. 重定向可以访问任何资源,不管是当前WEB服务器资源,还是网络端的资源都是可以访问@WebServlet("/RedirectServlet")public class RedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 请求和响应乱码问题解决 req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); // 重定向操作,重定向当前WEB Application中的index.jsp resp.sendRedirect("index.jsp"); }}

    请求转发

    浏览器发送HTTP请求 ==> 服务器服务器接收到请求之后内部资源处理跳转 ==> 服务器其他资源服务器其他资源处理完毕之后,才通过原始的请求和响应返回数据 ==> 客户端特征: 1. 转发是服务器行为 2. 转发情况下浏览器有且只发送了一次请求 3. 转发情况下浏览器的地址栏没有发生任何改变 4. 转发情况下,浏览器的请求数据时被保存的,是通过request进行传递的 5. 转发情况下有且只能转发WEB Application整个项目的内容资源@WebServlet("/dispatch")public class DispatchServlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 转发到WEB Application内部资源 // getRequestDispatcher("dispatch2") 指定的内部资源名字 // forward(req, resp) 转发到指定资源,并且带有当前对应用户请求的request对象和response对象 req.getRequestDispatcher("/dispatch2").forward(req, resp); }}

    请求资源路径

    浏览器输入: localhost:8080/Day42/dispatch HOST: 127.0.0.1:8080 资源名: Day42/dispatchTomcat收到Day42/dispatch,资源请求之后,首先找到Day42项目或者说路径,然后在web.xml或者注解中找到url-pattern 为 dispatch的内容。从而执行对应的Servleturl-pattern是存在匹配原则 精确匹配 /具体名字 后缀名匹配 *.do *.action *.xxx 主要是按照规定结尾的url-pattern都可以触发对应的Servlet程序 通配符匹配 /* 匹配所有请求,服务器端所有资源都可以匹配

    单Servlet实现多请求

    WEB Application中Servlet是整个WEB项目的核心,Servlet用于接收用户的请求,并且处理用户响应,每一个业务逻辑都有一个对应的Servlet,Servlet非常非常多,对于Servlet容器是存在一定压力的。采用Servlet做一个分发操作,分发用户去请求和对应的响应,让别人处理。Servlet程序做的事情就非常的Easy了需要对于用户请求的URL进行解析操作,通过一写特定的参数完成分发操作,让一个Servlet程序能够满足多个条件处理后缀名匹配: *.do匹配

    代码

    /** * 分发操作的Servlet,使用*.do匹配,并且解析操作,执行对应的方法 */@WebServlet("*.do")public class TransferServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String requestURI = req.getRequestURI(); System.out.println(requestURI); String method = requestURI.substring(requestURI.lastIndexOf("/") + 1, requestURI.lastIndexOf(".")); System.out.println(method); Class<ExecuteMethod> executeMethodClass = ExecuteMethod.class; Method method1 = null; try { method1 = executeMethodClass.getMethod(method); method1.invoke(null); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}/** * 目标执行方法 */public class ExecuteMethod { public static void add() { System.out.println("Add Method"); } public static void delete() { System.out.println("Delete Method"); } public static void update() { System.out.println("Update Method"); } public static void select() { System.out.println("Select method"); }}

    ServletContext Servlet上下文对象

    概述

    Servlet上下文对象,当WEB Application启动时,Tomcat服务器会根据web.xml以及注解方式,创建一个唯一的ServletContext对象,包含整个项目中很多核心的资源数据,并且是一个整个WEB Application的,所有的Servlet程序和JSP程序都可以使用ServletContext中存储的数据。当WEB Application项目关闭时,ServletContext对象被销毁

    获取ServletContext对象

    方式一: GenericServlet可以通过getServletContext方法获取方式二: ServletConfig接口中提供了getServletContext方法获取方式三: HttpSession提供getServletContext方法获取方式四: HttpServletRequest提供getServletContext方法获取

    ServletContext对象特征

    1. 唯一性,不管通过哪一个方式获取,都是同一个对象2. WEB Application启动时加载创建,退出时销毁3. ServletContext中存储的数据时一个共享资源,使用小心4. ServletContext是一个@WebServlet("/TestServletContext")public class TestServletContext extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. 可以直接通过当前Servlet对象来获取对应的ServletContext数据 ServletContext servletContext1 = this.getServletContext(); // 2. 通过ServletConfig对象获取对应的ServletContext对象 ServletContext servletContext2 = this.getServletConfig().getServletContext(); // 3. 通过Request请求对象获取对应都是ServletContext对象 ServletContext servletContext3 = req.getServletContext(); // 4. 通过HtttpSession对象获取ServletContext对象 HttpSession session = req.getSession(); ServletContext servletContext4 = session.getServletContext(); System.out.println(servletContext1 == servletContext2); System.out.println(servletContext2 == servletContext3); System.out.println(servletContext3 == servletContext4); /* 有效方法1: 获取当前项目的发布路径 */ System.out.println(servletContext1.getRealPath("/")); /* 有效方法2: 获取服务器版本号 可以资源的根目录 */ System.out.println(servletContext1.getServerInfo()); System.out.println(servletContext1.getContextPath()); /* 有效方法3: 作为数据传递的容器 */ servletContext1.setAttribute("Tag", "骚磊"); /* 有效方法4: ServletContext 刚刚区域数据存储还是删除 */ System.out.println(this.getServletContext().getAttribute("Tag")); this.getServletContext().removeAttribute("Tag"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}

    HttpServletRequest对象

    HttpServletRequest对象是有服务器根据用户的请求创建得到,一个请求对应一个Request对象。继承关系 interface ServletRequest --| interface HttpServletRequest Tomcat完成的符合HttpServletRequeset接口的实现类对象,对应Requeset ----| org.apache.catalina.connector.RequestFacadeRequest对象中存在一大堆的方法

    方法名

    功能

    getMethod()

    获取请求方式 GET or POST

    getRequestURL()

    获取用户访问浏览器的完整路径

    getRequestURI()

    获取用户请求资源名

    getContextPath()

    获取虚拟目录名 Application Context

    getQueryString()

    GET请求的所有参数,POST请求通过请求实体无法获取

    getProtocol()

    获取当前使用的网络传输协议 HTTP/1.1

    getRemoteAddr()

    获取客户端IP地址

    Java Web Servlet学习要点有哪些?

    getRemoteHost()

    主机地址

    getRemotePort()

    用户请求当前资源的端口号

    getRemoteUser()

    用户名字

    Enumeration getHeaderNames()

    获取所有请求头名字

    getHeader(String)

    获取指定请求头名称对应的值

    请求参数相关方法

    方法

    功能

    String getParameter(String)

    根据指定的参数名获取对应的值,返回值类型为String

    Enumeration getParameterNames()

    获取所有参数的名字

    String[] getParameterValues(String)

    获取指定参数名对应的字符串数组参数值 例如: 多选

    Map<String, String[]> getParameterMap()

    获取当前Request请求中所有参数和参数值的Map双边队列,而且可以存着数组形式

    HttpServletResponse对象

    用户发送请求到服务器,服务器会对应当前用户的请求针对性的提供的响应,对应的就是HttpServletResponse对象服务器可以通过response对象发送响应告知浏览器,浏览器可以根据服务器响应数据进行解析操作。

    方法

    功能

    setContentType()

    设置当前响应返回数据类型

    PrintWriter getWriter()

    字符流对象

    setHeader(name, value)

    设置响应头信息

    setStatus(int)

    设置当前页面的状态码

    getOutputStream()

    输出字节流对象

本文共计2828个文字,预计阅读时间需要12分钟。

Java Web Servlet学习要点有哪些?

文章目录+ Servlet概述+ Servlet核心接口和类+ 三种自定义Servlet接口的方法 1. 实现Servlet接口 2. 继承GenericServlet抽象类 3. 继承HttpServlet抽象类+ 1. 实现Servlet接口+ 2. 继承GenericServlet抽象类+ 3. 继承HttpServlet抽象类

文章目录

  • ​​Servlet概述​​
  • ​​Servlet核心接口和类​​
  • ​​三种自定义Servlet接口的方法​​
  • ​​1.实现Servlet接口​​
  • ​​2.继承GenericServlet抽象类​​
  • ​​3.继承HttpServlet抽象类​​
  • ​​生命周期​​
  • ​​概述​​
  • ​​配置方式​​
  • ​​Servlet3.0之后允许使用注解方式配置​​
  • ​​任何一个版本都允许使用web.xml配置​​
  • ​​Servlet获取请求数据​​
  • ​​Servlet请求乱码问题​​
  • ​​GET请求使用​​
  • ​​POST请求使用​​
  • ​​Servlet响应乱码问题​​
  • ​​针对乱码问题总结解决方案​​
  • ​​ServletRequest和ServletResponse​​
  • ​​重定向​​
  • ​​请求转发​​
  • ​​请求资源路径​​
  • ​​单Servlet实现多请求​​
  • ​​ServletContext Servlet上下文对象​​
  • ​​HttpServletRequest对象​​
  • ​​HttpServletResponse对象​​

Servlet概述

  • 即Server Applet
  • Servlet 是 JavaWEB 服务端的一个小程序,主要用户用户数据的交互,WEB 数据展示和数据传递,是一个动态的资源
  • Servlet 程序可以应对搜友类型的请求和响应,Servlet 主要用于 HTTP 协议的 WEB 服务器程序实现
  • Servlet 开发需要用到两个包javax.servletjavax.servlet.xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- Servlet 程序声明,告知Servlet程序对应的名字和Servlet程序对应的class --> <servlet> <!-- ServletName --> <servlet-name>WebXmlServlet</servlet-name> <!-- Servlet对应的class,该名字必须是完整的包名.类名 --> <servlet-class>cn.ocean.WebXmlServlet</servlet-class> <!-- 当前Servlet程序初始化操作,需要放在servlet-class之后 --> <init-param> <param-name>param1</param-name> <param-value>ocean</param-value> </init-param> <init-param> <param-name>param2</param-name> <param-value>ocean</param-value> </init-param> <!-- 当前Servlet随着Tomcat服务器启动加载 --> <load-on-startup>1</load-on-startup> </servlet> <!-- Servlet映射关系 --> <servlet-mapping> <!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet --> <servlet-name>WebXmlServlet</servlet-name> <!-- URL匹配原则 --> <url-pattern>/WebXmlServlet</url-pattern> </servlet-mapping> <!-- Servlet映射关系 --> <servlet-mapping> <!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet --> <servlet-name>WebXmlServlet</servlet-name> <!-- URL匹配原则 --> <url-pattern>/wxs</url-pattern> </servlet-mapping></web-app>

    两种方式对比

    注解 配置简单,直观,高效 url-pattern 冲突问题,并且是在Tomcat启动时发现,需要注意细节 web.xml 繁琐,麻烦,步骤繁多 url-pattern 一旦写错或者冲突,web.xml文件会提示错误!!!

    Servlet获取请求数据

    1. 要求前端提交数据的name属性和后台获取getParameter参数一致 2. 在后台通过HttpServletRequest获取数据使用getParameter方法,返回值是String类型

    前端代码

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>02-ParameterUpload</title></head><body><form action="GetParameterServlet" method="get"> <span>姓名:</span><input type="text" name="userName"> <br> <span>密码:</span><input type="password" name="password"> <br> <input type="submit" value="提交"></form><hr><form action="GetParameterServlet" method="post"> <span>姓名:</span><input type="text" name="userName"> <br> <span>密码:</span><input type="password" name="password"> <br> <input type="submit" value="提交"></form></body></html>

    后端代码

    /** * 获取前端通过HTTP请求方式发送过来的数据 * * @author MI 2020/3/30 16:02 */@WebServlet("/GetParameterServlet")public class GetParameterServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 浏览器通过form表单提交的数据都在HttpServletRequest对象中 // 通过getParameter获取对应的参数名数据,参数名和form表单中的name属性一致 String userName = req.getParameter("userName"); String password = req.getParameter("password"); System.out.println(userName + ":" + password); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("POST请求方式"); doGet(req, resp); }}

    Servlet请求乱码问题

    GET请求使用

    Tomcat7以及以下版本使用情况下,前端数据传输使用的HTTP协议,传递的方式是UTF-8编码,Tomcat服务器Request对象接收数据时,使用的编码是ISO-8859-1。 数据接收方式和发送方式使用的编码集不一致,导致中文乱码 Tomcat8以上GET请求中文乱码基本上不会出现String userName = req.getParameter("userName");// 这里需要转换对应你的编码集方式userName = new String(userName.getBytes("ISO-8859-1"), "UTF-8");String password = req.getParameter("password");System.out.println(userName + ":" + password);

    POST请求使用

    客户端发送数据的方式是通过该UTF-8传输,客户端需要设置同样的方式接受,需要设置HttpServletRequest.setCharacterEncoding("utf-8");统一设置编码。

    Servlet响应乱码问题

    HttpServletResponse响应对象默认采用的编码集方式是根据当前系统编码集有关,这里使用的编码集是GB2312,浏览器默认解析方式是UTF-8 解决方案: 告知HttpServletResponse,当前响应编码集和方式为UTF-8 response.setContentType("text/html;charset=utf-8");

    针对乱码问题总结解决方案

    针对于Tomcat8及其以上版本的Tomcat服务器软件,需要在接受数据时和响应数据时设置对应的编码集 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); 以上两行代码可以放在所有的Servlet程序之前 Tomcat7及其以下版本,需要注意GET请求方式使用的编码集为ISO-8859-1

    ServletRequest和ServletResponse

    重定向

    浏览器发送HTTP请求 ==> 服务器服务器接收到请求之后 发送302状态码 新的location ==> 浏览器浏览器收到302状态码 + location 按照新的location发送新的请求 ==> 服务器特征: 1. 该操作是浏览器行为 2. 重定向最少存在两次的浏览器请求 3. 重定向情况下,浏览器的地址栏会发生改变 4. 重定向操作存在两个或者两个以上的请求,每一次新的请求,都会丢失之前的请求数据,也就是request对象 5. 重定向可以访问任何资源,不管是当前WEB服务器资源,还是网络端的资源都是可以访问@WebServlet("/RedirectServlet")public class RedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 请求和响应乱码问题解决 req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); // 重定向操作,重定向当前WEB Application中的index.jsp resp.sendRedirect("index.jsp"); }}

    请求转发

    浏览器发送HTTP请求 ==> 服务器服务器接收到请求之后内部资源处理跳转 ==> 服务器其他资源服务器其他资源处理完毕之后,才通过原始的请求和响应返回数据 ==> 客户端特征: 1. 转发是服务器行为 2. 转发情况下浏览器有且只发送了一次请求 3. 转发情况下浏览器的地址栏没有发生任何改变 4. 转发情况下,浏览器的请求数据时被保存的,是通过request进行传递的 5. 转发情况下有且只能转发WEB Application整个项目的内容资源@WebServlet("/dispatch")public class DispatchServlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 转发到WEB Application内部资源 // getRequestDispatcher("dispatch2") 指定的内部资源名字 // forward(req, resp) 转发到指定资源,并且带有当前对应用户请求的request对象和response对象 req.getRequestDispatcher("/dispatch2").forward(req, resp); }}

    请求资源路径

    浏览器输入: localhost:8080/Day42/dispatch HOST: 127.0.0.1:8080 资源名: Day42/dispatchTomcat收到Day42/dispatch,资源请求之后,首先找到Day42项目或者说路径,然后在web.xml或者注解中找到url-pattern 为 dispatch的内容。从而执行对应的Servleturl-pattern是存在匹配原则 精确匹配 /具体名字 后缀名匹配 *.do *.action *.xxx 主要是按照规定结尾的url-pattern都可以触发对应的Servlet程序 通配符匹配 /* 匹配所有请求,服务器端所有资源都可以匹配

    单Servlet实现多请求

    WEB Application中Servlet是整个WEB项目的核心,Servlet用于接收用户的请求,并且处理用户响应,每一个业务逻辑都有一个对应的Servlet,Servlet非常非常多,对于Servlet容器是存在一定压力的。采用Servlet做一个分发操作,分发用户去请求和对应的响应,让别人处理。Servlet程序做的事情就非常的Easy了需要对于用户请求的URL进行解析操作,通过一写特定的参数完成分发操作,让一个Servlet程序能够满足多个条件处理后缀名匹配: *.do匹配

    代码

    /** * 分发操作的Servlet,使用*.do匹配,并且解析操作,执行对应的方法 */@WebServlet("*.do")public class TransferServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String requestURI = req.getRequestURI(); System.out.println(requestURI); String method = requestURI.substring(requestURI.lastIndexOf("/") + 1, requestURI.lastIndexOf(".")); System.out.println(method); Class<ExecuteMethod> executeMethodClass = ExecuteMethod.class; Method method1 = null; try { method1 = executeMethodClass.getMethod(method); method1.invoke(null); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}/** * 目标执行方法 */public class ExecuteMethod { public static void add() { System.out.println("Add Method"); } public static void delete() { System.out.println("Delete Method"); } public static void update() { System.out.println("Update Method"); } public static void select() { System.out.println("Select method"); }}

    ServletContext Servlet上下文对象

    概述

    Servlet上下文对象,当WEB Application启动时,Tomcat服务器会根据web.xml以及注解方式,创建一个唯一的ServletContext对象,包含整个项目中很多核心的资源数据,并且是一个整个WEB Application的,所有的Servlet程序和JSP程序都可以使用ServletContext中存储的数据。当WEB Application项目关闭时,ServletContext对象被销毁

    获取ServletContext对象

    方式一: GenericServlet可以通过getServletContext方法获取方式二: ServletConfig接口中提供了getServletContext方法获取方式三: HttpSession提供getServletContext方法获取方式四: HttpServletRequest提供getServletContext方法获取

    ServletContext对象特征

    1. 唯一性,不管通过哪一个方式获取,都是同一个对象2. WEB Application启动时加载创建,退出时销毁3. ServletContext中存储的数据时一个共享资源,使用小心4. ServletContext是一个@WebServlet("/TestServletContext")public class TestServletContext extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. 可以直接通过当前Servlet对象来获取对应的ServletContext数据 ServletContext servletContext1 = this.getServletContext(); // 2. 通过ServletConfig对象获取对应的ServletContext对象 ServletContext servletContext2 = this.getServletConfig().getServletContext(); // 3. 通过Request请求对象获取对应都是ServletContext对象 ServletContext servletContext3 = req.getServletContext(); // 4. 通过HtttpSession对象获取ServletContext对象 HttpSession session = req.getSession(); ServletContext servletContext4 = session.getServletContext(); System.out.println(servletContext1 == servletContext2); System.out.println(servletContext2 == servletContext3); System.out.println(servletContext3 == servletContext4); /* 有效方法1: 获取当前项目的发布路径 */ System.out.println(servletContext1.getRealPath("/")); /* 有效方法2: 获取服务器版本号 可以资源的根目录 */ System.out.println(servletContext1.getServerInfo()); System.out.println(servletContext1.getContextPath()); /* 有效方法3: 作为数据传递的容器 */ servletContext1.setAttribute("Tag", "骚磊"); /* 有效方法4: ServletContext 刚刚区域数据存储还是删除 */ System.out.println(this.getServletContext().getAttribute("Tag")); this.getServletContext().removeAttribute("Tag"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}

    HttpServletRequest对象

    HttpServletRequest对象是有服务器根据用户的请求创建得到,一个请求对应一个Request对象。继承关系 interface ServletRequest --| interface HttpServletRequest Tomcat完成的符合HttpServletRequeset接口的实现类对象,对应Requeset ----| org.apache.catalina.connector.RequestFacadeRequest对象中存在一大堆的方法

    方法名

    功能

    getMethod()

    获取请求方式 GET or POST

    getRequestURL()

    获取用户访问浏览器的完整路径

    getRequestURI()

    获取用户请求资源名

    getContextPath()

    获取虚拟目录名 Application Context

    getQueryString()

    GET请求的所有参数,POST请求通过请求实体无法获取

    getProtocol()

    获取当前使用的网络传输协议 HTTP/1.1

    getRemoteAddr()

    获取客户端IP地址

    Java Web Servlet学习要点有哪些?

    getRemoteHost()

    主机地址

    getRemotePort()

    用户请求当前资源的端口号

    getRemoteUser()

    用户名字

    Enumeration getHeaderNames()

    获取所有请求头名字

    getHeader(String)

    获取指定请求头名称对应的值

    请求参数相关方法

    方法

    功能

    String getParameter(String)

    根据指定的参数名获取对应的值,返回值类型为String

    Enumeration getParameterNames()

    获取所有参数的名字

    String[] getParameterValues(String)

    获取指定参数名对应的字符串数组参数值 例如: 多选

    Map<String, String[]> getParameterMap()

    获取当前Request请求中所有参数和参数值的Map双边队列,而且可以存着数组形式

    HttpServletResponse对象

    用户发送请求到服务器,服务器会对应当前用户的请求针对性的提供的响应,对应的就是HttpServletResponse对象服务器可以通过response对象发送响应告知浏览器,浏览器可以根据服务器响应数据进行解析操作。

    方法

    功能

    setContentType()

    设置当前响应返回数据类型

    PrintWriter getWriter()

    字符流对象

    setHeader(name, value)

    设置响应头信息

    setStatus(int)

    设置当前页面的状态码

    getOutputStream()

    输出字节流对象