一、Servlet
1.servlet概述
Servlet就是一个java程序,运行在服务器端.进行创建,运用和销毁
2.编写Servlet的步骤
a、建立一个web project
b、编写一个Servlet,需要实现javax.servlet.Servlet接口
c、映射Servlet
给Servlet程序一个可以访问的URL地址。通过修改web.xml来实现
d、部署应用到Tomcat服务器
3.执行过程
4.Servlet生命周期
- 诞生:第一次被访问,由容器创建对象的实例;并接着调用ini(ServletConfig cfg)方法进行初始化
- 活着:应用活着它就活着。Servlet的一个实例是单例的。
- 死亡:应用被卸载时,由容器调用destroy()方法。
Servlet接口:与Servlet生命周期有关的方法
void init(ServletConfig cfg):初始化
void service(ServletRequest req,ServletResponse res);
void destroy()
改变Servlet的初始化时机:
默认:第一次访问。<load-on-startup>-1
改为:应用被服务器加载时就完成实例化和初始化.web.xml
`<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
<load-on-startup>2</load-on-startup><!--1已经被使用了,需要使用2或者2以后的数字-->
</servlet>`
5.Servlet的线程安全
- 尽量不要使用实例变量。应该使用局部变量。
- 如果必须用到实例变量,请做好同步处理。
6.默认Servlet(了解)
如果一个Servlet的映射地址是一个”/”,那么这个Servlet就是默认的Servlet。
默认的Servlet用于处理在web.xml找不到映射的所有请求。
不要自己映射默认的Servlet。在Tomcat\conf\web.xml有配置。
7、Servlet映射细节
- 一个Servlet的实例可以被映射到多个访问的地址上
servlet的映射可以使用通配符:*
- 方式一:以*开头,以某个扩展名结尾
- 方式二:以/开头,以*结尾(优先级高)
二、Servlet规范的核心类图
三、ServletConfig
- 作用:针对某个Servlet程序进行参数配置。每一个Servlet都有自己的ServletConfig实例。
- 怎么得到:在初始化Servlet时,服务器会创建ServletConfig的实例,并传递给Servlet对象。
实例: 为某个Servlet配置参数:修改web.xml
//配置web.xml
<init-param>
<description>配置初始化参数</description>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
//读取指定的参数
ServletConfig con = getServletConfig();
String encoding = con.getInitParameter("encoding");
if (encoding==null) {
encoding="utf-8";
}
System.out.println("当前编码:"+encoding);
//读取所有参数
Enumeration<String> e = con.getInitParameterNames();
while (e.hasMoreElements()) {
String paraName = (String)e.nextElement();
System.out.println("参数名:"+paraName+" 参数值:"+con.getInitParameter(paraName));
}
四、ServletContext
1. 作用:代表一个javaweb应用
2. 生命周期
- 诞生:应用一旦被加载,服务器就会创建ServletContext的实例。
- 活着:应用不挂,它就存在。
- 死亡:应用挂了,他就死亡了。
3.具体应用
a、 实现Servlet之间的数据共享
概念:域(范围)对象。向ServletContext中存放的属性,存活范围就是应用范围。ServletContext叫做应用范围的域对象。
方法:
void setAttribute(String name,Object value):向域对象中存属性
Object getAttribute(String name):从域对象中取属性
void removeAttribute(String name):从域对象中删除属性
b、获取WEB应用的初始化参数
配置全局参数:web.xml
<context-param> <param-name>encoding</param-name> <param-value>gbk</param-value> </context-param> <context-param> <param-name>aaa</param-name> <param-value>bbb</param-value> </context-param>
获取全局参数:用ServletContext
//获取某个参数 ServletContext context = getServletContext(); String paraName = context.getInitParameter("aaa"); System.out.println(paraName); //获取所有参数 Enumeration<String> paraNames = context.getInitParameterNames(); while (paraNames.hasMoreElements()) { String paraName1 = (String) paraNames.nextElement(); System.out.println("参数名:"+paraName1+"参数值:"+context.getInitParameter(paraName1)); }
实现Servlet的转发。
客户端————>Demo1————>Demo2
我找你借钱,你没钱,你找他借钱给我读取各种配置文件的方式