Servlet3.0下配置Servlet
从Servlet3.0开始,配置的Servlet的支持注解方式,但还是保留了配置的web.xml文件方式,所有使用的Servlet的有两种方式:
- Servlet的的类上使用@WebServlet注解进行配置
- 的的web.xml文件中配置
第一种:Servlet的的类使用@WebServlet注解进行配置
@WebServlet常用属性
| 属性 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| asyncSupported | 布尔 | 否 | 指定的Servlet的是否支持异步操作模式 |
| 显示名称 | 串 | 否 | 指定的Servlet的显示名称 |
| initParams在在 | WebInitParam [] | 否 | 配置初始化参数 |
| loadOnStartup | INT | 否 | 标记容器是否在应用启动时就加载这个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!
" ); // 获取初始化时的 servletName out.append("servletName:" + getServletName() + "
"); // 获取初始化时设置的参数 initParamServletConfig servletConfig = this.getServletConfig(); Enumeration paramNames = servletConfig.getInitParameterNames(); while (paramNames.hasMoreElements()) { String paramName = paramNames.nextElement(); out.append(paramName + ":" + servletConfig.getInitParameter(paramName) + "
"); } 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)在使用注解方式时,需要注意: 根元素中不能配置属性metadata-complete="true",否则无法加载Servlet。metadata-complete属性表示通知Web容器是否寻找注解,默认不写或者设置false,容器会扫描注解和Web分片,为Web应用程序构建有效的元数据;设置true,表示将由部署描述符为Web程序提供所有的配置信息- web.xml中不能再配置该Servlet
- /*或者/:拦截所有
- *.do:拦截指定后缀
- /user/test:拦截路径
- /user/*.do、/*.do、test*.do都是非法的,启动时候会报错
第二种:使用WEB-INF/web.xml进行配置
web.xml以 Tomcat安装目录下的conf/web.xml为母版生成:
tomcat/conf/web.xml大致内容如下(中间省去大量注释和MIME配置信息):
// servlet配置default org.apache.catalina.servlets.DefaultServlet // 参数初始化debug 0 listings false // 启动加载(0-n, 越小优先级越高)1 jsp org.apache.jasper.servlet.JspServlet fork false xpoweredBy false 3 // servlet访问url映射default / jsp *.jsp *.jspx // 会话配置,更多详细参数,参考源文件注释部分30 //30 minutes // 剩下的近4000多行都为
123 application/vnd.lotus-1-2-3 *****************4000多行// web默认首页配置
index.html index.htm index.jsp
两种方式优先级问题:
使用的web.xml中配置的优先级要高于使用注解@WebServlet。
Servlet的的名称的默认为创建时的类名,但当要给名称属性重新赋值时,要想使的web.xml文件中关于该Servlet的的配置的信息有效,需要明确指定@WebServlet中的名称值,否则的web.xml文件中的配置将变得无效。
即web.xml文件中就是已通过的Servlet的名字来确定与之对应的Servlet的的类。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
