Javaweb学习笔记6(Servlet)
Javaweb学习笔记6(Servlet)
servlet
基本介绍
全程是server applet,运行在tomcat上的小程序
图解:
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
将来我们自定义一个类,实现Servlet接口,复写方法。
代码实现
创建JavaEE项目
定义一个类,实现Servlet接口
实现接口中的抽象方法
配置Servlet
实现Servlet
首先实现Servlet接口,使用implements Servlet
再实现他的全部方法
主要是找到service方法,这个方法就是提供服务的方法
package com.example.ServletTest;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo1 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//提供服务的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
配置servlet
要用到这个java类,我们需要配置好web.xml来指向向这个类
其中有两部分
第一是为这个类命一个名
第二是为这个类配置好映射访问的路径
<!--配置servlet名称-->
<servlet>
<!--命名-->
<servlet-name>demo1</servlet-name>
<!--定位相关的类-->
<servlet-class>com.example.ServletTest.ServletDemo1</servlet-class>
</servlet>
<!--配置servlet映射-->
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<!--配置资源访问路径-->
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
1
2
3
4
5
6
7
8
9
10
11
12
13
访问localhost:8080/demo1后发现成功访问了
到控制台发现成功输出的hello,servlet
说明之前的ServletDemo1类的service方法成功调用了
原理简述
图解
文字简述
当客户端通过一个url来访问一个servlet的资源路径时候,http://localhost:8080/demo1,浏览器就会去寻找web.xml
遍历web.xml的信息,找到<url-pattern>内容与demo1一样的映射
找到了映射后就会去找全类名<servlet-class>:com.example.ServletTest.ServletDemo1(以后看到全类名就要想到映射)
tomcat将全类名对应的字节码问件加载进内存,Class.forName(),创建对象,调用方法
对于这个service方法,由于我们之前使用了implements Servlet,并按照规则实现了他的所有方法,所以tomcat是肯定能够准确的调用service方法的
servlet的方法介绍
之前我们使用implements Servlet实现了其中的五个方法
先创建第二个类来测试,记得在web.xml里面配置好
这样写一下
public class ServletDemo2 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
init():在servlet被创建的时候被调用执行,只会执行一次
service():提供服务,每一次servlet被访问就会调用一次
destroy():当服务器正常关闭的时候执行,只会执行一次
getServletConfig():获取ServletConfig对象,ServletConfig是servlet的配置对象,后面会详细学
getServletInfo():获取servlet的版本信息之类的,平常不会去实现它
生命周期
创建时:执行init方法,且执行一次
默认情况下,第一次被访问时,Servlet被创建
可以配置执行Servlet的创建时机。
在<servlet>标签下配置:
第一次被访问时,创建
<load-on-startup>的值为负数
在服务器启动时,创建
<load-on-startup>的值为0或正整数
提供服务:执行service方法,执行多次
每次访问Servlet时,Service方法都会被调用一次
被销毁:执行destroy方法,只执行一次
Servlet被销毁时执行。服务器关闭时,Servlet被销毁
只有服务器正常关闭时,才会执行destroy方法
destroy方法在Servlet被销毁之前执行,一般用于释放资源
Servlet > 3.0
Servlet版本大于3.0支持注解配置,不需要到web.xml里面指定类名和映射了
步骤
创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
定义一个类,实现Servlet接口
复写方法
在类上使用@WebServlet注解,进行配置
@WebServlet(“资源路径”)或者写@WebServlet(urlPatterns = “资源路径”)
成功访问
Servlet的体系结构
Servlet的体系结构有三层,爷-父-孙三级继承
Servlet – 接口
|
GenericServlet – 抽象类
|
HttpServlet – 抽象类
我们在开发的时候,写servlet实现他的方法有一大堆,但是我们实际常用到的也就是service方法,那么就想有一个办法预定义好那些不长用的方法
厂商给出了这样的体系,注意这两个是类,是用extend来继承
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
其他的方法你想重写哪个就导入就行
HttpServlet:对http协议的一种封装,简化操作
定义类继承HttpServlet
复写doGet/doPost方法
在开发中我们需要对get和post接收做出处理,这样每次去实现就会很麻烦,这时候HttpServlet就可以很方便的实现这些东西
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST...");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
访问网站和a=123,一共进行两次get请求
post同理
urlpartten:Servlet的配置
可以看到WebServlet里面的urlpatterns的类型是数组,意思就是一个servlet可以匹配多个路径
一个Servlet可以定义多个访问路径 :
格式:用大括号来包起来,@WebServlet({"/aaa","/bbb","/ccc"})
路径定义规则:
1. /xxx:路径匹配
2. /xxx/xxx:多层路径,目录结构,可以用*通配符,这样第二级的目录不管输入什么都能访问到
3. *.do:扩展名匹配,注意前不能加/,do这个后缀可以随便改
————————————————
版权声明:本文为CSDN博主「huamanggg」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_51078229/article/details/115711932