Servlet 实例
Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。Web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet,并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。
在学习Servlet时遇到问题:
destory 方法被调用后,servlet 被销毁,但是并没有立即被回收,再次请求时,并没有重新初始化。
代码示例:
private String message;
@Override
public void init() throws ServletException {
message = "Hello World , Nect To Meet You: " + System.currentTimeMillis();
System.out.println("servlet初始化……");
super.init();
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.write("<h1>" + message + "</h1>");
destroy();
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}
@Override
public void destroy() {
System.out.println("servlet销毁!");
super.destroy();
}
控制台打印输出:
servlet初始化……
servlet销毁!
2017-7-6 19:48:52 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/myServlet] has started
servlet销毁!
2017-7-6 19:48:52 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/myServlet] is completed
servlet初始化……
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!
servlet销毁!
关于Servlet的映射路径
- java 类里的注解 —— @WebServlet("/HelloServlet") 对应浏览器路径:
http://localhost:8080/TomcatTest/HelloServlet
- 配置文件(web.xml)里对应的浏览器访问路径:
http://localhost:8080/TomcatTest/TomcatTest/HelloServlet
这两种配一个就好了,不然路径重名的话反而会让tomcat启动不了。
例如这样就启动不了:
修改 web.xml :
<url-pattern>/HelloServlet</url-pattern>
修改后,web.xml 和 java 类的注解,对应路径都是:
http://localhost:8080/TomcatTest/HelloServlet
导致
命名的 servlet[HelloServlet]和 [com.runoob.test.HelloServlet] 都被映射到 URL 模式 [/ HelloServlet] 这是不允许的。
解决办法:
将注解去掉或者保留注解进入web.xml将映射删除既可以。