顾名思义:服务端的小程序
Servlet只是一个接口,定义了Java被浏览器访问到(Tomcat)的识别规则,咱们须要定义一个类来实现Servlet接口java
1.建立一个JavaEE项目
2.定义一个类实习Servlet方法
3.实现接口中的抽象方法web
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的建立时机
在
注意服务器
2. 提供服务:执行service方法,执行屡次
* 每次访问Servlet时,Service方法都会被调用一次。
3. 被销毁:执行destroy方法,只执行一次
* Servlet被销毁时执行。服务器关闭时,Servlet被销毁
* 只有服务器正常关闭时,才会执行destroy方法。
* destroy方法在Servlet被销毁以前执行,通常用于释放资源app
好处:支持注解配置,不须要使用web.xml了
步骤:
1. 建立JavaEE项目,选择Servlet的版本3.0以上,能够不建立web.xml
2. 定义一个类,实现Servlet接口
3. 复写方法
4. 在类上使用@WebServlet注解,进行配置async
* @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 ""; }
代码ide
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部署的项目单独创建一份配置文件
* 查看控制台的log:Using CATALINA_BASE: "C:\Users\86151.IntelliJIdea2017.3\system\tomcat\Tomcat_8_5_31_CSDNWeb"
地址来源
2. 工做空间项目和tomcat部署的web项目
* tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工做空间项目" 的web目录下的全部资源
* WEB-INF目录下的资源不能被浏览器直接访问。
3. 断点调试:使用"小虫子"启动 dubug 启动
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的一些基础知识,喜欢个人能够关注收藏,我会常常更新文章