一,servlet概述
就是一个java类,是javweb的规范之一,也是三大组件之一(serlvet,listener,filter)
作用:负责接收用户的请求以及做出响应。(之前是由doXxx.jsp)
快速入门:
实现servlet接口 不常用
继承HttpServlet抽象类 doGet doPost
完成servlet文件的编写后必须要实现配置
2种方式
注解 @webServlet("/路径")
web.xml中进行配置
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>com.zking.AServlet</servlet-class></servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/xxx.do</url-pattern>
</servlet-mapping
JSP中的内置对象对应Servlet中的什么对象
JSP Servlet
request serivce(request,response) doPost(request,response)
session request.getSession HttpSession
applicaiton this.getServletContext(); ServletContext
out response.getWriter() PrintWriter
Cookie Cookie
servlet中2个重要对象
ServletConfig配置对象
ServletContext全局对象
都是获取web.xml中的参数问题。
编码的问题
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
如何在serlvet中获取到当前项目的绝对路径
这里的绝对路径指的是基于项目的根目录而不是基于磁盘。
String path = this.getServletConfig().getServletContext().getContextPath();
/项目名称
path+"/index.jsp"
jsp内置对象 servlet中java对象 获取
request HttpServletRequest service方法中的req参数
response HttpServletResponse service方法中的resp参数
session HttpSession req.getSession()
exception Throwable
page this this
pageContext PageContext
application ServletContext getServletContext()
config ServletConfig getServletConfig()
out JspWriter resp.getWriter()
二,Servlet概述
1.1 什么是servlet?
servlet是JavaEE的规范(接口)
Server Applet;servlet是javaweb的三大组件之一,它属于动态资源。servlet的作用是处理请求,服务器会把接收到的请求交给servlet来处理,在servlet通常需要:
接收请求数据
处理请求
完成响应
例如客户端发出登录请求,或者输出注册请求,这些请求都应该有servlet来完成处理!servlet需要我们自己来编写,每个servlet必须实现javax.servlet.Servlet接口。
servlet执行原理
(1)当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
(2)查找web.xml文件,是否有对应的<url-pattern>标签体内容。
(3)如果有,则在找到对应的<servlet-class>全类名
(4)tomcat会将字节码文件加载进内存,并且创建其对象
(5)调用其方法
1.2 实现servlet的方式
实现servlet有三种方式:
实现javax.servlet.Servlet接口;
继承javax.servlet.GenericServlet类;
继承javax.servlet.http.HttpServlet类;
通常会继承HttpServlet类来完成我们的Servlet。
Servlet接口详解
public interface Servlet{
public void init(servletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse resp) throws ServletException,IOException;
public String getServletInfo();
public void destory();
}
1.3 servlet的生命周期
问题:当servlet被编写完成后,如何让浏览器访问servlet呢?
给servlet指定一个servlet路径!(让servlet与一个路径绑定在一起)
浏览器访问servlet路径
给servlet配置servlet路径,需要在web.xml中对servlet进行配置。
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>com.zking.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/xxx.do</url-pattern>
</servlet-mapping>
生命周期方法
void init(ServletConfig):出生之后(1次)
void service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用
void destory():临时之前调用(1次)
【总结】servlet由我们编写,但对象由服务器来创建,并且由服务器来调用相应的方法。
1.4 HttpServlet
HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
创建HttpServlet步骤
继承HttpServlet抽象类
重写HttpServlet的部分方法,如doGet()或doPost()方法
获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串
生成HTTP响应结果。通过HttpServletResponse对象生成响应结果
HttpServlet的实现由两种方式
实现方式一:.xml配置实现
A.配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复)
B.继承HttpServlet抽象类
C.重写get()、post()方法
实现方式二:注解实现
直接在Package包下新建Servlet
1.5 ServletConfig
1.5.1 快速入门
概述
ServletConfig是Servlet的配置参数对象,在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置,所以每一个Servlet都有一个ServletConfig。
作用
当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init()方法传入一个ServletConfig对象,即传入一些配置信息给Servlet。
生命周期
应用一加载则创建,应用停止则被销毁;
创建时间
创建完Servlet对象时,接着创建。Servletconfig对象
常用方法
返回值 方法名 说明
String getInitParameter(String name) 根据参数名称获取参数的值
Enumeratin<String> getInitParameterNames() 根据所有参数名称的枚举
String getSevletName() 获取servlet的名称
ServletContext getServletContext() 获取servletContext对象
1.5.2 ServletConfig的配置方式
在<servlet>标签种,通过<init-param>标签来配置。有两个子标签: <param-name>:代表初始化参数的key。 <param-value>: 代表初始化参数的value
1.6 ServletContext
1.6.1 ServletConText介绍
概述:ServletContext对象是一个应用上下文对象,也是一个域对象。表示Servlet应用程序,每个web应用程序都只有一个ServletContext对象。
ServletContext对象的作用
有了ServletContext对象,就可以共享从应用程序中的所有资源访问到的数据信息,并且可以动态注册web对象。
可以获得应用域的全局初始化参数,以及达到Servlet之间的数据共享;
可以作为域对象在整个应用中共享数据;域对象即在一定的作用范围内实现资源共享;
可以用来获取应用中的资源在服务器上的绝对路径;
获取文件的mime类型: 在网络传输中,并不是以扩展名来区分文件的类型,都是以mime类型;如:text/html;表示一个html文件。
生命周期: 应用一加载则创建,应用被停止则销毁
创建时间: 加载web应用时,创建ServletContext对象。
域对象
域对象指的是对象有作用域,即有作用范围。域对象可以实现数据的共享,不同作用范围对象,共享数据的范围能力也不同。
在Servlet规范中,一共有4个域对象。其他三个是:request请求域,PageContext页面域,session会话域。ServletContext就是其中的一个。是web应用中最大的作用域,也叫application应用域,可以实现整个应用之间的数据共享!
常用方法
返回值 方法名 说明
void setAttribute(String name,Object value) 向域对象中存储数据
Object getAttribute(String name) 通过名称获取域对象中的数据
void removeAttribute(String name) 通过名称移除域对象中的数据
Enumeration<String> getAttributeNames() 获取域对象中所有数据的名称
String getSevletContextName() 获取servletContext的名称
String getContextPath() 获取当前应用的访问虚拟目录
String getServletInfo() 获取服务器名称和版本信息
String getInitParameter(String name) 根据名称获取全局配置的值
Enumeration<String> getInitParameters() 获取全局配置的所有名称
String getRealPath(String path) 根据虚拟目录获取应用部署额磁盘绝对路径
1.6.2 ServletContext配置方式
ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;
在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签: <param-name>: 代表全局初始化参数的key。 <param-value>: 代表全局初始化参数的value。