JavaWeb核心之Servlet
Servlet快速入门
实现步骤:
1创建类实现Servlet接口
2覆盖尚未实现的方法---重点实现service方法
3在web.xml进行servlet的配置
web.xml例子
Servlet接口中的方法
init(ServletConfig config)何时执行:servlet对象创建的时候执行
ServletConfig : 代表的是该servlet对象的配置信息
public void init(ServletConfig arg0) throws ServletException { // TODO Auto-generated method stub // ServletConfig里面封装的是该servlet在web.xml的配置信息 // 获取servlet对象 System.out.println(arg0.getServletName()); // 获取ServletContext对象 System.out.println(arg0.getServletContext()); System.out.println("init正在执行"); }
service(ServletRequest request,ServletResponse response)何时执行:每次请求都会执行
ServletRequest :代表请求 认为ServletRequest 内部封装的是http请求的信息
ServletResponse :代表响应 认为要封装的是响应的信息
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("service正在执行"); arg1.getWriter().write("service方法正在执行"); }
destroy()何时执行:servlet销毁的时候执行
public void destroy() { // TODO Auto-generated method stub System.out.println("destroy正在执行"); }
Servlet的生命周期
1)Servlet何时创建
默认(服务器启动时)第一次访问servlet时创建该对象
2)Servlet何时销毁
服务器关闭servlet就销毁了
3)每次访问必然执行的方法
service(ServletRequest req, ServletResponse res)方法
Servlet的配置
servlet(JavaWeb核心)、HttpServlet
1、servlet(JavaWeb核心)
(1)创建类实现Servlet接口implement Servlet import javax.servlet.Servlet;
(2)覆盖尚未实现的方法
(3)在web.xml进行servlet的配置
举个例子:
[<servlet-mapping></servlet-mapping>里面的]的ServletQuick和
<servlet-name>ServletQuick</servlet-name>[ <servlet></servlet>里面的]的ServletQuick
名字必须一致;
<servlet> <servlet-name>ServletQuick</servlet-name> <servlet-class>com.oracle.web.ServletQuick</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletQuick</servlet-name> <url-pattern>/ServletQuick</url-pattern> </servlet-mapping>
(4)Servlet接口中的方法
init(ServletConfig config)何时执行:servlet对象创建的时候执行
ServletConfig : 代表的是该servlet对象的配置信息
service(ServletRequest request,ServletResponse response)何时执行:每次请求都会执行
ServletRequest :代表请求 认为ServletRequest 内部封装的是http请求的信息
ServletResponse :代表响应 认为要封装的是响应的信息
destroy()何时执行:servlet销毁的时候执行
package com.oracle.web; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class ServletQuick implements Servlet{ @Override public void destroy() { // TODO Auto-generated method stub System.out.println("destroy方法正在执行"); } @Override public ServletConfig getServletConfig() { // TODO Auto-generated method stub return null; } @Override public String getServletInfo() { // TODO Auto-generated method stub return null; } @Override public void init(ServletConfig arg0) throws ServletException { // TODO Auto-generated method stub //ServletConfig里面封装的是该Servlet在web.xml里面的配置信息 System.out.println("init方法正在执行"); ServletContext servletContext = arg0.getServletContext(); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("service方法正在执行"); arg1.getWriter().write("service方法正在执行"); } }
当再次执行时:
当直接点击红色方块时:
当点击stop时:
(5)Tomcat引擎
解析请求的资源地址;
举个例子:localhost:8080/WEB02/ServletQuick
先找到WEB02文件的web.xml
然后找到 <url-pattern>/ServletQuick</url-pattern>里面的ServletQuick
进而找到<servlet-name>ServletQuick</servlet-name>[<servlet-mapping></servlet-mapping>里面的]的ServletQuick
再找到<servlet-name>ServletQuick</servlet-name>[ <servlet></servlet>里面的]的ServletQuick
最后找到<servlet-class>com.oracle.web.ServletQuick</servlet-class>的com.oracle.web.ServletQuick
创建Servlet对象;
创建代表请求的request对象和代表响应的response对象;
response响应对象注意是否为空;
每次访问service方法都会创建一对新的request和response对象;
(6)基本配置:
完全匹配:/aaa
目录匹配:/aaa/bbb/ccc/*
扩展名匹配:*.abcd
(7)何时创建:默认第一次访问时创建
当在servlet的配置时 加上一个配置 <load-on-startup>3</load-on-startup>[中间的“3”代表优先级] servlet对象在服务器启动时就创建
(8)缺省Servlet:
url-pattern配置一个/,/代表该servlet是缺省的servlet
当你访问资源地址所有的servlet都不匹配时,缺省的servlet负责处理(在Tomcat服务器里)
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>