夜光带你走进 Servlet(三)
夜光序言:
清风袭过一枝花
花下有鬼弹琵琶
四处无端香满地
佳人在此饮青茶
正文:Servlet 实例
Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。Web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet,并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。
我们程序员和Hello World 有不解之缘
示例代码
下面是 Servlet 输出 Hello World 的示例源代码:
// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// 扩展 HttpServlet 类
public class HelloWorld extends HttpServlet {
private String message;
public void init() throws ServletException
{
// 执行必需的初始化
message = "Hello World";
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// 设置响应内容类型
response.setContentType("text/html");
// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy()
{
// 夜光:这里什么也不做
}
}
//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销毁!
2019-4-6 19:48:52 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/myServlet] has started
servlet销毁!
2019-4-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 浏览器访问路径配置有个小问题:
1、java 类里的注解 —— @WebServlet("/HelloServlet") 对应浏览器路径:
http://localhost:8080/TomcatTest/HelloServlet
2、配置文件(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将映射删除就可以。