servlet温习
servlet是Javaweb的核心,它实质上就是运行在服务器端的Java代码
1.简介
servlet是运行在服务器端的小程序,是sun公司提供的一套规范(接口),用来处理用户的请求,响应给浏览器的动态资源。servlet的本质是Java代码,通过Java的API动态的向客户端输出内容
servlet规范包含三个技术点:servlet,filter,listener
2.servlet快速入门
Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。我们在实际开发中通常不去实现servlet的接口,因为那样需要实现的方法太多。因此我们只需要继承HttpServlet,覆写doGet(),doPost()方法即可
3.掌握servlet的xml配置
servlet的基本配置
<!-- servlet类的配置 --> <servlet> <description></description> <display-name>FirstServlet</display-name> <servlet-name>FirstServlet</servlet-name> <servlet-class>servlet温习.FirstServlet</servlet-class> </servlet> <!-- servlet虚拟路径的配置 --> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/firstServlet</url-pattern> </servlet-mapping>
<url-pattern>的配置
用的最多的就是如上图所示的完全匹配。
目录匹配 /虚拟的目录/*
扩展名匹配 *.abc(扩展名)
缺省servlet的配置:将url-pattern配置一个/
当你访问资源地址与所有的servlet都不匹配时,缺省的servlet就会处理
其实,web应用中所有的资源的响应都是servlet负责,包括静态资源
配置实例化servlet的时间
servlet默认的是第一次访问的时候执行init()方法,可以配置一个<load-on-startup>使服务器启动后就实例化
<!-- servlet类的配置 --> <servlet> <display-name>FirstServlet</display-name> <servlet-name>FirstServlet</servlet-name> <servlet-class>servlet温习.FirstServlet</servlet-class> <!-- 运行起来3秒后,执行相应的init方法 --> <load-on-startup>3</load-on-startup> </servlet>
欢迎页面的配置
<welcome-file-list> <welcome-file>1.html</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
4.掌握servlet的生命周期(API),理解servlet的执行过程
https://www.cnblogs.com/lgk8023/p/6427977.html
总的来说就是用servlet接口中的那三个api来表示init() service(),destroy(),分为四个阶段:加载和实例化,初始化,请求处理,服务终止
问题:对XXXServlet进行了10次访问,init(),destory(),service(),doGet(),doPost() 一共执行力多少次?request对象创建几个?response创建几个?
Servlet接口中的方法
init(ServletConfig config)
service(ServletRequest request,ServletResponse response
destroy()
HttpServlet类的方法
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
3)doPost(HttpServletRequest request,HttpServletResponse response)
4)destroy()
Servlet获取请求的过程
在解析请求的资源地址时干的事
5.掌握ServletContext对象
ServletContext对象是一个全局域对象,代表着web应用环境的上下文,其代表着web应用。servlet对象可以有很多个但是servletContext对象只能有一个因为其对应的web项目只有一个
ServletContext的生命周期:
创建:在web应用创建后,它就创建了
销毁:在web应用销毁后,它也就销毁了
重点掌握几个api的应用:
获取servletContext对象
1)ServletContext servletContext = config.getServletContext();
2)ServletContext servletContext = this.getServletContext();
servletContext对象的作用
web.xml中配置初始化参数
通过context对象获得参数
获取资源的绝对路径
方法:
String path = context.getRealPath(相对于该web应用的相对地址);
ServletContext是一个域对象
ServletContext域对象的作用范围:整个web应用(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)
域对象的通用的方法:
setAtrribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);
package servlet温习.demo2; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServerContext1 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取ServerContext对象 ServletContext context = this.getServletContext(); //1.获取初始化的参数 String parameter = context.getInitParameter("driver"); System.out.println(parameter); //2.获取a.txt String path1 = context.getRealPath("WEB-INF/a.txt"); System.out.println(path1); //3.获取c.txt String path2 = context.getRealPath("WEB-INF/classes/c.txt"); System.out.println(path2); //4.获取d.txt String path3 = context.getRealPath("d.txt"); System.out.println(path3); //设置值 context.setAttribute("name", "zhangsan"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }