讲清楚一个SSH框架的WEB请求的详细经过,FILTER+web.xml,包括JSP和SERVLET的调度过程,Tomcat的线程池和JDBC连接池,STRUTS2的拦截器和自动装配机制及涉及的相关类,SPRING的事务,AOP,及自动装配及涉及的相关类,HIBERNATE的CACHE和自动装配机制和事务;
一。JSP请求
1.浏览器发起请求:
一般有POST和GET方法,两者的处理过程基本相同,因此通常在Servlet端只实现其中之一,然后在另一个方法中调用已实现的方法;
两者的区别在于:
(1)参数长度:
GET方法的参数在浏览器地址栏中,因此有长度的限制;?将路径和参数分开,&;将参数之间分开;
POST方法的参数则放在消息体中,因此无长度限制;
(2)安全
GET方法的参数显示在地址栏中,可见,故不安全;
POST方法的参数放在消息体中,不可见,故较安全;
(3)书签
GET可建立,而POST不可建立;
(4)幂等
理论上讲GET方法应该是幂等的(可重复执行多次无副作用),POST方法是非幂等的,实际应用中不一定;
(5)转码区别
在实际中发现,GET和POST还会有一个问题,即GET方法的参数通常还需要手工解码,而POST则不需要,原因在于应用服务器的编码未正确设置,默认为ISO-8859-1;
2.经过Filter
(1)一般来说,需要先经过SPRING的字符集转码机制,CharacterEncodingFilter,用来处理前台JSP页面与后台JAVA代码编码机制不同的情况;
(2)然后会经过其它的Filter,有时是权限和安全验证,更多的情况是直接由STRUTS2来拦截请求,由SSH框架来处理;
Tomcat中各种配置的加载顺序:
context-param -> listener -> filter -> servlet
context-param用来配置容器的上下文初始化参数,只在容器重新部署时初始化,一般来说,配置的参数是SPRING的配置文件名;
listener 用来将上下文初始化参数组装成对象,一般来说,为SPRING的org.springframework.web.context.ContextLoaderListener 类;
filter主要用于对用户请求进行预处理,一般来说,首先是SPRING的转码机制,然后是安全和权限控制(如果有),再下来是STRUTS2的框架或者Webservice;Filter的加载顺序由其在
web.xml中的配置顺序决定;
安全和权限控制(Session):
基本的方法是先登录,然后在Session中存储用户信息以及状态信息,以后的会话通过传送SessionID来进行确认;
Session存在有效期,一般来说二十分钟,也可人工设置;
Tomcat设置SESSION有效期的三种方法:在server.xml中定义context时defaultSessionTimeOut设置
在web.
xml中通过
的设置
在程序中通过HttpSession的setMaxInactiveInterval设置;
sessionID的交换:第一次生成时会通过首部的set-cookie和在URL后追加来传递sessionID,因为有可能有的浏览器不支持COOKIE;
如果后来客户发送的请求中有sessionID的COOKIE,则以后只通过第一种方法来传递;
HTTPSession中存储信息:ActionContext.getContext().getSession().put()方法来存储;
3.返回JSP
如果请求HTML,则返回HTML,请求JSP,一般会由服务器生成HTML并返回;
(1)JSP与SERVLET的区别:
JSP也是SERVLET,因为在SERVLET中直接拼HTML的字符串比较麻烦且因为涉及到转码及前后台分工的问题,最终使用JSP来做响应SERVLET;
JSP先被转化为JAVA文件,再被编译为CLASS文件,然后由窗口加载并初始化成SERVLET对象;
(2)JSP中include与jsp:include的区别:
都用来在JSP文件中加入重复内容;
include的作用等同于直接复制相关文字到标签位置,因此其对位置敏感,include的文件不是一个完整的JSP,应用启动时,包含文件则自动复制到各个JSP中;
jsp:include的作用则是通过运行时原JSP作为Dispatch响应来发挥,因此其对位置不敏感,jsp:include文件是一个