首页 > 代码库 > 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文件的几点说明:

    1. 第10行:package中name属性的值为工程名,extends属性为struts-default;
    2. 第12行:action中name属性的值必须与login.jsp中action的值保持一致,class属性的值为要处理该action的类的完整路径(包名+类名);
    3. 第14、15行:根据LoginAction.java执行execute方法的结果跳转到不同的页面,因此result标签的每个name属性值必须属于execute方法的返回结果。

  最后在增加error.jsp和welcome.jsp文件即可。

  整个运行过程如下:

    1. 输入用户名和密码,点击登录后,会产生一个Login的Action请求;(既然FilterDispatcherr会截获所有的请求,个人觉得在访问login.jsp的时候也是先经过了FilterDispatcherr的,知识由于没有涉及到Action,所以直接转到该页面本身)
    2. FilterDispatcherr会截获该请求,再根据struts.xml中的配置,调用LoginAction类对请求进行处理,请求中的用户名和密码参数会赋值给LoginAction对象的两个属性,再调用execute方法,并返回结果;
    3. 根据返回的结果"error"或"success",在struts.xml中查找并跳转到对应的文件。 

References

  1. 李刚. 《Struts2权威指南——基于WebWork核心的MVC开发》,电子工业出版社.
  2. Java Web : Struts2第一个简单例子 浅解
  3. Struts入门实例
  4. Strus2 Starting Problem
  5. Locale Warning on tomcat deployment

 

   

 

 

 

 

 

 

 

Struts2——第一课