1.什么是servlet
Servlet是sun公司提供的一门用于开发动态web资源的技术。servlet 基于request - response 请求模型 (http协议) Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口。 2.把开发好的Java类部署到web服务器中。
servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。
使用servlet的基本流程如下:
·客户端(很可能是Web浏览器)通过HTTP提出请求。
·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
·servlet将接收该HTTP请求并执行某种处理。
·servlet将向Web服务器返回应答。
·Web服务器将从servlet收到的应答发送给客户端。
2.servlet的优点
■servlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。
■servlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet自然也具备了这些特征。
■servlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。
3.servet对URL的匹配过程
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了
4.servlet生命周期
Servlet 的生命周期始于将它装入 Web 服务器的内存时,并在终止或重新装入 Servlet 时结束。包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由 javax.servlet.Servlet 接口的 init, service 和 destroy 方法表达。
描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来定义的服务器实例化一个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGet,doPost)方法,当服务器决定将实例销毁时调用其destory方法
5、Servlet和Jsp的区别?
Servlet是直接执行的文件,Jsp是要被通过编译形成Servlet后才执行。
6.servlet继承体系
7.servlet的线程安全问题
不要在servlet中写成员变量
8.何让Servlet在服务器启动时,加载创建对象(servlet优化)
9.四大共享范围
a、page 当前页面。
b、session 同一个用户内。
c、request 从上一页到下一个页面。
d、application 同一个网站内。
10.servletContext对象
应用一:全局初始化参数配置 (所有Servlet都可以访问)
* 和ServletConfig 配置初始化参数 区分开
1) 配置全局初始化参数(在web.xml的一个servlet中写):
<!-- 全局初始化参数 -->
<context-param>
<param-name>name</param-name>
<param-value>张三</param-value>
</context-param>
2) 获得ServletContext对象 ServletContext context = getServletContext();
3) 通过 String getInitParameter(String name) 获得全局参数
应用二:多个Servlet之间可以共享数据 (ServletContext唯一的)
共享全局唯一数据 :站点访问次数、数据库连接池 ,static
setAttribute(name,object)
getAttribute(name)
应用三:读取web工程中资源文件
在day5工程中创建四个文件
1、在day5工程根目录 创建 1.txt
2、在WebRoot下 创建2.txt
3、在WEB-INF下 创建3.txt
4、在src下创建 4.txt
1.txt因为在WebRoot 外面 不会发布到tomcat服务器,无法端读取
2.txt --- > getServletContext().getRealPath("/2.txt");
3.txt --- > getServletContext().getRealPath("/WEB-INF/3.txt");
4.txt 位于src下,复制到WEB-INF/classes下 ---> getServletContext().getRealPath("/WEB-INF/classes/4.txt");
11.servletConfig对象
Servlet的初始化 init :
init(ServletConfig) ----- ServletConfig 对象 Servlet配置对象,用来在Servlet初始化阶段向Servlet传递信息
* GenericServlet中将 ServletConfig对象保存成员变量,同时提供getServletConfig方法
* 自定义Servlet中 通过 getServletConfig() 获得ServletConfig 对象
String getInitParameter(String name) 根据参数名称 获得 值
企业级应用: load-on-startup 结合 init-param 使一个Servlet在服务器启动时执行初始化,第一时间加载配置文件 ====> Struts 框架
struts1中应用
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/struts-config.xml,
/WEB-INF/struts-config-Wildcard.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
*** ServletConfig 配置参数 相当于当前Servlet 局部变量,无法被其它Servlet访问的
12.Servlet的基本架构
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request,HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws
ServletException, IOException {
}
}
13.统计网站实现次数
思路:
具体代码实现: