java学习笔记(五)

来源:互联网 发布:淘宝自动发货软件免费 编辑:程序博客网 时间:2024/05/08 15:04

现在使用Struts等开源框架做开发的人员中很大一部分人没有了解一个请求被处理的全过程,这是一个隐患,因为不能清晰的了解整个过程所以在对框架的了解上存在着一定的障碍。我们大体看一下一个请求是如何被处理的。

一个http请求发出,它本身携带者请求的目的地址和需要携带的数据。我们在浏览器地址栏里看到的就是他的URI,也就是它具体请求的对象。拿开发中最最常见的http://localhost:8080/sample为例,它请求的是localhost主机的8080端口上的sample应用。当然一个web应用都有一个默认的全局欢迎页面,一般是index.jsp或者index.html等。当你的这个请求发送到一台可用的主机的一个有效的web应用是一般会返回一个index页面。现在我们来看看这个页面的由来,每一个web应用都必须有一个web.xml文件,这里面的东西声明了你整个web应用使用的servlet还有很多其他的东西,最重要的就是filterinit参数。Welcome-file-list声明的就是默认的欢迎页面。

我正在带着你看懂一个web.xml文件,上一篇我说过,要学习阅读XML配置文件,现在我们就在做这件事情。通过对web.xml的了解你很快就可以明白一个web应用的组件和他们之间的关系。

篇外话:千万不要随便更改他们第二级节点的位置,换句话说就是filter一定要在servlet的前面,不然你会遇到意想不到的问题。当你启动一个web应用的时候如果发现控制台中有xxxservletnot found的错误,那么你可以到web.xml中寻找一下看看这个节点是否存在。

接下来就是某些特定功能的请求了,比如http://localhost:8080/sample/login.do。这个就比上一个的URI多了一点东西,其实它也很简单。如果你是在用Struts开发那么你很容易在web.xml中找到这样一段:

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

<init-param>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

当然你的可能跟我的不一样,我这个是最简化的一个。看到servlet-mapping节点,它是生命所有以.do结尾的URI请求都要由名称为actionservlet来处理,而这个名字叫actionservlet就是我们上一段中定义的。

现在你应该知道了,一个.do结尾的请求最后都交给了Struts的一个ActionServlet实例来处理了,至于他们是怎么找到具体请求类的呢?

我想你们已经详细的阅读了Struts-config.xml文件,那里面就是一个完整的映射关系。现在你应该彻底明白了一个请求是怎么找到具体的动作实例了。至于请求之中数据的封装和剥离则完全有Struts内部完成,它将数据提取出来形成form实例交给你。至于它是如何封装数据的,你不要问我,我没有精力去研读Struts的代码……

知道了上面的流程我想你会对于开发过程中遇到的一些问题有了新的认识,还是老话,阅读XML配置文件是一个好习惯,至少你能很快的明白各部分的关系。连接池是什么?下一篇我们简单的研究一下他们,因为你每天都得和它打交道。