zoukankan      html  css  js  c++  java
  • Servlet的路径配置

    1-Servlet的路径配置

    课程介绍:

    通过对 Servlet 的调用流程学习,我们知道 web.xml 文件的配置是为了保护servlet。其实服务器应该调用哪个 servlet 进行请求的处理, 在浏览器的请求地址中写的很清楚。

    一、注解配置:

    1、精确匹配(路径要一样),一般作用于站点独特的几个路径,首页、登录、注册等等

    @WebServlet("/hello")

    2、路径匹配,一般用于产品页,新闻页面,百科页面一般用于大量相类似的页面

    @WebServlet("/product/*")

    3、扩展名匹配

    @WebServlet("*.json")

    匹配多个路径:

    @WebServlet(urlPatterns= {"/morepath","*.do","/more/*"})

    二、Servlet的web.xml 配置:

    Web.xml 配置的作用:保护Servlet。

    配置方式一:精确匹配

    Web.xml 配置的作用:保护Servlet。

    配置方式一:精确匹配

    <!-- 配置方式一 -->
    <servlet>
    
    <servlet-name>my3</servlet-name>
    <servlet- class>com.bjsxt.servlet.MyServlet3</servlet-class>
    
    </servlet>
    
    
    <servlet-mapping>
    
    <servlet-name>my3</servlet-name>
    <url-pattern>/my3</url-pattern>
    
    </servlet-mapping>

    配置方式二:路径匹配

    <!-- 配置方式一 -->
    <servlet>
    
    <servlet-name>my3</servlet-name>
    <servlet- class>com.bjsxt.servlet.MyServlet3</servlet-class>
    
    </servlet>
    
    
    <servlet-mapping>
    
    <servlet-name>my3</servlet-name>
    <url-pattern>/my3</url-pattern>
    
    </servlet-mapping>

    配置方式三:扩展名匹配

    <servlet>
    
    <servlet-name>my3</servlet-name>
    <servlet- class>com.bjsxt.servlet.MyServlet3</servlet-class>
    
    </servlet>
    
    
    <servlet-mapping>
    
    <servlet-name>my3</servlet-name>
    <url-pattern>*.do</url-pattern>
    
    </servlet-mapping>

    加载时机:

    服务器启动的时候会将 webapps 中部署好的项目统一进行加载,并完成对每个项目的 web.xml 文件的加载。

    注意:

    一个 Servlet 可有拥有多个 url-pattern 配置,但是一个url-pattern 配置只能对应一个Servlet

    路径和扩展名匹配无法同时设置,比如下面的三个<url-pattern>都是非法的,如果设置,启动tomcat服务器会报错。

    <url-pattern>/kata/*.jsp</url-pattern>

    <url-pattern>/*.jsp</url-pattern>

    <url-pattern>he*.jsp</url-pattern>

    另外注意:<url-pattern>/aa/*/bb</url-pattern>

    这个是精确匹配,url必须是 /aa/*/bb,这里的*不是通配的含义

    优先顺序

    当一个url与多个servlet的匹配规则可以匹配时,则按照 “ 精确路径 > 最长路径>扩展名”这样的优先级匹配到对应的servlet。举例如下:

    例1:
    servletA 的url-pattern为 /test,
    servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,不会去管servletB。
    
    例2:
    servletA的url-pattern为/test/*,
    servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。 
    
    例3: 比如
    servletA的url-pattern:*.action ,
    servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test.action,这个时候容器就会优先进行路径匹配,而不是去匹配扩展名,这样就去调用servletB。

    页面乱码:解决方法

    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UFT-8");
  • 相关阅读:
    2020年9月12日 线程的安全问题:同步方法;
    2020年9月12日 线程的安全问题:线程使用共享数据 产生的安全问题
    2020年9月11日 编写龟兔赛跑的多线程程序
    2020年9月9日 为什么要有包装类、包装类有哪些、装箱与拆箱、包装类的API、包装类对象的缓存问题
    2020年9月4日 try catch finally遇见return的时候返回值是啥?(面试题)
    2020年9月4日 异常
    2020年9月4日 异常处理
    2020年9月3日 内部类总结
    2020年9月3日 静态导入
    2020年9月3日 自定义注解和元注解
  • 原文地址:https://www.cnblogs.com/qq308015824/p/11009766.html
Copyright © 2011-2022 走看看