环境:tomcat8, netbeans8
@WebServlet注解可以使servlet不用在web.xml中声明。
index.jsp
AccountServlet.java
@WebServlet(urlPatterns = {"/account", "/accountServlet"},
initParams = {@WebInitParam(name = "accName", value = "noHaHa")})
public class AccountServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String accName = request.getParameter("accName");
System.out.println(accName);
}
}
这个getParameter是个坑,我一直写成getAttribute,所以老是出现null,而找不到原因。
jsp中的action可以指定为注解中urlPatterns中的任何一个,写成accountServlet也是可以的。
注解的第二个参数,initParams,我还以为是为input提供的默认值,然后就留个空值就提交了,发现没有输出。原来这个注解是对应web.xml中的的
修改servlet
@WebServlet(urlPatterns = {"/account", "/accountServlet"},
initParams = {@WebInitParam(name = "accName", value = "noHaHa")})
public class AccountServlet extends HttpServlet {
@Override
public void init() {
System.out.println(this.getInitParameter("accName"));
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String accName = request.getParameter("accName");
System.out.println(accName);
}
}
部署访问,noHaHa 会先于你的输入出现。
由于这种环境下,ide+tomcat是热部署。
如果只修改jsp,不修改servlet,是不会重新编译servlet的。所以不会每次修改jsp,多会输出noHaHa。
如果同时使用web.xml和注解,那么注解的值会被web.xml中的值覆盖:优先级 web.xml > @
忽略注解
在web-app中加入metadata-complete="true"
...
...
metadata-complete="true">
..