对比-原web.xml值:
</servlet-mapping>
现象: 用Eclipse新版本新建servlet时候,发现创建Servlet后,Eclipse不会自动在web.xml中生成该Servlet对应的mapping信息,而是在Servlet代码中加入注解@WebServlet,如下 分析: 查找文档发现,这是Servlet3.0新特性(得Tomcat7.0版本及以上),@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 value 或者 urlPatterns 通常是必需的,且二者不能共存,如果同时指定,通常是忽略 value 的取值)
解决方法: 在@WebServlet 中定义Servlet的name、urlPatterns等信息
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
@WebServlet(
displayName = “This is Login Action”, //描述
name = “LoginAction”, //servlet名称
urlPatterns = { “/servlet/LoginAction” },//url
loadOnStartup = 1, //启动项
initParams = { @WebInitParam(name = “username”, value = “张三”) }//初始化参数
)
public class LoginAction extends HttpServlet {
/**
* Constructor of the object.
*/
public LoginAction() {
super();
}
}
上面的@WebServlet告知容器,HelloServlet这个Servlet的名称是Hello,这是由name属性指定的,而如果客户端请求的URL是/HW,则由具Hello名称的Servlet来处理,这是由urlPatterns属性来指定的。在Java EE相关应用程序中使用标注时,可以记得的是,没有设置的属性通常会有默认值。例如,若没有设置@WebServlet的name属性,默认值会是Servlet的类完整名称。
注意:Tomcat中, 如果web.xml和@WebServlet属性都设置了,那么对不起,@WebServlet
中的urlPatterns属性就不起作用了!(可以将web.xml从WEB-INF目录中移走,或者删除
这样@WebServlet中的urlPatterns属性值就可以使用了!)
Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。 像上面的LoginAction可以描述成@WebServlet(name=”LoginAction”,value=”/LoginAction”)。 也定义多个URL访问: 如@WebServlet(name=”LoginAction”,urlPatterns={“/LoginAction”,”/LoginAction2”}) 或者@WebServlet(name=”LoginAction”,value={“/LoginAction”,”/LoginAction2”}) 这样的简化形式也可以,相当于设置了name和urlPattern @WebServlet(“/servlet/LoginAction”) 在新建Servlet时候在URL mapping中可以直接输入