1.Servlet:
Servlet (Servler Applet),是使用 Java 语言编写的运行在服务器端的程序,用于处理服务器端应
用程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内
容.通常来说,Servlet 是指所有实现了 Servlet 接口的类,Servlet 主要用于处理客户端传来的 HTTP
请求,并返回一个响应,它能够处理的请求有 doGet () 和 doPost () 等,Servlet 由 Servlet 容器提
供,Servlet 容器是指提供了 Servlet 功能的服务器(如Tomcat).
Servlet本质: 必须运行在web容器上(tomcat)
<1>狭义上的Servlet就是接口---里面规定Servlet的生命周期
<2>广义上的servlet就是类,这个类(具体类)最终要实现接口Servlet
2.Tomcat服务器的好处:
tomcat是轻量级的web应用服务器, 他的好处主要有:
(1)处理servlet的映射路径,解析Servlet
(2)处理Servlet的生命周期
(3)Tomcat服务器是开源的,底层是一种针对ip监听的TCP,有"数据共享"功能注意:Tomcat是web容器,内置了三大组件:<servlet: (重点) filter:过滤器 (重点) Listener:监听器>
2.1使用步骤:
1.导包 <servlet-api.jar(tomcat里面内置的) ---tomcat解压目录的lib中>
2.编写servlet程序
自定义一个类,继承自HttpServlet,重写 doGet()/doPost()
3.配置Servlet <Web项目下的WEB-INF ,网站的配置文件 web.xml>
//基本配置
<servlet>
<servlet-name>MyServlet</servlet-name> //serlvet的名称
<servlet-class>包名.MyServlet</servlet-class> //servlet的全限定名称
</servlet>
//映射配置
<servlet-mapping>
<servlet-name>MyServlet</servlet-name> //serlvet的名称
<url-pattern>/myServlet</url-pattern> //映射路径
</servlet-mapping>
2.2servlet执行原理
1)用户发送请求到服务器 http://localhost:8080/web上下文路径/xxxServlet
2)web容器 解析路径URI的一部分: /xxxServlet
web.xml文件中找是否存在映射路径为 /xxxServlet ----->找到你当前servlet-name的类名
后面都是web容器完成的!
3)获取到serlvet基本配置信息里面的servlet-class:当前这个类的全限定名称
4)反射技术:Class.forName("全限定名称")---->Class clazz
5)创建当前类实例:clazz.newInstace() --->Object obj
6)获取它的成员方法的Method类对:clazz.getDeclaredMethod("doXXX",HttpServletRequest.class,
HttpServletResponse.class) ;---->Method m
m.setAccessiable(true) ;//取消Java语言访问检查
7)调用方法
m.invoke(obj,request,response)
2.3servlet生命周期
web容器--->tomcat服务器完了对象的创建,访问servlet的时候创建,就创建一次,所以是单例的.
1.init()方法: 初始化方法只执行一次
2.service方法: 业务方法的入口,由于不断的发送get/Post请求,需要调用service方法多次
3.destroy()方法: servlet的销毁方法,servlet正常关闭时执行此方法
2.4servlet配置对象ServletConfig接口
Servlet的对象: ServletConfig代表每一个Servlet的配置对象,可以获取当前Servlet基本配置信息和
当前这个servlet里面配置的初始化参数等.
1.获取ServletConfig对象
public ServletConfig getServletConfig(); <this.getServletConfig()>
2.使用ServletConfig对象获取Servlet基本配置信息
(1)获取servlet配置名称: config.getServletName();
(2)获取初始化参数<init-param>
<1>public String getInitParameter(String name): 一次只能获取一个初始化参数;通过初始化的参数
名称获取它的参数值
<2>public Enumeration<String> getInitParameterNames(); 将所有的servlet的初始化参数名称都
可以获取
2.5Servlet全局对象ServletContext接口
注意:每个工程下只有一个全局对象
1.获取上下文路径
每一个web项目---web application都有自己的上下文(以/字符开头但不以/结尾); web项目下书写路
径的时候,将上下文路径带上,永远不会出现找不到页面404错误.
方法1:
<1>获取ServletContext对象
this.getServletContext();
<2>获取 Web 应用程序的上下文路径
public String getContextPath()
方法2:
发送请求到服务器的时候,所有的请求参数都封装在了HttpServletRequest
利用HttpServletRequest对象的方法: public String getContextPath()
request.getContextPath();
2.可以获取全局参数<context-param>
<1>获取ServletContext对象
this.getServletContext();
<2>获取全局参数
public String getInitParameter(String name):通过全局参数的名称获取参数值
public java.util.Enumeration<E> getInitParameterNames():获取所有的全局参数名称
3.请求转发 (后台跳转前台页面 html/jsp....)
请求转发是一种在服务器内部的资源跳转方式
(1)使用步骤
<1>获取全局对象 ServletContext
<2>通过全局对象获取请求转发器对象
public RequestDispatcher getRequestDispatcher(String path)
<3>通过RequestDispatcher对象进行转发
public void forward(ServletRequest request, ServletResponse response):
简化格式:
request.getRequestDispatcher("/login.html").forward(request,response);
(2)请求转发的特点
<1>地址栏没有变化,始终访问后台地址
<2>整个请求转发的过程中,两次请求request是相等的
<3>WEB-INF下的资源文件直接访问不了,但是请求转发可以访问
<4>请求转发只能访问当前项目下资源文件,不能跨工程访问外部资源
4.作为 "域对象"共享数据,在不同的servlet之间进行数据共享
域对象概念:
一个有作用范围的对象,可以在范围内共享数据
(1)四个域对象的范围:
PageContext类 pagecontext对象 仅仅在某一个jsp页面中有效
HttpServletRequest接口 request对象 在一次请求中有效
HttpSession接口 session对象 在一次会话中有效
ServletContext接口 全局对象context对象/application 整个web application中有效(整个工程下)
(2)通用方法:
<1>给当前servletContext域对象中设置参数,将任何对象绑定在指定的属性上
public void setAttribute(String name, Object object)
<2>通过绑定的属性获取内容
public Object getAttribute(String name)
<3>将指定属性中绑定内容从域对象中删除
public void removeAttribute(String name)
(3)使用步骤:
<1>访问当前Servlet,获取全局对象
<2>存储数据
public void setAttribute(String name, Object object)
<3>从当前全局对象中(域对象),通过绑定的属性获取内容
public Object getAttribute(String name)