⚽ 创建JavaWeb模块
⚽ Web工程目录介绍
⚽ 给动态 web 工程添加额外 jar 包
🏐 方式一
🏐 方式二
创建一个自己的类库:
⚽ 在 IDEA 中部署工程到 Tomcat 上运行
index.jsp
⚽ 配置资源热部署
🏀 Servlet
⚽ Servlet 简介
- Servlet 是 JavaEE 规范之一。(规范就是接口)
- Servlet 是 JavaWeb 三大组件之一。JavaWeb 三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
- Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
⚽ 手动实现 Servlet
1、编写一个类实现 Servlet 接口
2、实现 service 方法,处理请求,并响应数据
3、到 web.xml 中去配置 servlet 程序的访问地址
找不到Servlet类:
HelloServlet.java
import javax.servlet.*; import java.io.IOException; public class HelloServlet implements Servlet { ...... /** * service方法用于处理请求和相应的方法 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("HelloServlet"); } }
到 web.xml 中配置 servlet 程序的访问地址
<!-- servlet标签给Tomcat配置servlet程序 --> <servlet> <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) --> <servlet-name>HelloServlet</servlet-name> <!--servlet-class 是 Servlet 程序的全类名--> <servlet-class>HelloServlet</servlet-class> </servlet> <!--servlet-mapping 标签给 servlet 程序配置访问地址--> <servlet-mapping> <!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用--> <servlet-name>HelloServlet</servlet-name> <!-- url-pattern 标签配置访问地址 / 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径 /hello 表示地址为:http://ip:port/工程路径/hello --> <url-pattern>/hello</url-pattern> </servlet-mapping>
⚽ url 地址到 Servlet 程序的访问
⚽ Servlet 的生命周期
- 1、执行 Servlet 构造器方法
- 2、执行 init 初始化方法
- 第一、二步是在第一次访问的时候创建 Servlet 程序会调用。
- 3、执行 service 方法
- 第三步每次访问都会调用。
- 4、执行 destroy 销毁方法
- 第四步在 web 工程停止的时候调用。
import javax.servlet.*; import java.io.IOException; public class HelloServlet implements Servlet { public HelloServlet() { System.out.println("1.构造器被调用"); } @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("2.初始化方法被调用"); } @Override public void destroy() { System.out.println("4.destroy方法被调用"); } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("3.service方法被调用"); } }
⚽ GET 和 POST 请求的分发处理
@Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { // 类型转换(因为HttpServletRequest有 getMethod()方法) HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; // 获取请求的方式 String method = httpServletRequest.getMethod(); if ("GET".equals(method)) { System.out.println("GET"); } else if ("POST".equals(method)){ System.out.println("POST"); } }
⚽ 通过继承 HttpServlet 实现 Servlet 程序
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式实现 Servlet 程序。
1、编写一个类继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、到 web.xml 中的配置 Servlet 程序的访问地址
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("HelloServlet2 doGet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("HelloServlet2 doPost"); } }
<servlet> <servlet-name>HelloServlet2</servlet-name> <servlet-class>HelloServlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet2</servlet-name> <url-pattern>/hello2</url-pattern> </servlet-mapping>
⚽ 使用 IDEA 创建 Servlet 程序
import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class HelloServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("HelloServlet3 doGet"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("HelloServlet3 doPost"); } }
<servlet> <servlet-name>HelloServlet3</servlet-name> <servlet-class>HelloServlet3</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet3</servlet-name> <url-pattern>/hello3</url-pattern> </servlet-mapping>
⚽ Servlet 类的继承体系
⚽ ServletConfig 类
ServletConfig 类从类名上来看,是 Servlet 程序的配置信息类。ServletConfig 类对象中封装了Servlet 程序的配置信息,ServletConfig 类对象可以在 Servlet 程序初始化时使用。
Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对
象。
自己的Servlet类重写init方法,如果在后续的方法中需要使用ServletConfig 类对象,则需要调用
super.init(config)
方法保存ServletConfig 类对象。