初识Servlet
1. 了解Servlet和JSP的关系
在MVC设计模式中,
- Model1:
- M:Model :JavaBean (Service Entity DAO等统称)
- V:View:JSP视图
- C:Controller:JSP纯写Java代码
- Model2:
-
M:Model :JavaBean (Service Entity DAO等统称)
-
V:View:JSP视图
-
C:Controller 既然JSP纯写Java代码,那么我们也清楚JSP是在运行过程中会被Tomcat Jasper翻译成一个Java类(Servlet),所以干脆我们就直接将Java类编写好不就可以了吗?
Servlet
-
index.jsp翻译后的Java类的继承体系:
- 父类:Pet 子类:Dog 、Cat… dog extends Pet 继承关系 -> dog is a Pet
- 父类:GenericServlet 子类:xxxxx,xxxx,index_jsp 继承关系 index_jsp is a GenericServlet (JSP is a Servlet )
Servlet:Servlet本身就是Java EE中三大核心组件之一,专门用于接收客户端请求,进行响应。
2. 了解Servlet的常用API
顶级接口:Servlet 拥有接收客户端请求,进行响应的能力
- 初始化Servlet: void init(ServletConfig config);
- 销毁Servlet: void destroy();
- 处理客户端请求: void service(ServletRequest request, ServletResponse response);
- 获取Servlet初始配置:ServletConfig getServletConfig();
- 获取Servlet描述信息:String getServletInfo();
顶级抽象类:GenericServlet
- 帮你实现除了service()请求处理之外的所有方法
HTTP抽象类:HttpServlet
- 帮你实现了除了HTTP请求之外的所有的协议处理方式
- service(HttpServletRequest request,HttpServlet response)
- 帮你实现了所有请求方式的处理
以后我们只需要重写GET请求和POST请求的处理即可。
3. 掌握Servlet的部署和配置
-
继承HttpServlet
-
重写doGet()和doPost()方法
-
在web.xml中部署Servlet
<!-- 部署Servlet --> <servlet> <!-- Servlet名称 必须保证唯一 --> <servlet-name>userServlet</servlet-name> <servlet-class>cn.kgc.demo3.UserServlet</servlet-class> </servlet> <!-- Servlet映射 --> <servlet-mapping> <!-- 给userServlet进行映射配置 --> <servlet-name>userServlet</servlet-name> <!-- URL匹配规则 能够处理的请求URL --> <!-- localhost:8080/day56-servlet/user --> <url-pattern>/user</url-pattern> </servlet-mapping>
Eclipse自带Servlet创建:
- new -> Servlet
- 修改servlet-name和url-pattern
- 实现doGet和doPost
public class ProviderServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
4. 掌握Servlet处理用户请求
用它替换掉JSP处理逻辑。
5. 掌握Servlet的生命周期(原理:面试)
服务器(Servlet容器)加载Servlet过程:
- 服务器启动时,首先会读取web.xml
- 将web.xml中的Servlet信息会以键值对形式进行存储
- url-patter = servlet-name
- servlet-name = servlet-class
当客户端第一次请求Servlet时,服务器会从键值对中查找对应的servlet-name。
找到之后,服务器会再识别其中的servlet-class,然后会通过反射进行相应Servlet的实例化,并且同时进行初始化(init())。
当客户端每次请求Servlet时,Servlet都会执行service()方法,service()方法根据请求方式的不同会执行对应的doGet()…等方法。
当服务器被正常关闭/项目从服务器移除的时候,Servlet会执行销毁动作。
6. 了解Servlet的初始化配置
-
如果希望在Servlet运行中动态改变一些变量值,可以使用Servlet标签内的init-param子标签来进行初始参数的配置,但是这个配置仅在当前Servlet内有效。
- ServletConfig:String getInitParameter(String name);
因为Servlet实现了ServletConfig接口,所以直接可以使用上述方法。this.getXXX();
-
如果希望能够在多个Servlet内共享,需要配置context-param上下文参数。
- ServletContext:String getInitParameter(String name);
以直接可以使用上述方法。this.getXXX();
- ServletContext:String getInitParameter(String name);
-
如果希望能够在多个Servlet内共享,需要配置context-param上下文参数。
- ServletContext:String getInitParameter(String name);
注:笔记思路来自查老师!!