Servlet3.0下配置Servlet

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gulang03/article/details/79504616

从Servlet3.0开始,配置的Servlet的支持注解方式,但还是保留了配置的web.xml文件方式,所有使用的Servlet的有两种方式:

  1. Servlet的的类上使用@WebServlet注解进行配置
  2. 的的web.xml文件中配置

第一种:Servlet的的类使用@WebServlet注解进行配置

@WebServlet常用属性

属性类型是否必须说明
asyncSupported布尔指定的Servlet的是否支持异步操作模式
显示名称指定的Servlet的显示名称
initParams在在WebInitParam []配置初始化参数
loadOnStartupINT标记容器是否在应用启动时就加载这个Servlet的的
名称指定的Servlet的名称
URL模式/值串[]这两个属性作用相同,指定的Servlet的处理的URL

1.测试代码:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



// 通过@WebServlet注解配置
@WebServlet(
	name = "myUserServlet",   
    urlPatterns = "/user/test",   // url映射
    loadOnStartup = 1,    
    initParams = {  // 参数初始化
            @WebInitParam(name="name", value="小明"),   
            @WebInitParam(name="pwd", value="123456")  
    }  
)  


public class UserServlet extends HttpServlet {  
    private static final long serialVersionUID = 7109220574468622594L;  
    
    // 覆盖重写含参init(ServletConfig config)方法
    @Override  
    public void init(ServletConfig config) throws ServletException {  
        // 调用父类init(ServletConfig config)方法初始化,web容器同时创建内部ServletConfig对象
    	super.init(config);  
        System.out.println("servlet初始化...");  
    }  
      
    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        response.setContentType("text/html");  
        response.setCharacterEncoding("utf-8");  
        PrintWriter out = response.getWriter();  
          
        out.append("Hello Servlet!<br>" );  
          
        // 获取初始化时的 servletName  
        out.append("servletName:" + getServletName() + "<br>");  
          
        // 获取初始化时设置的参数 initParam
        ServletConfig servletConfig = this.getServletConfig();  
        Enumeration<String> paramNames = servletConfig.getInitParameterNames();  
        while (paramNames.hasMoreElements()) {  
            String paramName = paramNames.nextElement();  
            out.append(paramName + ":" + servletConfig.getInitParameter(paramName) + "<br>");  
        }  
        out.close();  
    }  
  
    @Override  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        doGet(request, response);  
    }  
} 

2.测试结果

    2.1应用启动时,小服务程序就会初始化,因为配置了loadOnStartup = 1


    2.2访问/用户/测试,页面上显示结果;表名参数正确初始化以及自定义的小服务程序名称

3.注

(1).loadOnStartup属性:标记容器是否在启动应用时就加载Servlet中,默认不配置或数值为负数时表示客户端第一次请求的Servlet时再加载; 0或正数表示启动应用就加载,正数情况下,数值越小,加载该Servlet的的优先级越高;
(2)。名称属性:可以指定也可以不指定,通过getServletName()可以获取到,若不指定,则为的Servlet的完整类名,如:cn.edu.njit.servlet.UserServlet
(3).urlPatterns / value属性:String []类型,可以配置多个映射,如:urlPatterns = {“/ user / test”,“/ user / example”}
(4)在使用注解方式时,需要注意:
  • <web-app> </web-app>根元素中不能配置属性metadata-complete="true",否则无法加载Servlet。metadata-complete属性表示通知Web容器是否寻找注解,默认不写或者设置false,容器会扫描注解和Web分片,为Web应用程序构建有效的元数据;设置true,表示将由部署描述符为Web程序提供所有的配置信息
  • web.xml中不能再配置该Servlet
(5).urlPatterns的常用规则:
  • /*或者/:拦截所有
  • *.do:拦截指定后缀
  • /user/test:拦截路径
  • /user/*.do、/*.do、test*.do都是非法的,启动时候会报错
(6).urlPatterns的配置规则:精确匹配、扩展名匹配、路径匹配以及会包含一些优先级

第二种:使用WEB-INF/web.xml进行配置

web.xml以 Tomcat安装目录下的conf/web.xml为母版生成:

tomcat/conf/web.xml大致内容如下(中间省去大量注释和MIME配置信息):

<?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_3_1.xsd"
  version="3.1">
    // servlet配置
    <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>
        // 启动加载(0-n, 越小优先级越高)
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    // servlet访问url映射
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
    // 会话配置,更多详细参数,参考源文件注释部分
    <session-config>
        <session-timeout>30</session-timeout> //30 minutes
    </session-config>
    // 剩下的近4000多行都为
<!-- ===================== Default MIME Type Mappings =================== -->
  <!-- When serving static resources, Tomcat will automatically generate    -->
  <!-- a "Content-Type" header based on the resource's filename extension,  -->
  <!-- based on these mappings.  Additional mappings can be added here (to  -->
  <!-- apply to all web applications), or in your own application's web.xml -->
  <!-- deployment descriptor.                                               -->
  <!-- Note: Extensions are always matched in a case-insensitive manner.    -->

    <mime-mapping>
        <extension>123</extension>
        <mime-type>application/vnd.lotus-1-2-3</mime-type>
    </mime-mapping>
    *****************4000多行
    // web默认首页配置
  <!-- ==================== Default Welcome File List ===================== -->
  <!-- When a request URI refers to a directory, the default servlet looks  -->
  <!-- for a "welcome file" within that directory and, if present, to the   -->
  <!-- corresponding resource URI for display.                              -->
  <!-- If no welcome files are present, the default servlet either serves a -->
  <!-- directory listing (see default servlet configuration on how to       -->
  <!-- customize) or returns a 404 status, depending on the value of the    -->
  <!-- listings setting.                                                    -->
  <!--                                                                      -->
  <!-- If you define welcome files in your own application's web.xml        -->
  <!-- deployment descriptor, that list *replaces* the list configured      -->
  <!-- here, so be sure to include any of the default values that you wish  -->
  <!-- to use within your application.                                      -->

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

两种方式优先级问题:

 使用的web.xml中配置的优先级要高于使用注解@WebServlet。

Servlet的的名称的默认为创建时的类名,但当要给名称属性重新赋值时,要想使的web.xml文件中关于该Servlet的的配置的信息有效,需要明确指定@WebServlet中的名称值,否则的web.xml文件中的配置将变得无效。

即web.xml文件中就是已通过的Servlet的名字来确定与之对应的Servlet的的类。


展开阅读全文

没有更多推荐了,返回首页