struts2 初识

来源:互联网 发布:免费交友软件下载 编辑:程序博客网 时间:2024/05/21 10:37

  struts2 中,客户端发出的所有请求都被 struts2定义的一个servlet过滤器处理。这个过滤器并不立刻将请求转发给相应的资源,而是根据struts.xml中配置的信息和请求表单的action属性值创建一个 ActionSupport 对象,并且调用配置好的方法。这个方法做好逻辑处理后,返回标识了处理结果的字符串,然后struts2会根据返回的字符串值和struts.xml中配置的信息,跳转到相应的资源。

 

下面是一个最简单的 struts2 体验(MyEclipse6.0)

 

1、首先当然是创建一个 java web 应用程序的工程,并且从官方网站下载 struts2,然后解压,并且把解压后的 lib 目录下的 struts2.0-core-2.0.11.jarxwork-2.0.4.jarognl-2.6.11.jar 导入到工程中去。

注意不能把 struts2 中所有的 jar 文件全部导入到工程中去,否则很有可能会发生类名冲突。

如果觉得这三个文件名不好记,则可以用 winrar 随便打开一个 struts2  apps  war 文件,参考到里面的web-inf/lib 目录下的 jar 文件。

 

 

2、修改 web.xml 文件,将 struts2 的过滤器添加到这个 web 网站中:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="
http://java.sun.com/xml/ns/j2ee
"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
"
 xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee

 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>

   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

其它的不用理会,红色部分表示这个 java web 服务器中的所有请求都被

org.apache.struts2.dispatcher.FilterDispatcher  过滤

 

3、编写一个登录的页面和一个处理这个登录请求的类:

login.jsp:

......

     <form action="logonAction">
     <table width="350px">
      <tr>
       <td align="right">
用户名
</td>
       <td align="left"><input type="text" name="
username
" /></td>
      </tr>
      <tr>
       <td align="right">
密码
</td>
       <td align="left"><input type="password" name="
password
" /></td>
      </tr>
      <tr>
       <td colspan="2" align="center">
        <input type="submit" value="
登录
" />
       </td>
      </tr>
     </table>
     </form>

......

 

 

LogonAction.java

package com.zhimin.struts;

import com.opensymphony.xwork2.ActionSupport;

public class LogonAction extends ActionSupport{

 // 表单数据
 private String
username = "";
 private String
password = "";

 
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 
 public String execute() throws Exception{

  // 验证登录,如果成功则返回"success",否则返回"error"
  if(username != null && username.equals("zhimin") && password != null && password.equals("pass"))
   return "success";
  else
   return "error";
 }
}

 

 

4、再创建两个 jsp 文件:logonOK.jsp logonError.jsp,内容随意,主要用于区分登录成功和登录失败(其实简单地用 html 文件也可以)

 

 

5、在src目录下创建一个struts.xml文件,录入内容如下:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.0 //EN"
 "
http://struts.apache.org/dtds/struts-2.0.dtd
">
<struts>
 <include file="struts-default.xml"/>
 <package name="struts2.0_test" extends="struts-default">
  <action name="logonAction" class="com.zhimin.struts.LogonAction" method="execute">
   <result name="success">/logonOK.jsp</result>
   <result name="error">/logonError.jsp</result>
  </action>
 </package>

</struts>

 

OK,到这里应该就算是完成了,用 MyEclipse 发布并启动 web 服务之后,访问 login.jsp,输入用户名和密码应该能够跳转到相应的页面。

 

分析一下程序的整个运行流程应该如下:

·            客户端提交登录请求,请示的表单数据包括了:usernamepassword,还有表单的 action 属性(值为logonAction

·            由于 web.xml 配置了org.apache.struts2.dispatcher.FilterDispatcher过滤器,它过滤所有的请求(/*),因此客户端请示被它拦截了。

·            过滤器发现客户端表单的 action 属性为 logonAction,因此它会到 struts.xml 配置文件中找 name 属性值为 logonAction action 节点

·            找到这个节点后,再创建这个节点中由 class 属性值指定的类的对象

·            调用这个对象的 setUsername setPassword 方法,将表单域 username password 的值填充到这个对象中去

·            这个 action 节点还有一个 method 属性,值为 execute,因此过滤器还将调用这个对象的 execute 方法

·            过滤器再这个方法根据返回的字符串,和 action 节点的子节点 result 进行比较,如果 result 子节点的 name 属性值和返回的字符串相等,则跳到 result 节点指定的页面。

 

 

原创粉丝点击