Struct2入门学习(完整代码)

来源:互联网 发布:淘宝店铺实名认证在哪 编辑:程序博客网 时间:2024/06/06 04:17

1.1准备工作

项目总体布局如图:


准备好所需要的jar包,在web.xml文件中配置Struct2,在src目录下新建struts.xml文件。所需要的jar包有

asm-3.3.jar 

asm-commons-3.3.jar 

asm-tree-3.3.jar 

commons-fileupload-1.3.1.jar

commons-io-2.2.jar

commons-lang3-3.1.jar

commons-logging-1.1.3.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar

javax.servlet-api-3.1.0.jar

log4j-1.2.17.jar

ognl-3.0.6.jar

servlet-api.jar

struts2-core-2.3.16.1.jar

xwork-core-2.3.16.1.jar

上述jar包里面并不是所有的都是必要的,有些需要用到时候再添加也行,此处不再一一剔除。然后将这些jar包复制到WEB-INF/lib下,然后打开WEB-INF下的web.xml文件配置struts2,如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" 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">

    <display-name>StructTest</display-name>

    <welcome-file-list>

        <welcome-file>login.jsp</welcome-file>

    </welcome-file-list>

<!-- Struts2配置 -->

    <filter>

        <filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

</web-app>

然后在src目录下新建struts.xml文件并做配置,如下:

<?xml version="1.0" encoding="UTF-8" ?>  

<!DOCTYPE struts PUBLIC  

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  

    "http://struts.apache.org/dtds/struts-2.3.dtd">  

    <struts>

     <constant name="struts.enable.DynamicMethodInvocation" value="true" />  

        <package name="struts2" extends="struts-default">  

            <action name="login" class="actionIt.Login">  

        <result name="success">/welcome.jsp</result>

      <result name="error">/error.jsp</result> 

            </action> 

            <action name="UserAction" class="actionIt.UserAction">

             <result name="list">/error.jsp</result>

             <result name="add">/error.jsp</result>

        </action> 

        </package>  

</struts> 

name=XXXX表示的是映射名称  class=XXXX表示的是路径即”包名.类名

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

设置完句话你就可以在一个form下对应自己新建的多个函数,有时候在一个form下点击不同的按钮要响应不同的事件,但是structs2extends ActionSuport后默认重写excute函数不会执行其他的函数,这时候需要自己重新设置这个属性,然后在result中的name=”XXXX”这个name对应的就是你自己写的方法,如下两个jsp页面,先看第一个默认重写excute函数第一个页面login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">    

<%@ taglib prefix="s" uri="/struts-tags" %>   

<html>

  <head><title>登录界面</title></head>

  <body>

    <form action="login.action">

     <table align="center">

     <tr>

     <td>用户名:</td>

     <td><input type="text" name="username"></td>

     </tr>

     <tr>

     <td>密 码:</td>

     <td><input type="password" name="userpass"></td>

     </tr>

      <tr>

     <td></td>

     <td>

     <input type="submit" value="提 交">

     <input type="reset"  value="取 消">

     </td>

     </tr>

     </table>

    </form>

  </body>

</html>

对应的Login.Java类,这个地方如果你是用的是ajax请求,可以将这些变量定义成public Srting类型的就能直接拿来用了,set get就不用写了。至于现在这个方法行不行我也没试,有兴趣的可以试试。

package actionIt;

import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport  

{  

private static final long serialVersionUID = 2098072226829821198L;

private String username;

private String userpass;

public String execute(){

  if("zel".equals(username)&&"1111".equals(userpass))

  {

   return SUCCESS;

  }

  else

  {

   return ERROR;  

  }

 }

 public void setUsername(String username)

 {

 this.username = username;

 }

 public void setUserpass(String userpass)

 {

 this.userpass = userpass;

 }

 public String getUsername()

 {

 return username;

 }

 public String getUserpass()

 {

 return userpass;

 }

}

调用自己重写的方法,welcome.jsp页面如下

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <%@ taglib prefix="s" uri="/struts-tags" %> 

    <%@ page import="java.util.*;" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

  <head>

    <title>欢迎</title>

  </head>

  <body>

    <font color="red" size="10">登录成功!</font>

    <s:form action="UserAction.action" theme="simple">

    <!-- 

        s:submit中的method属性和struts.xml中action标签中的method属性一致(method属性指定了要调用的方法)。

        在s:submit中可以为一个action设置多个method,而在struts.xml中action标签中只能设置一个method。

        当然,在struts.xml中可以为一个action指定多个actionName(action别名)。

        总结:一个Action类,可以对应多个action别名,每个action别名对应多个method属性(通过s:submit标签设置)。

    -->

    <table align="center">

     <tr>

     <td>list:</td>

     <td><s:submit value="进入List页面" method="list"/></td>

     </tr>

     <tr>

     <td>add:</td>

     <td><s:submit value="进入Add页面" method="add"/></td>

     </tr>    

    </table>   

</s:form>

  </body>

</html>

对应的UserAction.java类,这时候这个extends ActionSupport其实是可有可无的,应为你已经不在使用excute这个方法。


package actionIt;

 

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport implements ServletRequestAware{

public javax.servlet.http.HttpServletRequest request;

 /**

 * 

 */

private static final long serialVersionUID = 1L;

    // 获得HttpServletRequest对象

    public void setServletRequest(HttpServletRequest request)

    {

        this.request = request;

    }

public String list() throws Exception {

request.setAttribute("name", "常山赵子龙");

    return "list";

}

public String add() throws Exception{

request.setAttribute("name", "赵云");

    return "add";

}

}

最后一个辅助页面error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %> 

<%@ page import="java.util.*;" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

  <head>

    <title></title>

  </head>

  <body>

    <font color="red" size="10"><%=request.getAttribute("name")%></font>

    <script type="text/javascript">

     var name = "${request.getAttribute('name')}";

     alert(name);

    </script>

  </body>

</html>

这是我以前学习是的测试项目,希望能给初学者带来些许帮助,但是structs2标签太丑了,看着不太好看而且我更喜欢html页面,jsp虽然简单但是总有一种眉毛胡子一把抓的感觉,下一篇为大家整理一下structs2+ajax,这样大家就可以随便做自己的网页,随便从网站上下载html网页拿来自己用了。









2 0