什么是Servlet
运行在服务器中的小应用程序
Servlet是一个接口,定义了一个java类被客户端访问到规则
快速入门
1.写一个java类实现Servlet接口
package cn.ttsx.servlet;
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 ServletDemo1 implements Servlet {
/**
* 初始化
* 只能调用一次,当Servlet第一次被访问的时候创建
*
*
*/
public void init(ServletConfig config) throws ServletException {
System.out.println("我只能调用一次");
}
/**
* 提供服务,可以被多次调用,每一次servlet被访问的时候都会调用这个方法
*
*/
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("我可以被多次调用哦");
}
/**
* 销毁
* 当服务器正常关闭时,调用一次
*
*/
public void destroy() {
System.out.println("我关闭啦");
}
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
}
2.在web.xml配置Servlet的访问方式
<!-- 创建一个servlet实例 -->
<servlet>
<servlet-name>selectDemo1</servlet-name>
<servlet-class>cn.ttsx.servlet.ServletDemo1</servlet-class>
</servlet>
<!-- 提供一个可访问的url地址 -->
<servlet-mapping>
<servlet-name>selectDemo1</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3.部署到服务器
4.测试 http://localhost:8080/Servlet/hello
原理(底层通过反射实现)
1.服务器获取到客户端的访问路径
2.去web.xml中查找访问Servlet资源的路径对应的全类名
3.反射加载字节码文件进内存
4.创建器对象
生命周期(初始化–>服务–>销毁)
/**
* 初始化
* 只能调用一次,当Servlet第一次被访问的时候创建
*/
public void init(ServletConfig config) throws ServletException {
System.out.println("我只能调用一次");
}
/**
* 提供服务,可以被多次调用,每一次servlet被访问的时候都会调用这个方法
*
*/
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("我可以被多次调用哦");
}
/**
* 销毁
* 当服务器正常关闭时,调用一次
*
*/
public void destroy() {
System.out.println("我关闭啦");
}
创建Servlet的三种方式
1.实现servlet接口
2.继承GenericServlet类(适配器模式)
优点:
1.提供了Servlet接口的适配器
2.已经对getServletConfig()做了处理,并且在init(ServletConfig config)方法中调用了无参数的init()方法以后复写无参数的init()方法。
3.实现了ServletConfig接口,复写了其中的方法。以后再Servlet中使用config的方法,可以直接使用。简化书写
public class ServletDemo2 extends GenericServlet{
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
}
}
3.继承HttpServlet类(模板方法设计模式)
在service方法中
1.获取请求方式
2.判断方式是什么
3.执行不同的操作,调用了不同的方法
我们继承HttpServlet时,要复写的是这些”不同的方法” doGet,doPost…
package cn.ttsx.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
}
}