目录
3、项目结构图:Tomcat服务器部署Servlet程序项目结构图
4-1、写第一个Servlet处理程序 - HelloServlet implents Servlet
4-2、写第二个Servlet处理程序 - HttpServletProcessor extends HttpServlet
4-3 在IDEA中支持自动的快速的生成一个Servlet处理器(简化4-1与4-2)
4-4、在 web.xml 配置文件中配置刚才写好的servlet处理器
4-5、写一个前端提交按钮来测试Servlet处理器是否正常工作
5.1 整个动态Web工程目录的介绍(动态资源-Servlet处理器;静态资源-jpg等)
5.2 B/S架构之HTTP请求到HTTP响应的整体流程-1
5.3 B/S架构之HTTP请求到HTTP响应的整体流程-2
5.4 Servlet程序的访问原理:HTTP请求是怎么访问到Tomcat服务器中某一个Servlet处理器的
6.1 web.xml文件:url-pattern中配置的路径没有以斜杠\打头
6.2 web.xml文件:servlet-name中的两个映射值不一致
6.3 web.xml文件:servlet-class标签的全类名配置错误
1、Servlet介绍
(1)Servlet是JavaEE规范(接口)之一。
(2)Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
(3)Servlet是运行在服务器上的一个java程序,可以接收客户端发来的请求,并响应数据给客户端解析展示。
2、手动实现Servlet程序
(1)编写一个类,让其实现Servlet接口,并重写Servlet接口中的service()方法,该service()方法就是用来处理客户端发来的请求、并且响应数据的。
(2)在 WEB-INF 文件夹中的 web.xml 文件中配置 Servlet程序的访问地址。
2.1 开发Servlet程序步骤如下
3、项目结构图:Tomcat服务器部署Servlet程序项目结构图
4、开始写Serlvet处理器
4-1、写第一个Servlet处理程序 - HelloServlet implents Servlet
(1)在 src 目录下创建一个HelloServlet类,并且继承Servlet接口。
package com.wind.servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
一个servlet程序
*/
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1.Servlet的无参构造器执行了.");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2.Servlet的init方法执行了.");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3.Servlet的service方法执行了.");
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String method = httpServletRequest.getMethod();
if ("GET".equals(method)) {
this.doGet();
}
if ("POST".equals(method)) {
this.doPost();
}
}
private void doPost() {
System.out.println("3.1 Servlet的service方法-doPost-执行了.");
System.out.println("3.1 Servlet的service方法-doPost-执行了2.");
}
private void doGet() {
System.out.println("3.1 Servlet的service方法-doGet-执行了.");
System.out.println("3.1 Servlet的service方法-doGet-执行了2.");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4.Servlet的destroy方法执行了.");
}
}
4-2、写第二个Servlet处理程序 - HttpServletProcessor extends HttpServlet
(1)在 src 目录下创建另一个HttpServletProcessor类,并且继承HttpServlet接口。
(2)在实际项目中,HttpServlet接口更常用。注:HttpServlet接口是Servlet的子接口。
package com.wind.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 通常会使用实现HttpServlet这个抽象类的方式来实现Servlet处理器
*/
public class HttpServletProcessor extends HttpServlet {
private static final long serialVersionUID = -7511536601794982778L;
public HttpServletProcessor() {
System.out.println("1.HttpServletProcessor extends HttpServlet 的无参构造器执行了...");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2.HttpServletProcessor extends HttpServlet 的init方法执行了...");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("3.HttpServletProcessor extends HttpServlet, doGet done...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("4.HttpServletProcessor extends HttpServlet, doPost done...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("5.HttpServletProcessor extends HttpServlet 的destroy方法执行了.");
}
}
4-3 在IDEA中支持自动的快速的生成一个Servlet处理器(简化4-1与4-2)
(1)在 src 目录下再次创建另一个HttpServletProcessorAuto类,并且继承HttpServlet接口。
4-4、在 web.xml 配置文件中配置刚才写好的servlet处理器
(1)在 web.xml 中配置将来在Tomcat服务器中部署的各个Servlet处理器与其对应的访问路径URL
<?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_4_0.xsd"
version="4.0">
<!--1.使用servlet标签给Tomcat配置动态servlet程序-->
<servlet>
<!--servlet-name标签:给servlet程序起一个别名(一般就是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class标签:servlet程序的全类名-->
<servlet-class>com.wind.servlet.HelloServlet</servlet-class>
</servlet>
<!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签:告诉Tomcat服务器,我当前配置的访问地址是给哪个servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--url-pattern标签:配置访问地址.
(1)/ :斜杠表示,在服务器解析的时候,表示访问地址是:http://ip:port/工程路径
(2)/hello : 表示访问地址是:http://ip:port/工程路径/hello 比如:http://localhost:8080/javaWeb/hello -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!--3.使用a.html访问-->
<!--1.使用servlet标签给Tomcat配置动态servlet程序-->
<servlet>
<servlet-name>HttpServletProcessor</servlet-name>
<servlet-class>com.wind.servlet.HttpServletProcessor</servlet-class>
</servlet>
<!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
<servlet-mapping>
<servlet-name>HttpServletProcessor</servlet-name>
<url-pattern>/httpServlet</url-pattern>
</servlet-mapping>
<!--3.使用b.html访问-->
</web-app>
4-5、写一个前端提交按钮来测试Servlet处理器是否正常工作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/javaWeb/hello" method="POST">
<!--action属性值与web.xml中的<url-pattern>标签内容一致,用于访问到servlet程序的service方法-->
<input type="submit">
</form>
</body>
</html>
4-6、测试结果展示
4.6.1 Tomcat服务器启动成功:war包部署成功
4.6.2 浏览器发出HTTP请求
4.6.3 Tomcat服务器做出响应
5、Web项目结构剖析-理解掌握
5.1 整个动态Web工程目录的介绍(动态资源-Servlet处理器;静态资源-jpg等)
5.2 B/S架构之HTTP请求到HTTP响应的整体流程-1
5.3 B/S架构之HTTP请求到HTTP响应的整体流程-2
5.4 Servlet程序的访问原理:HTTP请求是怎么访问到Tomcat服务器中某一个Servlet处理器的
5.5 额外的内容-Spring5中的WebFlux框架
6、Servlet程序的常见错误
6.0 web.xml 文件的规范配置
6.1 web.xml文件:url-pattern中配置的路径没有以斜杠\打头
6.2 web.xml文件:servlet-name中的两个映射值不一致
6.3 web.xml文件:servlet-class标签的全类名配置错误
7、Servlet的生命周期
Servlet 程序被首次访问以后,会按照以下顺序执行:
(1)执行Servlet程序的构造器方法。(2)执行 init() 初始化方法。
(3)执行业务逻辑,也即 service() 方法。(4)执行 destroy() 方法。
其中第(1)步和第(2)步是在初次访问并创建Servlet程序时会执行(每次启动服务只执行一次),第(3)步每次刷新 (每次访问)都会执行,第(4)步停止Tomcat服务器时会执行一次。
参考学习视频
(1)B站javaWeb学习视频完整版:https://www.bilibili.com/video/BV1Y7411K7zz?p=99
(2)java8在线API:https://www.matools.com/api/java8
(3)博客站点:https://blog.csdn.net/weixin_49343190/article/details/107878144