在Servlet技术中,HttpServlet可谓是一个核心类,在熟练运用的同时,我们还要透彻的分析其底层的工作原理,这样对于我们的实际中的开发,和日后的学习,都有非常大的帮助。HttpServlet是一个继承了GenericServlet的抽象类。主要是应用于Http协议的请求和响应。当容器接收到一个针对HttpServlet对象的请求时,调用该对象的方法顺序如下:
1.公共的service();
2.在公共的
service(ServletRequest req, ServletResponse res)方法中,首先将参数类型转换为HttpServletRequest和HttpServletResponse,然后再调用受保护的
service(HttpServletRequest req, HttpServletResponse resp)方法,并将转换后的参数传递进去。
*注意,我用红体标注的这两个方法,在HttpServlet中有两个service()方法,其中一个是最先调用的公共的
public void service(ServletRequest req,ServletResponse res)throws ServletException,IOException,然以,在参数转换完以后会调用
protected void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException。千万不要弄混!!
3.在执行受保护的service()方法时,HttpServletRequest对象会先调用getMethod()方法,来获得你提交请求的方式(例如,POST,GET),通过判断后会调用响应的doXXX()方法。在方法中的请求方式的判断其实就是对字符串的判断,下面我贴出部分源代码,你会发现,servlet的源代码中,不外乎就是java的基础代码,所以,Java基础非常重要。
公共的service():
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);
}
static Class class$(String x0)
{
return Class.forName(x0);
ClassNotFoundException x1;
x1;
throw new NoClassDefFoundError(x1.getMessage());
}
}
受保护的service():
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{
String method = req.getMethod(); //获得请求的方式
if(method.equals("GET"))
{
long lastModified = getLastModified(req);
if(lastModified == -1L)
{
doGet(req, resp);
} else{
long ifModifiedSince = req.getDateHeader("If-Modified-Since");
if(ifModifiedSince < (lastModified / 1000L) * 1000L)
{
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else
{
resp.setStatus(304);
}
}
} else
//进行对请求方式的判断
if(method.equals("HEAD"))
{
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
} else
if(method.equals("POST"))
doPost(req, resp);
else
if(method.equals("PUT"))
doPut(req, resp);
else
if(method.equals("DELETE"))
doDelete(req, resp);
else
if(method.equals("OPTIONS"))
doOptions(req, resp);
else
if(method.equals("TRACE"))
{
doTrace(req, resp);
} else
{
String errMsg = lStrings.getString("http.method_not_implemented");
Object errArgs[] = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(501, errMsg);
}
}
这就是HttpServlet在容器中运行时的基本步骤,随后我还会发其他的关于serlvet的文章,JSP和Servlet是J2EE的核心,熟练的掌握和运用这两项技术,我们才能子今后的学习与工作中更加的得心应手。
分享到:
相关推荐
HttpServlet 代码
httpservlet.jar包下载
httpservlet的jar包,修复httpservlet报错
HttpServlet 的Servlet的详解
Servlet&GenericServlet&HttpServlet源码分析,源码分析对于学习很有用
httpservlet时序图的图解,详细描述了servlet的执行流程
基础入门的客户端开发txt,很适合初学者的android开发,HttpServlet
HttpServlet完全自学手册,由浅入深.
提供tomcat的httpServlet解决http协议一些问题,有兴趣的可以了解一下
这是一个基于HttpServlet接口实现的简单登陆案例,所采用的环境是:IDEA_2019.2.3、MySQL_8.0.17和Tomcat_9.0.26,其中涉及到的内容有Druid数据库连池接技术,BeanUtils工具类等相关的JavaWeb技术,旨在加深对...
通过JAVA反射技术对HttpServlet进行简单封装,类似于struts框架,页面请求过来的参数名只需要与Action<T> T这个Bean里的变量对应即可,getForm()就是获得页面传过来的参数[注:当前这个只能传T里的string和int/...
tomcat+httpservlet+session+cookie+jsp+filter
本工程取自Linux系统下,使用eclipse 4.4构建的Tomcat7,web工程,能够后台显示log4j日志,具有文件下载、上传功能的Servlet,周末在家练习下J2EE的使用,适合学习用。
apache-tomcat-7.0.67-src----这个是查看httpServlet源码的包必须导入这个包才能看源代码
2个方法 简单有图 傻瓜式 javax.servlet.http.HttpServlet无法构建问题解决方法
韩顺平.2011最新j2ee视频教程.细说servlet.第10讲.serlvet三种开发方式之(继承GenericServlet开发、继承HttpServlet开发).wmv
servlet.jar,httpservlet架包,servlet.jar,httpservlet架包
一、Servlet介绍 1、什么是Servlet Servlet(Server Applet),全称Java Servlet,Java服务器应用程序。是用Java编写的服务器端程 序。 其主要功能在于交互式地浏览和修改数据,生成动态Web内容。...
本篇文章小编为大家介绍,基于JSP HttpServlet的详细介绍,需要的朋友参考下