目录
Servlet概念
Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理
一、什么是Servlet
Servlet(Server applet)服务器的小程序, Servlet是JavaWeb的三大组件之一,它属于动态资源
, 也是JavaEE中的一个规范
。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理
,在Servlet中通常需要进行下面三步,实现动态页面输出
.
- 接收请求数据;
- 处理请求
- 完成响应
- Servlet必须实现
javax.servlet.Servlet
接口
二、实现Servlet的方式
- 实现Servlet有三种方式:
- 实现
javax.servlet.Servlet
接口 - 继承
javax.servlet.GenericServlet
类 - 继承
javax.servlet.httpServlet
类
- 实现
步骤一
:创建一个MyServlet类实现javax.servlet.Servlet接口
public class MyServlet implements Servlet {
/*
* 它是生命周期方法
* 它会在Servlet对象创建之后马上执行,并只执行一次
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init()...");
}
/*
* 它是生命周期方法
* 它会被调用多次,每次处理请求都是在调用这个方法!
* */
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service()...");
}
/*
* 它是生命周期方法
* 它会在Servlet被销毁之前调用,并且它只会被调用一次!
* */
@Override
public void destroy() {
System.out.println("destroy()...");
}
/*
* 可以用来获取Servlet的配置信息
* */
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig()...");
return null;
}
/*
* 获取Servlet的信息
* */
@Override
public String getServletInfo() {
System.out.println("getServletInfo()...");
return null;
}
}
步骤二
:在web.xml中配置Servlet
- 如何让浏览器访问Servlet, 需要给Servlet指定一个Servlet路径.
- 在
web.xml
中配置<servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>com.sunny.servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping>
上面配置解释:
在web.xml中配置Servlet的目的其实只有一个,就是把访问路径与一个Servlet绑定到一起,上面配置是把访问路径:“/firstServlet”与“com.sunny.servlet.MyServlet”绑定到一起。
1、<servlet>:指定MyServlet这个Servlet的名称为firstServlet;
2、< servlet-mapping>:指定/MyServlet访问路径所以访问的Servlet名为firstServlet。
3、< servlet>和< servlet-mapping>通过< servlet-name>这个元素关联在一起了!
然后通过IDEA启动Tomcat, 在浏览器中输入http://localhost:8080/13_Tomcat_war_exploded/MyServlet
就可以看到IDEA控制台调用Servlet中的方法.
三、Servlet的生命周期
-
void init (ServletConfig servletConfig)初始化方法
1.如果有构造器,会先调用构造方法(优先于init)
2、当Servlet被创建的时候执行init方法,且执行一次
3、默认情况下,第一次被访问时,Servlet被创建
4、可以在web.xml中servlet标签下配置Servlet的创建时间
<load-on-startup>负数</load-on-startup>
第一次访问时创建
<load-on-startup>正数</load-on-startup>
服务器启动时创建5、
因为init方法只被执行一次,所以一个Servlet在内存中只存在一个对象,Servlet是单例. 多个用户同时访问时,可能存在线程安全问题。
解决:
尽量不要在Servlet中定义成员变量。 -
void service (ServletRequest servletRequest, ServletResponse servletResponse)方法
每当访问Servlet时,Servlet方法都会被调用一次 -
void destroy()销毁方法
1、Servlet被销毁时执行,服务器关闭时,Servlet被销毁
2、只有服务器正常关闭时,才会执行destory方法
3、destory方法在Servlet被销毁之前执行,一般用于释放资源 -
注意:Servlet类由我们编写,但对象由服务器创建,并且由服务器来调用对应的方法.
ServletConfig类
一、ServletConfig的作用
- 首先一个
ServletConfig类
对应着一段web.xml
中配置的Servlet信息
;也就是说我们配置的Servlet信息都会被Tomcat解析后,将配置信息的数据保存在ServletConfig
类中.所以一个ServletConfig类只对应一段Servlet信息
.
二、ServletConfig中的方法
-
String getServletName(): 获取<servlet-name>的内容
-
ServletContext getServletContext():
获取Servlet上下文对象 -
String getInitParameter(String name): 通过名称获取指定初始化参数的值
-
Enumeration getInitParameterNames(): 获取所有初始化参数的名称
首先在web.xml的servlet标签中配置一些初始化参数要使用到:
<!--可以配置对个--> <init-param> <!--键值对--> <param-name>name</param-name> <param-value>ZYGui</param-value> </init-param>
三、在init方法中来获取配置信息
/*
* 获取servlet-name
*/
String servletName = servletConfig.getServletName();
System.out.println(servletName);
/*
* 获取初始化参数的值
*/
String initParameter1 = servletConfig.getInitParameter("name");
System.out.println(initParameter1);
String initParameter2 = servletConfig.getInitParameter("age");
System.out.println(initParameter2);
/*
获取所有初始化参数的名称
*/
Enumeration<String> enumeration = servletConfig.getInitParameterNames();
while (enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement());
}