从Servlet3.0开始,配置的Servlet的支持注解方式,但还是保留了配置的web.xml文件方式,所有使用的Servlet的有两种方式:
@WebServlet常用属性
属性 | 类型 | 是否必须 | 说明 |
---|---|---|---|
asyncSupported | 布尔 | 否 | 指定的Servlet的是否支持异步操作模式 |
显示名称 | 串 | 否 | 指定的Servlet的显示名称 |
initParams在在 | WebInitParam [] | 否 | 配置初始化参数 |
loadOnStartup | INT | 否 | 标记容器是否在应用启动时就加载这个Servlet的的 |
名称 | 串 | 否 | 指定的Servlet的名称 |
URL模式/值 | 串[] | 否 | 这两个属性作用相同,指定的Servlet的处理的URL |
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() + "
");
// 获取初始化时设置的参数 initParam
ServletConfig 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.1应用启动时,小服务程序就会初始化,因为配置了loadOnStartup = 1
2.2访问/用户/测试,页面上显示结果;表名参数正确初始化以及自定义的小服务程序名称
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的的类。