Struts2中Action与Servlet的联系与区别
Servlet处理客户端请求的步骤:
1、Web客户向Servlet容器(Tomcat)发出Http请求
2、Servlet容器分析客户的请求信息
3、Servlet容器创建一个HttpServletRequest对象,将客户请求的信息封装到这个对象中
4、Servlet容器创建一个HttpServletResponse对象
5、Servlet容器根据请求消息中的URL找到对应的servlet,然后针对该请求创建一个单独的线程,并把HttpRequest对象与HttpResponse对象作为参数传给新创建的线程中
6、容器调用Servlet对象的service()方法,完成对用户请求的响应,同时把动态页面返回给容器。
(或者是HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息;调用HttpResponse对象的有关方法,生成响应数据)
7、Servlet容器把响应结果组装成HTTP格式传给Web客户
Struts2也是在容器上执行的,实际上虽然没有用到Servlet,但是前四步是一样的,会创建HttpServletRequest对象和HttpServletResponse对象,所以,在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。
Struts2的流程:
可以说Struts2本质还是一个Servlet(在S1中用于整体控制的是一个Servlet;S2中是一个Filter,其实也可把它看作是Servlet),只是对Servlet进一步的封装罢了。
打个比方:做Web项目,好比建房子。Servlet好比木材,用一根根的木材搭,也可盖起房子,只是速度慢而已;
而Struts2好比是用木材做好的一个房子大概结构,要建房子时,只需把它拿过来,再往其里面添砖加瓦,修修补补,就能很快盖好房子,这要比直接使用Servlet要快得多。
优缺点:
1、Servlet更随意灵活,带来的就是规范性差、不易解读。
2、安全性,Servlet没有Struts2高。Servlet可能会带来session的乱用,造成信息泄露。
3、维护性,struts远胜于servlet。struts项目的代码分层很清晰,如果用servlet,代码结构不清晰,很容易引入新BUG。