JavaWeb-Servlet入门

it2026-04-15  2

Servlet: 运行在服务器上的小程序。 Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则,我们也可以自定义来实现这个接口。

整个JavaWeb的核心体系都是围绕着Servlet来转的。

使用Servlet

首先新建Tomcat的项目, 然后创建ServletDemo01继承Servlet接口

public class ServletDemo01 implements Servlet { /*** * 初始化方法 * 在Servlet被创建时,只会执行一次 * @param servletConfig * @throws ServletException */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init....."); } /** * 获取Servlet的一些信息,版本,作者等等... (一般不会用) * @return */ @Override public ServletConfig getServletConfig() { return null; } /** * 提供服务的方法 * 每一次Servlet被访问时,执行 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service....."); } /** * 获取ServletConfig对象 * ServletConfig: Servlet的配置对象 * @return */ @Override public String getServletInfo() { return null; } /** * 销毁方法 * 在Servlet被杀死时执行 (服务器正常关闭时执行),只执行一次 */ @Override public void destroy() { System.out.println("destroy....."); } }

在web.xml中添加配置

<!--配置Servlet--> <servlet> <servlet-name>demo1</servlet-name> <servlet-class>com.heiko.ServletDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1_path</url-pattern> </servlet-mapping>

点击运行 浏览器url中增加url-pattern 比如http://localhost:8080/MyTomcatTest_war_exploded2/demo1_path,回车 可以看到logcat中打印了日志

init..... service.....

Servlet的生命周期

1.被创建:执行init方法,只执行一次 * 指定Servlet的创建时机 1.第一次被访问时,的值为负数 2.在服务器启动时,的值为0或正整数 * Servlet的init方法,只执行一次,说明一个servlet在内存中只存在一个对象,servlet是单例的 多个用户同时访问时,可能存在线程安全问题。 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要修改值 2.提供服务:执行service方法,可以执行多次(刷新) 3.被销毁:执行destroy方法,只执行一次

Sevlet执行原理

当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问对应的Servlet类tomcat会将字节码文件加载进内存,并且创建其对象调用其方法

Servlet3.0

Servlet3.0支持用注解的方式,可以不用xml配置。 新建类,添加注解

@WebServlet("/demo2") public class ServletDemo implements Servlet { //...省略 @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service!!!!"); } }

访问页面

http://localhost:8080/MyServletTest_war_exploded/demo2

看到打印日志

service!!!!

Servlet体系结构

servlet - 接口 GenericServlet - 抽象类 : 只需实现service方法 HttpServlet - 抽象类 : 对HTTP协议的封装和描述 doGet()、doPost() 等 @WebServlet("/demo3_path") public class ServletDemo03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.doGet(req, resp); System.out.println("doGet..."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.doPost(req, resp); System.out.println("doPost..."); } }

Servlet相关配置

@WebServlet: 设置访问路径 一个Servlet可以定义多个路径: @WebServlet({"/S1","/SS2","/SSS3"})路径定义规则 /xxx : 普通方式/xxx/xxx : 多层路径,目录结构*.do : 比如 http://localhost/demo4.do

其他

文中代码 详见 https://github.com/EthanCo/JavaWebTest

最新回复(0)