①Servlet是什么
servlet是来自Web浏览器或其他客户端Http请求 和 服务器上的数据库或应用程序之间的中间层
②Servlet架构
③Servlet职责
读取客户端发送的数据(显示和隐式,http表单,http请求,cookies等),处理数据并生成结果集(可能需要访问数据库),最终响应到客户端。
④创建Servlet的三种方式(一个接口,两个类)
---实现Servlet
---继承GenericServlet
---继承HttpServlet(最常用)
UML类图:
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
private static final long serialVersionUID = 1L;
private transient ServletConfig config;
public GenericServlet() {
}
public void destroy() {
}
public String getInitParameter(String name) {
return this.getServletConfig().getInitParameter(name);
}
public Enumeration<String> getInitParameterNames() {
return this.getServletConfig().getInitParameterNames();
}
public ServletConfig getServletConfig() {
return this.config;
}
public ServletContext getServletContext() {
return this.getServletConfig().getServletContext();
}
public String getServletInfo() {
return "";
}
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
public void init() throws ServletException {
}
public void log(String msg) {
this.getServletContext().log(this.getServletName() + ": " + msg);
}
public void log(String message, Throwable t) {
this.getServletContext().log(this.getServletName() + ": " + message, t);
}
public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
public String getServletName() {
return this.config.getServletName();
}
}
public abstract class HttpServlet extends GenericServlet {
public HttpServlet() {
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
}
protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
}
⑤简单实例
---1.创建一个Servlet子类,并实现相关功能
---2.web.xml 配置 Servlet (或者通过@WebServlet注解)
*Servlet路由配置,只能选择一种,或者Tomcat启动报错
*web.xml报错解决方案:把开头的“<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> ” 删除,因为该约束符合xml规范,但不符合web-app规范。
public class HelloWorld extends HttpServlet{
private String message;
@Override
public void init() throws ServletException{
message = "hello world";
}
@Override
public void doGet(HttpServletRequest req ,HttpServletResponse resp) throws ServletException,IOException{
// 设置响应内容类型
response.setContentType("text/html");
// 实际的逻辑是在这里
PrintWrite out = response.getWrite();
out.println("<h1>" + message + "</h1>");
}
@Override
public void destroy(){}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.ryan.biz.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
</web-app>
运行效果: