Servlet是运行在Web服务器或应用服务器上的java程序,它是一个中间层,负责连接来自web浏览器或其他HTTP客户程序和[HTTP服务器]上应用程序
Servlet执行下面的任务:
1)读取客户发送的显示数据。
2)读取由浏览器发送的隐式请求数据。如: http请求头
3)向客户端发送显示数据。servlet和jsp最重要的任务就是将结果包在文本(htm7)、二进制(图片)等格式的文件中。
4)发送隐式的HTTP响应数据。如: http响应头
Servlet生命周期
Servlet的生命周期指的是Servlet从创建到销毁的过程:
(1)当一个请求从HTTP服务器转发给servlet容器时,容器会检查对应的Servlet是否创建,如果没有创建就实例化该Servlet,并调用init()方法,inint()方法只调用一次,后续的请求都从第二步开始;
(2) servlet每收到一个请求,就会调用一次service()方法,根据请求类型调用对应的方法,doGet、doPost等;
(3) servlet销毁前调用一次destroy()方法进行清理操作,该方法只调用一次,随后JVM回收资源。
web启动执行init()方法且只执行一次,每次请求都会执行service方法,项目结束执行destroy方法。
配置Servlet
①在xml中配置
<servlet><servlet-name>Demo</servlet-name><servlet-class>com.exa.Demo5 </servlet-class>
<init-param><param-name>name</param-name><param-value>123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Demo5</servlet-name>
<url-pattern>/demo5</url-pattern>
</servlet-mapping>
②注解
在以前的servlet中我们初始化一些参数都是配置在web.xml中的,自从servlet3.0之后给我们提供了注解@WebServlet和@WeblnitParam,@WebServlet是用来配置servlet的属性的,@WeblnitParam是用来配置一些初始化属性的。
@WebServlet(name = "Demo",urlPatterns = {"/demo"},initParams = {@WebInitParam(name = "name",value = "me")
})
public class Servlet1 extends HttpServlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {this.config=servletConfig;}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html");PrintWriter out = resp.getWriter();String pValue = getServletConfig().getInitParameter("name");out.println(pValue);out.close();}
}
ServletConfig代表当前Servlet在web.xml中的配置信息。
当servlet引擎创建一个servlet实例对象后,调用该实例对象的init(ServletConfig config)方法将Servlet对象传递给Servlet。
@Overridepublic void init(ServletConfig servletConfig) throws ServletException {String name = servletConfig.getInitParameter("name");System.out.println(name);}
二.HttpServletRequest
Tomcat会把收到的HTTP请求按照HTTP协议的格式解析成一个HttpRequest对象。
三、HttpServletResponse
Servlet中的doXXX方法会根据请求计算响应,并把响应的数据设置到HttpResponse对象中,然后Tomcat就会把这个HttpResponse对象通过Socket写回给浏览器。
四、ServletContext
它代表了一个 Web 应用程序的环境上下文。每个 Web 应用程序都有一个唯的 ServletContext
,它在应用程序启动时被创建,在应用程序关闭时被销毁。ServletContext
存储了应用程序的上下文信息,并且为整个应用程序提供了一个共享的存储空间,使得 servlet 能够共享数据和资源。 servletcontext中的属性的生命周期从创建开始,到服务器关闭结束。
1.如何得到对象
servletcontext context = this.getservletcontext();
⒉方法
添加属性: setAttribute(string name,object obj);
得到值: getAttribute(string name),这个方法返回object
删除属性: removeAttribute(string name)
获取服务器真实文件路径:
context.getRealPath("路径+文件名");
servletcontext.getRealPath(" /img/a.png");
请求转发
请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。转发后浏览器地址栏内容不变。
请求重定向
重定向是A找B帮忙,B做不了,让A去找C帮忙;且可以重定向到其他项目中去。重定向是两次请求,转发是同一次请求。
重定向浏览器地址栏的URL改变;而转发浏览器地址栏的URL不变。
重定向传输的信息会丢失; req.setAttribute("user" ,user);,这是将数据存储到请求域中,它只能在一次请求中存在,因此在请求转发中可以共享数据,而在重定向中是无法进行数据共享的;
session对象重定向时,session数据不会丢失
重定向可以跳转到第三方服务器