- 浏览: 125491 次
- 性别:
- 来自: 深圳
文章分类
最新评论
我们编写的Servlet一般继承HttpServlet
要查看HttpServlet的源码需到tomcat网站上下载
http://tomcat.apache.org/download-60.cgi
选择下载最下方的Source Code Distributions 的zip文件,下载后解压,能过eclispe的关联,关联到
apache-tomcat-6.0.32-src\apache-tomcat-6.0.32-src\java目录
如下代码所示:HttpServlet.java
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request; HttpServletResponse response; try { request = (HttpServletRequest) req; response = (HttpServletResponse) res; } catch (ClassCastException e) { throw new ServletException("non-HTTP request or response"); } service(request, response); }
转换完毕后,会调用HttpServlet类中自己定义的service方法,如下所示:
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
所谓请求的方法名:是指HttpServlet类中的getMethod方法,根据http协议来获得的,比如http的get协议或post协议等。
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); if (method.equals(METHOD_GET)) { long lastModified = getLastModified(req); if (lastModified == -1) { // servlet doesn't support if-modified-since, no reason // to go through further expensive logic doGet(req, resp); } else { long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE); if (ifModifiedSince < (lastModified / 1000 * 1000)) { // If the servlet mod time is later, call doGet() // Round down to the nearest second for a proper compare // A ifModifiedSince of -1 will always be less maybeSetLastModified(resp, lastModified); doGet(req, resp); } else { resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } } } else if (method.equals(METHOD_HEAD)) { long lastModified = getLastModified(req); maybeSetLastModified(resp, lastModified); doHead(req, resp); } else if (method.equals(METHOD_POST)) { doPost(req, resp); } else if (method.equals(METHOD_PUT)) { doPut(req, resp); } else if (method.equals(METHOD_DELETE)) { doDelete(req, resp); } else if (method.equals(METHOD_OPTIONS)) { doOptions(req,resp); } else if (method.equals(METHOD_TRACE)) { doTrace(req,resp); } else { // // Note that this means NO servlet supports whatever // method was requested, anywhere on this server. // String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[1]; errArgs[0] = method; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg); } }
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String protocol = req.getProtocol(); String msg = lStrings.getString("http.method_get_not_supported"); if (protocol.endsWith("1.1")) { resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg); } else { resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); } }
PS:request中的setAttribute,getAttribute是由HashMap实现的
Servlet核心API之间的关系UML图
新建一个InitServlet.java,在启动TOMCAT后,第一次访问InitServlet时,init invoked会被调用。
package com.test.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class InitServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get invoked"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { super.doPost(request, response); } public void init() throws ServletException { System.out.println("init invoked"); } }
在工程的Web.xml配置文件中,加入如下<load-on-startup>配置信息,表示在服务器启动时,会自动装载该Servlet
<servlet> <servlet-name>InitServlet</servlet-name> <servlet-class>com.test.servlet.InitServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet>
在启动服务器时,会打印出如下信息
注意上图中的:在Servlet被修改,重新加载后重新调用一次destroy,再执行init。
ServletContext从session中取出,如下
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = request.getSession().getServletContext(); if(null == context.getAttribute("count")){ context.setAttribute("count", "1"); }else{ int count = (Integer)context.getAttribute("count"); context.setAttribute("count", count+1); } }
发表评论
-
深入研究Servlet线程安全性问题(转)
2012-11-21 00:13 732http://www.yesky.com/334/195133 ... -
Web开发20:Http详解
2011-07-31 02:01 1116所谓无状态是指你发 ... -
Web开发19:自定义标签库
2011-07-24 21:55 680所谓上层标签就如下面的bbb标签 ... -
Web开发18:EL表达式
2011-07-24 19:38 707f -
Web开发17:Servlet监听器
2011-07-24 00:01 1402写了一个MyServletContextList ... -
WEB开发 16:Servlet Filter
2011-07-23 16:37 1317doFilter方法中有一个Fil ... -
Web开发15:Session在实际项目中的应用
2011-07-22 23:50 1158写一个登录例子: 用户在login.jsp页面登录,如果用户 ... -
Web开发14:Session
2011-07-19 00:52 1174当客户端浏览器第一次访问时,会在服务器的Servl ... -
Web开发13:Cookie
2011-07-17 23:31 850下面是个简单的例子,演示在客户端添加Coo ... -
Web开发12:Servlet多线程同步问题详细探寻
2011-07-17 22:50 1121下面看一个具体的 ... -
Web开发10:对复杂表单进行客户端服务端验证
2011-07-16 19:27 980对上面这个用户基本信息页面进行客户端与服务器端的验证,下面 ... -
Web开发9:JavaBean
2011-07-16 00:05 446具体实例: 写一个JAV ... -
Web开发8:使用JavaScript与Servlet实现客户端与服务器端验证
2011-07-14 23:30 1109下面写一个注册页面 register.jsp,主 ... -
Web开发7:请求转发与重定向的区别
2011-07-13 22:11 1070需注意的是:所谓重 ... -
Web开发6:JSP内置对象比较与分析2
2011-07-11 21:25 975先看个小例子: request1.jsp <%@ p ... -
Web开发5:JSP内置对象比较与分析
2011-06-24 00:21 962内置对象与J2EE类的映射 以下是reques ... -
Web开发4:JSP转换为Servlet源代码深度解析
2011-06-22 00:20 1470JSP的注释写法是:<% ... -
Web开发3:Tomcat根据JSP生成Servlet机制深度剖析及核心源代码详解
2011-06-21 00:10 16971:什么是JSP(Java Server Pages): 在 ... -
Web开发2:第一个Servlet程序深度剖析,Web.xml文件深入详解
2011-06-19 14:28 24441,新建一个WEB工程:servletTest 在工程目录下 ... -
Web开发1:Tomcat环境配置
2011-06-15 23:40 837从http://tomcat.apache.org/获取T ...
相关推荐
如何向客户端发送响应 知道如何解决web开发中的中文乱码问题,知道乱码问题产生的原因和解决方法 会debug服务端代码 什么是Servlet Servlet是Java web应用中最核心的组件,完全用Java语言编写,它运行于服务端,它...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part46
这个压缩包中的资源,"零基础学Java.Web开发:JSP Servlet Struts Spring Hibernate Ajax(PPT)",旨在为初学者提供一个全面的学习路径,从基础的网页编程到复杂的框架应用。 1. **JavaServer Pages (JSP)**: JSP是...
- **Web开发**:Java Servlet和JavaServer Pages (JSP)是构建动态网站的核心技术。 - **大数据技术**:Java在Hadoop等大数据技术栈中占据重要地位。 - **桌面应用**:JavaFX为构建富客户端应用程序提供了API。 - **...
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part21
本资料集合了"零基础学Java_Web开发:JSP+Servlet+Struts+Spring+Hibernate+Ajax",涵盖了从初级到进阶的重要概念,帮助初学者系统地掌握Web开发技能。 1. **JSP(JavaServer Pages)技术**: JSP是Java平台上的...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part42
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part02
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part08
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part54
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part57
"java web Servlet" Java Web Servlet 是一种基于 Java 语言的服务器小应用程序,主要用于处理客户端请求的响应处理。Servlet 是一个独立的平台,具有良好的性能和多线程运行能力。 Servlet 的主要特点是: * ...
本压缩包"Java.Web开发JSP Servlet Struts Spring Hibernate Ajax.rar"显然包含了几个关键的Java Web开发技术,包括JSP(JavaServer Pages)、Servlet、Struts、Spring、Hibernate以及Ajax。以下是对这些技术的详细...
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part69
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part12
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part63
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part60
JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part33