目录
1 Servlet概念
Servlet概念:运行在服务器端的小程序
* Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
* 将来我们自定义一个类,实现Servlet接口,复写方法。
2 Servlet入门
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
package cn.lws.web;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo01 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 servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
3. 配置web.xml
<?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-name>aaa</servlet-name>
<servlet-class>cn.lws.web.ServletDemo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/bbbb</url-pattern>
</servlet-mapping>
</web-app>
4 执行
2.1 Servlet执行原理
- 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径(在web.xml文件中找url-partten)
- 如果有,则在找到对应的<servlet-class>全类名
- tomcat通过全类名将字节码文件加载进内存,并且创建其对象(全类名.newInstance())
- 调用其方法(调用ServletDemo.java中的service()方法)
3 Servlet生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
- Servlet 初始化后调用 init () 方法。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 销毁前调用 destroy() 方法。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
现在让我们详细讨论生命周期的方法。
3.1 init()方法
init()方法在Servlet被创建时执行,且只执行一次。说明一个Servlet在内存中只存在一个对象,Servlet是单例的(多个用户同时访问时,可能存在线程安全问题。解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值)
Servlet对象什么时候被创建?
默认情况下,第一次被访问时,Servlet被创建
配置执行Servlet的创建时机:如:<load-on-startup>0 </load-on-startup> 表示服务器启动时创建Servlet对象
值为负数,第一次被访问时,创建Servlet 。 值为0或正整数,服务器启动时创建Servlet (默认情况)
3.2 service()方法
每次访问Servlet时,Service方法都会被调用一次。
3.3 destroy()方法
destroy()方法,用于释放资源。Servlet执行destroy方法,只执行一次,只有服务器正常关闭,才会执行此方法
4 Servlet使用注解
1 创建java Modules,之后鼠标右击选择add Frameworks Support
2 选择左边的javaEE,右边E Jave EE的版本version 是Java EE8
3 选择Web Application , 创建4.0版本
4 选择ok
5 打开Module是,添加Tomcat jar 包。如下图所示操作
6 项目结构(此时项目没有web.ml文件)
7 书写代码
在类上使用@WebServlet注解,进行配置
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/ServletTest01")
public class ServletTest01 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("servlet 4.0...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
测试:
浏览器输入![]() |
结果:
注解源码
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default ""; String[] value() default {}; String[] urlPatterns() default {}; int loadOnStartup() default -1; WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
5 Ideat与Tomcat相关配置
1 IDEA会为每一个tomcat部署的项目单独建立一份配置文件(CATALINA_BASE)
打开我的项目
2 工作空间项目 和 tomcat部署的web项目
tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工作空间项目" 的web目录下的所有资源
WEB-INF目录下的资源不能被浏览器直接访问。