6. Servlet入门 - Servlet概述
Servlet概述
1. 什么是Servlet
Servlet 运行在服务端(tomcat) 的Java小程序,是sun公司提供一套规范. 就是动态资源
1、Servlet 是 JavaEE 规范之一。规范就是接口
2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
2. Servlet作用
用来接收、处理客户端请求、响应给浏览器的动态资源。
但servlet的实质就是java代码,通过java的API动态的向客户端输出内容
3. servlet与普通的java程序的区别
- 必须实现servlet接口
- 必须在servlet容器(服务器 tomcat)中运行
- servlet程序可以接收用户请求参数以及向浏览器输出数据
4. 手动实现 Servlet 程序
1、编写一个类去实现 Servlet 接口
2、实现 service 方法,处理请求,并响应数据
3、到 web.xml 中去配置 servlet 程序的访问地址
image-20201110233106547
代码实现
1.创建演示的代码模块
image-20201110233307404
image-20201110233330706
image-20201110233401114
2.创建一个测试代码
image-20201110233514670
3.实现 Servlet 接口方法
image-20201110233637425
image-20201110233700884
4.实现 service 方法,专门用来处理请求和响应
image-20201110233842956
5.到 web.xml 中去配置 servlet 程序的访问地址
image-20201110234607157
代码语言:javascript复制<?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">
<!-- servlet标签给Tomcat配置Servlet程序 -->
<servlet>
<!--servlet-name标签 Servlet程序起一个别名(一般是类名) -->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>com.test01.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>
</web-app>
6.配置tomcat 以及设置工程路径
image-20201110234706768
启动 tomcat 服务如下:
image-20201110234738522
7.访问 HelloServlet
访问 http://localhost:8080/06_servlet/hello
image-20201110234831870
常见的错误
常见的错误 1:url-pattern 中配置的路径没有以斜杠打头。
image-20201110235124894
常见错误 2:servlet-name 配置的值不存在:
image-20201110235240101
常见错误 3:servlet-class 标签的全类名配置错误:
image-20201110235420491
5. url 地址到 Servlet 程序的访问
image-20201110064007165
6. Servlet 的生命周期
1、执行 Servlet 构造器方法
2、执行 init 初始化方法
第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。
3、执行 service 方法
第三步,每次访问都会调用。
4、执行 destroy 销毁方法
第四步,在 web 工程停止的时候调用。
代码演示
1.创建Servlet的构造方法
image-20201111000553289
2.在 init 初始化方法,设置打印信息
image-20201111000652460
3.在 service 方法,设置打印信息
image-20201111000725599
4.在destory 销毁方法,设置打印信息
image-20201111000810614
6.启动 tomcat 服务,访问 servlet
访问 localhost:8080/06_servlet/hello
image-20201111000945419
image-20201111001026343
7.停止 tomcat 服务,触发 destory 方法
image-20201111001056479
7. GET 和 POST 请求的分发处理
问题
在上面的说明中,我们已经理解了 Servlet 的基本操作。但是可以知道,我们上面进行Servlet请求的时候,都是执行 service 方法。
那么一般我们请求都会分为多种方式,例如: GET POST PUT DELETE 请求。这些请求都全部会请求到 Servlet 中,那么该怎么区分处理呢?
下面我们来演示一下这个问题。
1.编写一个执行 form 表单请求的 a.html
image-20201111001714606
代码语言:javascript复制<!--form表单请求-->
<form action="http://localhost:8080/06_servlet/hello" method="get">
<input type="submit">
</form>
2.启动 tomcat 服务,执行 get 请求
访问 http://localhost:8080/06_servlet/a.html
image-20201111002052868
image-20201111002105544
此时可以看到,通过 get 请求可以访问到 service 方法。
3.将 form 表单改为 post 请求,再次执行:
image-20201111002200468
image-20201111002236018
从结果来看,也就是不管是 get 请求 还是 post 请求,都会触发 service 方法。
GET POST请求分发的处理
如果需要将请求进行方法,那么首先就需要获取到底请求过来的是什么方法。
4.通过 ServletRequest 的子类 获取请求的方法
image-20201111002647206
代码语言:javascript复制@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3. service 方法:hello servlet被访问了!");
// 类型转换(因为它有getMethod()方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求的方式
String method = httpServletRequest.getMethod();
System.out.println("请求的方法:" method);
}
5.再次使用 post 表单进行请求,查看方法如下:
image-20201111080419393
可以看到,我们已经获取到请求的方法了,下面再来看看 GET 请求。
6.修改表单,执行 GET 请求 测试
image-20201111080933086
可以看到也能够检测出请求是 GET 方法。
7.根据方法的不同,定义不同的函数方法进行分支处理
image-20201111081629224
代码语言:javascript复制package com.test01;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @author Aron.li
* @date 2020/11/10 23:34
*/
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1. HelloServlet构造方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2. init 初始化方法");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 实现 service 方法,专门用来处理请求和响应
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3. service 方法:hello servlet被访问了!");
// 类型转换(因为它有getMethod()方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求的方式
String method = httpServletRequest.getMethod();
System.out.println("请求的方法:" method);
// 根据method分发执行不同的方法
if ("GET".equals(method)){
this.doGET();
}else if ("POST".equals(method)){
this.doPOST();
}
}
/**
* 处理GET方法
*/
public void doGET(){
System.out.println("处理GET方法");
}
/**
* 处理POST方法
*/
public void doPOST(){
System.out.println("处理POST方法");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4. destroy 销毁方法!");
}
}
8. 通过继承 HttpServlet 实现 Servlet 程序
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
1、编写一个类去继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、到 web.xml 中的配置 Servlet 程序的访问地址
代码演示
1、编写一个类去继承 HttpServlet 类
image-20201111083139991
代码语言:javascript复制public class HelloServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
2.根据业务需要重写 doGet 或 doPost 方法
image-20201111083331572
3、到 web.xml 中的配置 Servlet 程序的访问地址
image-20201111083433147
代码语言:javascript复制<!-- 配置HelloServlet2 -->
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.test01.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
4、修改 a.html 的表单请求地址,启动 tomcat 服务,进行测试
image-20201111083628873
可以从上面的操作来看,使用 HttpServlet 来实现 Servlet 比较简单。
10. 使用 IDEA 创建 Servlet 程序
上面我们通过手写 HttpServlet 也是能够很快速开发 Servlet 程序,但是还有更加快的。其实这是 IDEA 提供的快捷方法,下面我们来试试。
1. 菜单:new ->Servlet 程序
image-20201111084329256
2. 配置 Servlet 的信息:
image-20201111084525874
3. 点击 OK 之后,就会自动创建 Servelet 如下:
image-20201111084650634
4.手动配置 servlet-mapping 如下:
image-20201111084801321
代码语言:javascript复制<!-- 配置HelloServlet3 -->
<servlet>
<servlet-name>HelloServlet3</servlet-name>
<servlet-class>com.test01.HelloServlet3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet3</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
5.编写 GET 和 POST 方法
image-20201111084902907
6.执行测试
image-20201111085019930
11.小结
- Servlet是运行在服务器端java小程序, 动态资源
- Servlet的作用: 接收请求,做出响应