顾名思义:服务端的小程序 Servlet只是一个接口,定义了Java被浏览器访问到(Tomcat)的识别规则,我们需要定义一个类来实现Servlet接口
1.创建一个JavaEE项目 2.定义一个类实习Servlet方法 3.实现接口中的抽象方法
import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.IOException; public class Servlet implements javax.servlet.Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("初始化"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("访问"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("关闭"); } }
4.在WEB.XML中配置Servelt
<?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_3_1.xsd" version="3.1"> <servlet> <servlet-name>demo1</servlet-name> <servlet-class>Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping> </web-app>
结果
1.当服务器接受到服务器请求的时候,会先解析浏览器的UPL地址,获取访问服务的路径 2.然后查找WEB.xml文件,查看是否有对应的标签体的内容 3.如果有,则找到对应的全类名 4.tomcat会将字节码文件加载进内存,并且创建其对象 5.调用其方法
1.被创建:执行init方法只执行一次 Servlet什么时候创建? 默认情况:在第一次被访问的时候创建 可以在配置执行Servlet的创建时机 在 标签下配置
第一次被访问时,创建 的值为负数
在服务器启动时,创建 的值为0或正整数
注意
2. 提供服务 :执行service方法,执行多次
好处 :支持注解配置,不需要使用web.xml了 步骤: 1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml 2. 定义一个类,实现Servlet接口 3. 复写方法 4. 在类上使用@WebServlet注解,进行配置
* @WebServlet("资源路径") @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default "";//相当于<Servlet-name> String[] value() default {};//代表urlPatterns()属性配置 String[] urlPatterns() default {};//相当于<url-pattern> int loadOnStartup() default -1;//相当于<load-on-startup> WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
代码
import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/demo1") public class Servlet implements javax.servlet.Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("初始化"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("访问"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("关闭"); } }
相比于之前更加简洁,使用更加方便
1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
2. 工作空间项目和tomcat部署的web项目
GenericServlet : 将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet 对http协议的一种封装,简化操作 1. 定义类继承HttpServlet 2. 复写doGet/doPost方法
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); long lastModified; if (method.equals("GET")) { lastModified = this.getLastModified(req); if (lastModified == -1L) { this.doGet(req, resp); } else { long ifModifiedSince; try { ifModifiedSince = req.getDateHeader("If-Modified-Since"); } catch (IllegalArgumentException var9) { ifModifiedSince = -1L; } if (ifModifiedSince < lastModified / 1000L * 1000L) { this.maybeSetLastModified(resp, lastModified); this.doGet(req, resp); } else { resp.setStatus(304); } } } else if (method.equals("HEAD")) { lastModified = this.getLastModified(req); this.maybeSetLastModified(resp, lastModified); this.doHead(req, resp); } else if (method.equals("POST")) { this.doPost(req, resp); } else if (method.equals("PUT")) { this.doPut(req, resp); } else if (method.equals("DELETE")) { this.doDelete(req, resp); } else if (method.equals("OPTIONS")) { this.doOptions(req, resp); } else if (method.equals("TRACE")) { this.doTrace(req, resp); } else { String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[]{method}; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(501, errMsg); } }
Servlet相关配置 1. urlpartten:Servlet访问路径 1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"}) 2. 路径定义规则: 1. /xxx:路径匹配 2. /xxx/xxx:多层路径,目录结构 3. *.do:扩展名匹配
以上就是Tomcat与Servlet的一些基础知识,喜欢我的可以关注收藏,我会经常更新文章
原文链接:https://www.cnblogs.com/pjhaymy/p/13396936.html