Servlet的概念
①Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。Servlet与Web服务器的关系类似于Applet与Web浏览器的关系(这也是为什么Servlet技术被称为Servlet的原因),我们可以将Servlet想象成没有前端界面(faceless)的Applet。
②服务器端动态处理常见技术
CGI(common gateway interface)公共网关接口
PHP(HyperText PreProcessor)超文本预处理器
ASP(Active server page)活动服务器页面
Servlet(JSP-java server page)java服务器页面
③在Servlet中,修改web.xml、servlet类都要重新启动tomcat服务器才能生效
Servlet 的对象创建和生命周期
Servlet 是一个Java 类,该类要运行必须创建对象。
问题:
①由谁创建?
答:由读取web.xml 文件的服务器软件来进行创建。
②何时创建Servlet 对象?
(1)web程序,服务器端只有一个,但是访问的客户端数量没有办法控制
(2)客户端访问的时间没有办法限制。
在Tomcat服务器端,一个Servlet类一次只创建一个Servlet对象,该对象通过线程(对用户使用该Servlet的时间进行分段)使用
浏览器端 | 服务器端 |
---|---|
www.taobao.com/search | s = new SearchServlet() |
③该Servlet 对象创建的时间有两个:
(1)服务器启动时创建,多出现在项目运行阶段,会检查所有当前服务器上的项目,检测项目中web.xml文件,在检测的同时,看到,就会自动的创建对象,并且保持在内存中。
(2)当用户第一次访问服务器上一个新的Servlet时,在开发过程中。
④生命周期:
Servlet生命周期:指Servlet对象在服务器内存中从创建到调用,到销毁的整个过程,主要研究该过程中哪些方法对我们的开发有用。
(1)实例化:当客户端通过URL请求的时候,web容器根据web.xml配置自动调用该Servlet的构造方法,实例化对象。
(2)初始化:通过该servlet对象调用init()方法,读取web.xml中该servlet的配置信息,为service方法提供相关数据。
(3)服务:通过该对象调用service()方法,如果是继承HttpServlet,则根据请求头信息中的请求方法,调用对应的doGet()/doPost()
(4)销毁:不是在service()方法调用完后,立即调用,而是由JVM来决定。当JVM需要销毁一些对象、释放内存空间的时候,才会去调用该实例的destroy()方法。
3. Servlet 中的常用对象
①
Interface:
javax.servlet.Servlet
Mothd:
init(ServletConfig config)
service(ServletRequest req, ServletResponse res)
destroy()
public ServletConfig getServletConfig();//得到 web.xml 中的配置信息
②abstract Class:
⑴javax.servlet.GenericServlet
//重写父接口中的所有方法
//从web.xml文件中得到初始化参数的值
String getInitParameter(String name)
//代表web.xml配置文件
public ServletConfig getServletConfig()
//代表服务器中该项目的访问路径(上下文对象即项目名)
public ServletContext getServletContext()
⑵javax.servlet.http.HttpServlet
doXXXX()
//返回上次修改 HttpServletRequest 对象的时间,该时间是自格林威治标准时间1970年 1月1日午夜起经过的毫秒数
protected long getLastModified(HttpServletRequest req)
③HttpServletRequest(interface) 实现了ServletRequest接口,为 HttpServlet提供请求信息.在 HTTP 协议中,规定了很多信息:请求头信息、请求内容。
http://localhost:8080/servlet/index.jsp
http: request.getScheme();
localhost: request.getServerName();
8080: request.getServerPort();
/servlet: request.getContextPath();
/index.jsp request.getServletPath();
/servlet/index.jsp: request.getRequestURI();
完整请求路径: request.getRequestURL();
IP 地址: request.getLocalAddr();
④HttpServletResponse(interface):代表服务器向浏览器返回的响应直接输出内容到浏览器,使用Servlet输出HTML页面
PrintWriter out = response.getWriter();
out.print(“Hello :”);
设置响应的内容类型:
response.setContentType(“text/html; charset=UTF-8”);
注意:使用response对象跳转,可以跳到项目外的一个URL资源上
如:response.sendRedirect(“http://www.csdn.net”);
使用request对象跳转,只能在本项目资源中跳转
如:request.getRequestDispatcher(“url”).forward(request,response);
告诉浏览器不要缓存页面:
转自:
http://blog.163.com/magicc_love/blog/static/1858536622012983519998/