首页 > 代码库 > Struts2——第一课
Struts2——第一课
一直在说学习SSH,却也一直耽搁着,一来事情有点多,再则感觉有点难,一点时间可能学不会。正好现在比较闲,准备学习学习,入个门。初步打算每次的总结都会记录在这里,后面可以方便自己再次学习,有兴趣的朋友也可以支持下。
刚开始学习,难免有很多错误,希望大家理解。
0. 整体结构
同样从HelloWorld开始,哈哈。工程的结构图如下:
图1.工程结构图
主要关注LoginAction.java、struts.xml、web.xml和login.jsp。
1. web.xml
web.xml文件的内容如图2,filter是过滤器。第11-20行配置了名为struts2的过滤器,对于所有的web请求,都会先经过org.apache.struts2.dispatcher.FilterDispatcher(以下简称FilterDispatcher)处理,然后分发给适当的Action去处理。
类比Servlet的配置方法,可以很好的理解filter。它由filter和filter-mapping两组标签完成。其中第13、19行的filter-name可以任意取名,但同一个filter必须保存一致。当配置多个filter时,每个filter的名字必须唯一。
图2. web.xml
2. login.jsp
login.jsp是登录页面,代码如图3.
图3. login.jsp
第26行的action的值表示当用户将数据提交后,会跳转到指定名字(Login)的Action进行处理。
3. LoginAction.java
LoginAction.java用来处理用户提交的用户名和密码,代码如图4.
图4. LoginAction.java
当用户提交用户名和密码时,FilterDispatcher会将该请求分发给名为Login的Action,同时请求的参数(用户名和密码会赋值给一个LoginAction对象),然后调用该对象execute方法并返回结果。
4. struts.xml
上文提到了FilterDispatcher将请求转发给LoginAction.java,因此我们需要对LoginAction.java进行配置。如图5所示:
图5. struts.xml
关于struts.xml文件的几点说明:
- 第10行:package中name属性的值为工程名,extends属性为struts-default;
- 第12行:action中name属性的值必须与login.jsp中action的值保持一致,class属性的值为要处理该action的类的完整路径(包名+类名);
- 第14、15行:根据LoginAction.java执行execute方法的结果跳转到不同的页面,因此result标签的每个name属性值必须属于execute方法的返回结果。
最后在增加error.jsp和welcome.jsp文件即可。
整个运行过程如下:
- 输入用户名和密码,点击登录后,会产生一个Login的Action请求;(既然FilterDispatcherr会截获所有的请求,个人觉得在访问login.jsp的时候也是先经过了FilterDispatcherr的,知识由于没有涉及到Action,所以直接转到该页面本身)
- FilterDispatcherr会截获该请求,再根据struts.xml中的配置,调用LoginAction类对请求进行处理,请求中的用户名和密码参数会赋值给LoginAction对象的两个属性,再调用execute方法,并返回结果;
- 根据返回的结果"error"或"success",在struts.xml中查找并跳转到对应的文件。
- 输入用户名和密码,点击登录后,会产生一个Login的Action请求;(既然FilterDispatcherr会截获所有的请求,个人觉得在访问login.jsp的时候也是先经过了FilterDispatcherr的,知识由于没有涉及到Action,所以直接转到该页面本身)
References
- 李刚. 《Struts2权威指南——基于WebWork核心的MVC开发》,电子工业出版社.
- Java Web : Struts2第一个简单例子 浅解
- Struts入门实例
- Strus2 Starting Problem
- Locale Warning on tomcat deployment
Struts2——第一课