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);
} }