Java Servlet的实现方式
方法一、实现Servlet接口
Servlet接口
package javax.servlet;
public interface Servlet {
void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException;
javax.servlet.ServletConfig getServletConfig();
void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException;
java.lang.String getServletInfo();
void destroy();
}
方法一代码
package test.first;
import javax.servlet.*;
import java.io.IOException;
public class FirstServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("FirstServlet初始化");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("这是实现Servlet接口的service方法");
}
@Override
public String getServletInfo() {
return "FirstServlet";
}
@Override
public void destroy() {
System.out.println("销毁FirstServlet");
}
}
运行结果
- 多次请求First Servlet
- init方法只执行了一次
- service方法请求几次就执行几次
- 关闭tomcat服务器
- tomcat销毁该servlet
方法二、继承GenericServlet抽象类
GenericServlet抽象类
方法二代码
package test.first;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class SecondServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("这是通过继承GenericServlet抽象类来实现service方法");
}
}
运行结果
方法三、继承HttpServlet抽象类
HttpServlet抽象类
方法三代码
package test.first;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import java.io.IOException;
public class ThreeServlet extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("这是通过继承HttpServlet抽象类来实现service方法");
}
}
运行结果
示例
package test.first;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class hello extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<h1>hello,你好</h1>");
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>test.first.hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>first</servlet-name>
<servlet-class>test.first.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>second</servlet-name>
<servlet-class>test.first.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>second</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>three</servlet-name>
<servlet-class>test.first.ThreeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>three</servlet-name>
<url-pattern>/three</url-pattern>
</servlet-mapping>
</web-app>