【java】Servlet初识

tech2022-09-16  60

Servlet

1. IDEA配置Tomcat服务器和WEB项目创建2. WEB项目结构目录分析3. 什么是Servlet4. 第一个Servlet程序5. 创建Servlet程序的三种形式5.1 遵从Servlet接口完成Servlet程序5.2 继承GenericServlet实现Servlet程序5.3 继承HttpServlet实现Servlet程序 5.4 接口 ==> abstract类 ==> 普通类6. Servlet生命周期6.1 Servlet生命周期概述6.2 Servlet生命周期相关方法 7. Servlet配置7.1 web.xml7.2 @WebServlet注解

1. IDEA配置Tomcat服务器和WEB项目创建

2. WEB项目结构目录分析

Day37_WEB_GL --| src Java源代码!!! Servlet程序,包括Java业务逻辑代码 --| WEB 整个WEB项目根目录 ----| WEB-INF 受到WEB服务器保护的文件夹目录,所有的内容都无法直接通过URL或者路径访问,只能通过web.xml配置或者注解配置访问。 ------| classes Java文件 ==> .class字节码文件 classes中的内容会被WEB服务器解析对应加载使用。 ------| lib WEB项目所需的Jar包 ------| web.xml 整个WEB项目的配置文件,web.xml方式配置支持所有的servlet版本 ----| 静态资源 html, js, css, img

3. 什么是Servlet

JavaWEB核心技术,三大组件之一。Server Applet Java服务器端的一个应用程序, 是一个动态资源,用于JavaWEB后台数据的传递,转发,处理,加载... 在完成Servlet程序中,需要使用和操作的类或者接口 javax.servlet.Servlet 接口 JavaWEB项目中所有Servlet程序的总接口 javax.servtet.GenericServlet abstract抽象类,完成了一部分Servlet程序所需方法,遵从Servlet接口 javax.servlet.http.HttpServlet 符合HTTP协议要求的Servlet类,也是一个abstract类。根据HTTP协议要求完成 了对应HTTP请求方式的方法处理 GET POST... HTTPServlet是 GenericServlet子类 javax.servlet.http.HttpServletRequest 给予HTTP协议的request请求类,会包含HTTP请求头的所有数据。 javax.servlet.http.HttpServletResponse 给予HTTP协议的Response响应类,会包含HTTP响应头的所有数据。 SerlvetConfig ServletContext

4. 第一个Servlet程序

package com.qfedu.a_servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /* 第一个Servlet程序 1. 继承HttpServlet 2. 重写doGet和doPost方法 3. 在doGet和doPost方法中完成功能代码实现,也就是JavaWEB后台代码提供的业务服务 4. 配置Tomcat服务器 @WebServlet是Servlet程序使用的注解 "/first" 告知服务器first资源名 ==> public class FirstServlet */ @WebServlet("/first") public class FirstServlet extends HttpServlet { /* doGet方法对应的HTTP协议GET请求 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); writer.append("<h1>舒服~~~巴适~~~</h1>"); writer.append("<h1>舒服~~~巴适~~~</h1>"); writer.append("<h1>舒服~~~巴适~~~</h1>"); writer.append("<h1>舒服~~~巴适~~~</h1>"); writer.append("<h1>舒服~~~巴适~~~</h1>"); writer.append("<h1>舒服~~~巴适~~~</h1>"); } /* doPost方法对应的HTTP协议POST请求 */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

5. 创建Servlet程序的三种形式

5.1 遵从Servlet接口完成Servlet程序

package com.qfedu.b_threeServlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; import java.io.PrintWriter; /** * 通过实现Servlet接口来完成Servlet程序 * * 这里需要完成五个方法,并且其中有些方法和【Servlet程序生命周期】有关 * public void init(ServletConfig config); * Servlet程序初始化方法,使用参数是ServletConfig Servlet配置对象 * public ServletConfig getServletConfig(); * 获取ServletConfig Servlet配置对象 * public void service(ServletRequest req, ServletResponse res); * 提供Servlet程序服务的方法,需要的参数是ServletRequest对象和ServletResponse对象 * service是Servlet程序核心方法。 * public String getServletInfo(); * 获取Servlet程序基本信息,low * public void destroy(); * 销毁Servlet程序方法。 */ @WebServlet("/testServlet1") public class TestServlet1 implements Servlet { @Override public void init(ServletConfig config) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { res.setContentType("text/html;charset=utf-8"); PrintWriter writer = res.getWriter(); writer.append("遵从Servlet接口实现Servlet程序"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }

5.2 继承GenericServlet实现Servlet程序

package com.qfedu.b_threeServlet; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import java.io.IOException; import java.io.PrintWriter; /** * 继承GenericServlet实现Servlet程序,整个代码中只需要考虑实现service核心方法即可 * 不再考虑其他的关闭,加载,初始化,配置.... */ @WebServlet("/testServlet2") public class TestServlet2 extends GenericServlet { @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { res.setContentType("text/html;charset=utf-8"); PrintWriter writer = res.getWriter(); writer.append("继承GenericServlet实现Servlet程序"); } }

5.3 继承HttpServlet实现Servlet程序

package com.qfedu.b_threeServlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 继承HttpServlet完成Servlet程序 * 在HttpServlet类内,实现了GenericServlet要求的service方法,并且根据 * Http协议针对性的完成了请求对应的处理方式,在HttpServlet程序中,自行 * 优化了service方法,满足对应的Http协议需求。 * * 目前只需要考虑当前网络请求的method是什么,完成对应的方法即可,不需要考虑 * 资源加载,初始化,数据配置,销毁,service方法 * * 逻辑问题全部考虑到业务上!!! */ @WebServlet("/testServlet3") public class TestServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().append("HttpServlet NB"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

5.4 接口 ==> abstract类 ==> 普通类

Servlet接口 制定规范,制定必要方法!!!但是未实现任何的功能!!! GenericServlet抽象类 完成了必要配套方法,初始化,资源配置,关闭,和信息描述,但是未完成 service方法。 HttpServlet抽象类 依据HTTP协议完成了service方法,并且提供了对应Http协议的处理方式。 Servlet程序类 承上启下!!!

6. Servlet生命周期

6.1 Servlet生命周期概述

Servlet程序是在Tomcat服务器运行的!!!所有的操作过程都是由Tomcat服务器控制 创建 Servlet程序创建过程,重点考虑提供服务的Servlet什么时候创建! 会考虑根据Servlet体量,重要性和加载时间问题,来优化Servlet程序创建时间 初始化 对于当前Servlet配置过程 web.xml 注解配置 利用初始化过程,辅助程序加载处理对应资源 服务 根据用户请求提供对应的服务,需要考虑的核心是Request对象和Response对象。 url http://localhost:8080/Day37/studentService?method=addStudent&XXXXXX 销毁 销毁对应的Servlet程序。 1. Tomcat服务器关闭之后会自动关闭销毁当前Tomcat服务器中所有注册 Servlet程序 2. 自行销毁,考虑用户在退出对应需求,关闭对应请求的情况下,销毁对应 Servlet程序。

6.2 Servlet生命周期相关方法

创建 构造方法!!! Tomcat服务器会根据对应资源的请求,创建对应Servlet类对象,会执行无参数构造方法。 初始化 init(ServletConfig config); 服务: service(Request, Response); 销毁: destroy package com.qfedu.c_ServletLife; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/servletLife") public class ServletLife extends HttpServlet { /** * ServletLife构造方法 */ public ServletLife() { System.out.println("ServletLife Constructor Method Called...."); } /** * Servlet 初始化方法 * * @param config ServletConfig对象 * @throws ServletException Servlet异常 */ @Override public void init(ServletConfig config) throws ServletException { super.init(config); System.out.println("ServletLife init Method Called.."); } /** * 提供服务Service方法 * * @param req HttpServletRequest 请求对象 * @param resp HttpServletResponse 响应对象 * @throws ServletException Servlet异常 * @throws IOException IO异常 */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().append("<h1>ServletLife Service Method Called...</h1>"); System.out.println("ServletLife Service Method Called..."); } /** * 销毁方法 */ @Override public void destroy() { super.destroy(); System.out.println("ServletLife Destroy Method Called..."); } }

7. Servlet配置

7.1 web.xml

可以支持任意版本的Servlet程序!!! <?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> <!-- 当前Servlet名字 --> <servlet-name>ServletConf1</servlet-name> <!-- servlet程序对应的文件是哪一个 需要完整的包名.类名 --> <servlet-class>com.qfedu.d_config.ServletConf1</servlet-class> <!-- 初始化参数配置 --> <init-param> <param-name>aaa</param-name> <param-value>骚磊</param-value> </init-param> <!-- 在Tomcat服务器启动时直接加载当前Servlet程序 --> <load-on-startup>1</load-on-startup> </servlet> <!-- URL资源映射Servlet程序关系 --> <servlet-mapping> <!-- servlet名字 --> <servlet-name>ServletConf1</servlet-name> <!-- 在URL资源名字 --> <url-pattern>/servletConf1</url-pattern> </servlet-mapping> </web-app>

7.2 @WebServlet注解

最新回复(0)