Servlet - 匹配模式加注解源码分析

简介: Servlet - 匹配模式加注解源码分析

Servlet - 匹配模式加注解源码分析

Servlet - 注解源码分析

  1. urlPatterns 对应 web.xml 的 < url-pattern> </ u rl-pattern>
  2. {“/ok1”, “/ok2”} 可以给OkServlet配置多个 url-pattern
  3. 相当于这个@WebServlet(urlPatterns = {“/ok1”, “/ok2”}) 代替了 web.xml的配置 底层使用了 反射+注解+IO+集合 来完成一个支撑
  4. 浏览器可以这样访问OkServlet时,可以 http://localhost:8080/servlet/ok1 或者 http://localhost:8080/servlet/ok2
  5. 我们可以根据 @interface WebServlet 源码知道可以配置哪些
  6. 注解方式开发Servlet和 web.xml配置servlet 流程机制是一样
7. @WebServlet 是一个注解 => java基础->注解
8. @WebServlet 源码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented => 在javadoc工具生成文档有记录
 /* public @interface WebServlet {
 *     String name() default "";
 *
 *     String[] value() default {};
 *
 *     String[] urlPatterns() default {};
 *
 *     int loadOnStartup() default -1;
 *
 *     WebInitParam[] initParams() default {};
 *
 *     boolean asyncSupported() default false;
 *
 *     String smallIcon() default "";
 *  }
*/
  3. urlPatterns 对应 web.xml 的 <url-pattern></url-pattern>
  4. {"/ok1", "/ok2"} 可以给OkServlet配置多个 url-pattern
  5. 相当于这个@WebServlet(urlPatterns = {"/ok1", "/ok2"}) 代替了 web.xml的配置
     底层使用了 反射+注解+IO+集合 来完成一个支撑
  6. 浏览器可以这样访问OkServlet时,可以 http://localhost:8080/servlet/ok1 或者
     http://localhost:8080/servlet/ok2
  8. 我们可以根据 @interface WebServlet 源码知道可以配置哪些
  web.xml init-param 在注解中,如何指定呢? 
             <param-name></param-name>
             <param-value></param-value>
             </init-param>
     @wenInitParam(name="XX",value="yy") 
多个就{@wenInitParam(name="XX",value="yy"),@wenInitParam(name="XX1",value="yy1").。。。。}
 9. 注解方式开发Servlet和 web.xml配置servlet 流程机制是一样

匹配模式

匹配模式可以更加方便和符合业务逻辑来实现需求,是http请求可以更快找到需要的方法 减少服务器的压力

精确匹配

@WebServlet(“/ok/zs”)//配置路径 :

访问 servlet: localhost:8080/servlet/ok

目录匹配

@WebServlet(“/ok/*”)//配置路径 :

访问文件: localhost:8080/servlet/ok/aaa localhost:8080/servlet/ok/bbb

扩展名匹配

@WebServlet(urlPatterns = “*.action”)

配置路径 : @WebServlet(“.action")
访问文件: localhost:8080/hsp/zs.action localhost:8080/hsp/ls.action
提示: @WebServlet("/
.action”) , 不能带 / , 否则 tomcat 报错

任意匹配

@WebServlet(urlPatterns = “/”)

配置路径 : @WebServlet(“/”) @WebServlet(“/*”)

访问文件: localhost:8080/wyx//**

提醒:/ 和 /*的配置,会匹配所有的请求,这个比较麻烦,要避免

具体代码

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @version 1.0
 */
//精确匹配
@WebServlet("/ok/zs")//配置路径 :
//访问 servlet: localhost:8080/servlet/ok/zs
//目录匹配
@WebServlet("/ok/*")//配置路径 :
//访问文件: localhost:8080/servlet/ok/aaa localhost:8080/servlet/ok/bbb
//扩展名匹配
@WebServlet(urlPatterns = "*.action")
// 配置路径 : @WebServlet("*.action")
// 访问文件: localhost:8080/hsp/zs.action localhost:8080/hsp/ls.action
//提示: @WebServlet("/*.action") , 不能带 / , 否则 tomcat 报错
//任意匹配
@WebServlet(urlPatterns = "/")
//配置路径 : @WebServlet("/") @WebServlet("/*")
//访问文件: localhost:8080/wyx//**
// 提醒:/ 和 /*的配置,会匹配所有的请求,这个比较麻烦,要避免
public class OkServlet5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("okServlet doPost");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("OkServlet5 doGet");
    }
}

注意事项和使用细节

当 Servlet 配置了 “/”, 会覆盖 tomcat 的 DefaultServlet, 当其他的 utl-pattern 都匹配不上时 ,都会走这个Servlet, 这样可以拦截到其它静态资源

1、The default servlet for all web applications, that serves static resources. 这个默认的 servlet 是处理静态资源的,一旦拦截,静态资源不能处理

2、当 Servelt 配置了 “/*”, 表示可以匹配任意访问路径

3、提示: 建议不要使用 / 和 /*, 建议尽量使用精确匹配

4、优先级遵守: 精确路径 > 目录路径 > 扩展名路径 > /* >

代码示例

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
        <!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


目录
相关文章
|
3月前
|
前端开发 JavaScript
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
这篇文章介绍了使用AJAX技术将前端页面中表单接收的多个参数快速便捷地传输到后端servlet的方法,并通过示例代码展示了前端JavaScript中的AJAX调用和后端servlet的接收处理。
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
|
3月前
|
存储 前端开发 Java
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
该文章展示了如何使用Servlet过滤器(Filter)通过注解方式创建一个网站访问人数统计功能,通过`@WebFilter`注解定义过滤器及其URL模式,并在`doFilter`方法中实现计数逻辑,将访问次数存储在`ServletContext`中,最后在JSP页面展示访问人数。
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
|
3月前
|
前端开发 Java 开发工具
servlet技术--使用注解模拟用户登录实现页面跳转
该文章介绍了Servlet技术的使用,通过注解方式开发Servlet来模拟用户登录功能,并在登录成功后实现页面跳转,展示用户的用户名和密码。
servlet技术--使用注解模拟用户登录实现页面跳转
|
5月前
|
XML 数据格式
XML配置Servlet文件,不使用注解配置路径的方法
XML配置Servlet文件,不使用注解配置路径的方法
|
5月前
|
Java 应用服务中间件 开发工具
基于Servlet的3.1以上注解方式完成上传功能。
基于Servlet的3.1以上注解方式完成上传功能。
29 0
|
6月前
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
Servlet3.0+环境下使用注解注册Servlet、Filter和Listener组件
72 2
|
6月前
|
XML Java 应用服务中间件
SpringMVC与Servlet3.0整合 - ServletContainerInitializer注解配置项目
SpringMVC与Servlet3.0整合 - ServletContainerInitializer注解配置项目
56 1
|
6月前
|
前端开发 Java 容器
SpringBoot中注册Servlet、Filter和Listener(代码和注解两种方式)
SpringBoot中注册Servlet、Filter和Listener(代码和注解两种方式)
126 0
|
SQL 前端开发 Java
JSP网上订餐管理系统myeclipse开发sql数据库BS模式java编程servlet技术mvc框架
JSP 网上订餐管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助servlet技术mvc框架,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
73 0
|
XML 数据格式
告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发
告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发