1、创建简单web项目
1.1 创建工程
1.2 创建servlet实现类
package cn.it.web;
import javax.servlet.*;
import java.io.IOException;
public class MyServlet 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.3 在web.xml中配置servlet和servlet-mapping
<?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>
<servlet-name>MyServlet</servlet-name>
<servlet-class>cn.it.web.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>
执行原理:
1、当tomcat服务器受到客户端浏览器的请求后,会解析请求url路径,获取访问的servlet资源路径
2、查找web.xml文件,是否有对应的
3、如果有则找到相应的
4、tomcat将加载字节码文件到内存创建其对象
5、调用其方法
servlet的方法及生命周期
servlet接口一共有以下几个方法:
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
1、void init(ServletConfig var1) throws ServletException;
初始化方法,当servlet创建时执行,只会执行一次
2、ServletConfig getServletConfig();
获取配置方法
3、void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
提供服务的方法,每次执行都会执行,执行多次
4、String getServletInfo();
获取信息方法
5、void destroy();
销毁方法,只有servlet被杀死时才会执行,例如tomcat关闭,执行一次
示例:
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init function");
}
@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() {
System.out.println("destroy function");
}
}
*Servlet中的生命周期:
1、被创建执行init方法执行一次
2、提供服务,service方法每次执行
3、destroy关闭服务时执行一次
servlet生命周期详解
*Servlet中的生命周期:
1、被创建执行init方法执行一次
servler什么时候被创建?
默认情况下是第一次访问
可以配置成在tomcat启动时创建
在web.xml里的servlet标签配置
"
"
servlet是单例的,在内存中同一servlet只会存在一个,多个用户访问时可能存在线程安全问题
*解决方法:尽量不要在servlet中定义成员变量,即使定义了成员变量也不要对其赋值
<?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>
<servlet-name>MyServlet</servlet-name>
<servlet-class>cn.it.web.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>
2、提供服务,service方法每次执行
3、destroy关闭服务时执行一次
servlet3.0
好处:
支持注解配置,可以不需要web.xml了
步骤:
1、创建javaee项目,在3.0以上版本可以不创建web.xml
2、定义一个类,实现servlet接口
3、复写方法
4、在类上使用webSer
示例:创建一个servlet实现类
@WebServlet(name = "index2",urlPatterns = "/index2")
public class MyServlet2 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("servlet2");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
webServlet注解:
@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 "";
}