目录
2.继承javax.servlet.GenericServlet
3.继承javax.servlet.http.HttpServlet;
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容。作用在MVC的Controller层。
servlet规范:包含三个技术点
- servlet技术
- filter技术---过滤器
- listener技术---监听器
servlet的访问方式:
实现一个servlet的方法:
1.现javax.servlet.Servlet接口
实现步骤:
- 创建类实现Servlet接口
- 覆盖尚未实现的方法---service方法
- 在web.xml进行servlet的配置
Servlet接口中的方法:
方法 | 何时执行 | 参数意义 |
init(ServletConfig config) | servlet对象创建的时候执行 只执行一次。在请求的时候。类似于构造方法。 | ServletConfig : 代表的是该servlet对象的配置信息 |
service(ServletRequest request,ServletResponse response) | 每次请求都会执行 | ServletRequest :代表请求 认为ServletRequest 内部封装的是 http请求的信息 ServletResponse :代表响应 认为要封装的是响应的信息 |
destroy() | servlet销毁的时候执行 只执行一次。在服务器关闭时执行。 | |
getServletConfig() | ||
getServletInfo() |
例子:
package controller;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FirstServlet implements Servlet{//实现接口
public void destroy() {//销毁
// TODO Auto-generated method stub
}
public ServletConfig getServletConfig() {//获取到servlet的配置方法
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {//获取到servlet的信息的方法
// TODO Auto-generated method stub
return null;
}
//Servlet的初始化方法,仅在第一次请求时执行
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
//重点方法 服务方法 每次请求都会执行
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
2.继承javax.servlet.GenericServlet
实现service方法。
例子:
package controller;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SecondServlet extends GenericServlet{
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("执行服务方法!");
}
}
3.继承javax.servlet.http.HttpServlet;
推荐使用。但只能在HTTP协议及其自协议下使用。
实现步骤:
- 创建类继承HttpServlet类
- 覆盖doGet和doPost
- 在web.xml中进行servlet的配置
package controller;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
//第三种实现方法,推荐方式
import javax.servlet.http.HttpServletResponse;
@WebServlet("/three")
public class ThreeServlet extends HttpServlet{
private static final long serialVersionUID = 1L;//序列化
//post请求的服务
public void doPost(HttpServletRequest request ,HttpServletResponse response) {
System.out.println("你好,post");//form表单的method="post"
}
//get请求的服务
public void doGet(HttpServletRequest request ,HttpServletResponse response) {
System.out.println("你好,get");
}
}
注册servlet:
在web.xml文件中注册
<servlet>
<servlet-name>给Servlet起个名字</servlet-name>
<servlet-class>Servlet类的完整路径</servlet-class> <!-- 包名.文件名 -->
</servlet>
<servlet-mapping>
<servlet-name>给Servlet起个名字</servlet-name>
<url-pattern>/网址(路径)</url-pattern> <!-- / 为根目录,必须含有 -->
</servlet-mapping>
两者成对出现,有一个<servlet>就有一个<servlet-mapping>,<servlet-name>作用为将两者连接起来。且当有多对时,必须将所有的<servlet>写在<servlet-mapping>前面。
目的为:敲了哪个网址去执行哪个类。
注解方式:
在类的声明前加上 @WebServlet("/three") 括号内为url 其作用与手动注册相同。
例子:
@WebServlet("/three")
public class ThreeServlet extends HttpServlet{
……
}
servlet的生命周期:
- 加载:服务器启动时,加载wab.xml中的所有注册的所有servlet。map结构。但不会new(创建对象),只是加载
- 初始化:第一次请求这个servlet时。new->调用init方法->调用服务->加入缓冲池中(方便下次请求)。(单例模式)
- 服务:每请求一次,就执行一次服务。
- 销毁:服务器关闭时,销毁所有servlet。
请求机制:先看缓冲池,是否有对象。没有就创建对象并使用。
总结:
- Servlet何时创建:默认第一次访问servlet时创建该对象
- Servlet何时销毁:服务器关闭servlet就销毁了
- 每次访问必然执行的方法:service(ServletRequest req, ServletResponse res)方法
-
一个web应用有几个servlet对象? 多个