`
starbhhc
  • 浏览: 649753 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts2小示例

    博客分类:
  • java
阅读更多
首先是  actions 包里的类 (2个 action ,一个拦截器)



1.CheckLoginInterceptor



Java代码
/************************************************* 
@Copyright (C), 2008,  star    
  
@Function List:  
1. public String intercept() 
*************************************************/ 
 
package cn.com.lzpeng.actions;  
 
import java.util.Map;  
import com.opensymphony.xwork2.Action;  
import com.opensymphony.xwork2.ActionInvocation;  
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
 
public class CheckLoginInterceptor extends AbstractInterceptor {  
 
    private static final long serialVersionUID = 1L;  
    public static final String USER_SESSION_KEY="user";    
 
    @Override 
    public String intercept(ActionInvocation actionInvocation) throws Exception {  
        System.out.println("begin check login interceptor");  
 
        // 对LoginAction不做该项拦截  
        Object action = actionInvocation.getAction();  
        if (action instanceof LoginAction) {  
            System.out  
                    .println("exit check login, because this is login action.");  
            return actionInvocation.invoke();  
        }  
        // 验证 session  
        Map session = actionInvocation.getInvocationContext().getSession();  
        String username = (String) session.get(USER_SESSION_KEY);  
 
        if (username != null) {  
            // 存在的情况下进行后续操作。  
            System.out.println(username+" already login!");  
            return actionInvocation.invoke();  
        } else {  
            // 否则终止后续操作,返回LOGIN  
            System.out.println("no login, forward login page!");  
 
            return Action.LOGIN;  
 
        }  
 
    }  
 


/*************************************************

1. public String intercept()
*************************************************/

package cn.com.lzpeng.actions;

import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class CheckLoginInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 1L;
public static final String USER_SESSION_KEY="user"; 

@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("begin check login interceptor");

// 对LoginAction不做该项拦截
Object action = actionInvocation.getAction();
if (action instanceof LoginAction) {
System.out
.println("exit check login, because this is login action.");
return actionInvocation.invoke();
}
// 验证 session
Map session = actionInvocation.getInvocationContext().getSession();
String username = (String) session.get(USER_SESSION_KEY);

if (username != null) {
// 存在的情况下进行后续操作。
System.out.println(username+" already login!");
return actionInvocation.invoke();
} else {
// 否则终止后续操作,返回LOGIN
System.out.println("no login, forward login page!");

return Action.LOGIN;

}

}

}


2.LoginAction



Java代码
/************************************************* 
1. public UserBean getUserBean() 
返回一个UserBean实体 
2. public void setUserBean(UserBean userBean)  
设置一个UserBean实体 
3. public String execute() 
执行Action的方法 
4.public void setSession() 
设置 session 值 
*************************************************/ 
 
package cn.com.lzpeng.actions;  
 
import com.opensymphony.xwork2.ActionSupport;  
import cn.com.lzpeng.entity.UserBean;  
import java.util.Map;  
import org.apache.struts2.interceptor.SessionAware;  
 
public class LoginAction extends ActionSupport implements SessionAware {  
    private static final long serialVersionUID = 1L;  
 
    private UserBean userBean;  
 
    private Map<String, String> session;  
 
    public UserBean getUserBean() {  
        return userBean;  
    }  
 
    public void setUserBean(UserBean userBean) {  
        this.userBean = userBean;  
    }  
 
    @Override 
    public String execute() {  
        if (userBean == null) {  
            return LOGIN;  
        }  
 
        String name = userBean.getName();  
        String pwd = userBean.getPassword();  
 
        session.put(CheckLoginInterceptor.USER_SESSION_KEY, name);  
 
        if (name.equals("java") && pwd.equals("struts")) {  
            return SUCCESS;  
        } else {  
            return ERROR;  
        }  
 
    }  
 
      
    public void setSession(Map session) {  
        this.session = session;  
    }  
 


/*************************************************

1. public UserBean getUserBean()
返回一个UserBean实体
2. public void setUserBean(UserBean userBean)
设置一个UserBean实体
3. public String execute()
执行Action的方法
4.public void setSession()
设置 session 值
*************************************************/

package cn.com.lzpeng.actions;

import com.opensymphony.xwork2.ActionSupport;
import cn.com.lzpeng.entity.UserBean;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;

public class LoginAction extends ActionSupport implements SessionAware {
private static final long serialVersionUID = 1L;

private UserBean userBean;

private Map<String, String> session;

public UserBean getUserBean() {
return userBean;
}

public void setUserBean(UserBean userBean) {
this.userBean = userBean;
}

@Override
public String execute() {
if (userBean == null) {
return LOGIN;
}

String name = userBean.getName();
String pwd = userBean.getPassword();

session.put(CheckLoginInterceptor.USER_SESSION_KEY, name);

if (name.equals("java") && pwd.equals("struts")) {
return SUCCESS;
} else {
return ERROR;
}

}


public void setSession(Map session) {
this.session = session;
}

}


3.TestInterceptorAction   



Java代码
/************************************************* 
 
1.public String execute() 
执行 Action 的方法 
*************************************************/ 
 
package cn.com.lzpeng.actions;  
 
import com.opensymphony.xwork2.ActionSupport;  
 
public class TestInterceptorAction extends ActionSupport {  
 
    private static final long serialVersionUID = 1L;  
 
    @Override 
    public String execute() {  
        return SUCCESS;  
    }  
 


/*************************************************

1.public String execute()
执行 Action 的方法
*************************************************/

package cn.com.lzpeng.actions;

import com.opensymphony.xwork2.ActionSupport;

public class TestInterceptorAction extends ActionSupport {

private static final long serialVersionUID = 1L;

@Override
public String execute() {
return SUCCESS;
}

}




这个是实体类 UserBean.java



Java代码
/************************************************* 

@Description:    UserBean实体类     
*************************************************/ 
 
package cn.com.lzpeng.entity;  
 
public class UserBean {  
    private String name;  
 
    private String password;  
 
    public void setName(String name) {  
        this.name = name;  
    }  
 
    public void setPassword(String password) {  
        this.password = password;  
    }  
 
    public String getName() {  
        return name;  
    }  
 
    public String getPassword() {  
        return password;  
    }  
 


/*************************************************

@Description:    UserBean实体类   
*************************************************/

package cn.com.lzpeng.entity;

public class UserBean {
private String name;

private String password;

public void setName(String name) {
this.name = name;
}

public void setPassword(String password) {
this.password = password;
}

public String getName() {
return name;
}

public String getPassword() {
return password;
}

}




struts.xml



Java代码
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
        "http://struts.apache.org/dtds/struts-2.0.dtd">  
 
<struts>  
    <!-- 加载默认的 struts2 配置文件 -->  
    <include file="struts-default.xml" />  
    <!-- 继承默认的 struts2 配置文件 -->  
    <package name="default" extends="struts-default">  
        <!-- 定义一个名为 checkLogin 的拦截器 -->  
        <interceptors>  
            <!-- 定义权限检查拦截器 -->  
            <interceptor name="checkLogin" 
                class="cn.com.lzpeng.actions.CheckLoginInterceptor" />  
            <!-- 定义一个包含权限检查的拦截器栈 -->  
            <interceptor-stack name="myDefaultStack">  
                <!-- 定义拦截器栈包含checkLogin拦截器 -->  
                <interceptor-ref name="checkLogin"></interceptor-ref>  
                <interceptor-ref name="defaultStack"></interceptor-ref>  
            </interceptor-stack>  
        </interceptors>  
        <!-- 设置全局 全局默认的拦截器栈-->  
        <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>  
 
        <!-- 定义全局Result -->  
        <global-results>  
            <!-- 当返回login视图名时,转入/login.jsp页面 -->  
            <result name="login">/login.jsp</result>  
        </global-results>  
 
        <!--      
            action 标签里 name属性代表我们要处理的.action的前面部分     
            action 标签里 class属性代表我们需要哪个类来处理     
            result 标签的 name属性代表action类的执行方法的返回值,     
            action类的默认执行方法是public String execute()    
        -->  
        <action name="login" 
            class="cn.com.lzpeng.actions.LoginAction">  
            <result name="success">success.jsp</result>  
            <result name="error">error.jsp</result>  
            <result name="login">login.jsp</result>  
            <!--拦截器一般配置在 result 元素之后  -->  
            <interceptor-ref name="myDefaultStack" />  
        </action>  
 
        <action name="testInterceptor" 
            class="cn.com.lzpeng.actions.TestInterceptorAction">  
            <result name="success">content.jsp</result>  
            <result name="login">login.jsp</result>  
        </action>  
 
 
 
 
    </package>  
</struts> 

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<!-- 加载默认的 struts2 配置文件 -->
<include file="struts-default.xml" />
<!-- 继承默认的 struts2 配置文件 -->
<package name="default" extends="struts-default">
<!-- 定义一个名为 checkLogin 的拦截器 -->
<interceptors>
<!-- 定义权限检查拦截器 -->
<interceptor name="checkLogin"
class="cn.com.lzpeng.actions.CheckLoginInterceptor" />
<!-- 定义一个包含权限检查的拦截器栈 -->
<interceptor-stack name="myDefaultStack">
<!-- 定义拦截器栈包含checkLogin拦截器 -->
<interceptor-ref name="checkLogin"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置全局 全局默认的拦截器栈-->
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>

<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>

<!--   
action 标签里 name属性代表我们要处理的.action的前面部分  
action 标签里 class属性代表我们需要哪个类来处理  
result 标签的 name属性代表action类的执行方法的返回值,  
action类的默认执行方法是public String execute() 
-->
<action name="login"
class="cn.com.lzpeng.actions.LoginAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
<result name="login">login.jsp</result>
<!--拦截器一般配置在 result 元素之后  -->
<interceptor-ref name="myDefaultStack" />
</action>

<action name="testInterceptor"
class="cn.com.lzpeng.actions.TestInterceptorAction">
<result name="success">content.jsp</result>
<result name="login">login.jsp</result>
</action>




</package>
</struts>



最后是 4个 jsp界面

login.jsp.

Java代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://" 
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
%>  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <base href="<%=basePath%>">  
 
        <title>struts2</title>  
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">  
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
    <link rel="stylesheet" type="text/css" href="styles.css">  
    -->  
    </head>  
 
    <body>  
        <!—-  
        注意这里action="login.action" 
        因为要与Struts.xml里你注册的那个别名叫"login" 
       -->  
        <form action="login.action" method="post" >  
            <fieldset>  
                <legend>  
                    用户登录  
                </legend>  
                <p align="center">  
                    帐 号:  
                    <input type="text" name="userBean.name"  />  
                    <!—-  
                    注意这里一定要写name="bean.name",  
                    因为要与LoginAction.java里面定义的bean对应  
                    name是它的helloWorld的属性  
                    -->  
                </p>  
                <p align="center">  
                    密 码:  
                    <input type="password" name="userBean.password" />  
                </p>  
                <p align="center">  
                    <input type="submit" value="登 录" />  
                </p>  
            </fieldset>  
        </form>  
    </body>  
</html> 


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>struts2</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
<!—-
注意这里action="login.action"
因为要与Struts.xml里你注册的那个别名叫"login"
   -->
<form action="login.action" method="post" >
<fieldset>
<legend>
用户登录
</legend>
<p align="center">
帐 号:
<input type="text" name="userBean.name"  />
<!—-
注意这里一定要写name="bean.name",
因为要与LoginAction.java里面定义的bean对应
name是它的helloWorld的属性
    -->
</p>
<p align="center">
密 码:
<input type="password" name="userBean.password" />
</p>
<p align="center">
<input type="submit" value="登 录" />
</p>
</fieldset>
</form>
</body>
</html>

success.jsp


Java代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://" 
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
%>  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <base href="<%=basePath%>">  
 
        <title>成功了</title>  
 
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">  
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
    <link rel="stylesheet" type="text/css" href="styles.css">  
    -->  
 
    </head>  
 
    <body>  
        <form action="testInterceptor.action">  
            <div align="center">  
                恭喜${userBean.name}登录成功了 !  
                <br>  
                只有通过这才能访问 content.jsp!  
                <br>  
                <br>  
                <input type="submit" value=" content.jsp">  
                <br>  
                <br>  
                主要演示拦截器 CheckLoginInterceptor 对 TestInterceptorAction 的拦截情况(可以试直接访问  
                TestInterceptorAction.action)  
            </div>  
        </form>  
    </body>  
</html> 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>成功了</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<form action="testInterceptor.action">
<div align="center">
恭喜${userBean.name}登录成功了 !
<br>
只有通过这才能访问 content.jsp!
<br>
<br>
<input type="submit" value=" content.jsp">
<br>
<br>
主要演示拦截器 CheckLoginInterceptor 对 TestInterceptorAction 的拦截情况(可以试直接访问
TestInterceptorAction.action)
</div>
</form>
</body>
</html>


error.jsp



Java代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://" 
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
%>  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <base href="<%=basePath%>">  
 
        <title>error</title>  
 
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">  
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
    <link rel="stylesheet" type="text/css" href="styles.css">  
    -->  
 
    </head>  
 
    <body>  
        <div align="center">  
            这是一个错误界面 !  用以下帐号试试:<br>  
            id   : java<br>  
            password:  struts  
        </div>  
        <div>  
            <a href="login.jsp">返回登录界面</a>  
        </div>  
 
    </body>  
</html> 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>error</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<div align="center">
这是一个错误界面 ! 用以下帐号试试:<br>
id   : java<br>
password:  struts
</div>
<div>
    <a href="login.jsp">返回登录界面</a>
</div>

</body>
</html>


content.jsp    //为测试 拦截器 写的



Java代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://" 
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
%>  
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <base href="<%=basePath%>">  
 
        <title>content</title>  
 
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">  
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
    <link rel="stylesheet" type="text/css" href="styles.css">  
    -->  
 
    </head>  
 
    <body><div align="center">  
        这里是 content.jsp!  
        <br>  
        成功通过拦截器 CheckLoginInterceptor......  
        <br>  
        复制上边地址 , 在新打开的窗口里粘贴 , 回车试试......  
        </div>  
    </body>  
</html> 
分享到:
评论

相关推荐

    struts2 入门示例程序

    struts2 入门示例程序struts2 入门示例程序struts2 入门示例程序struts2 入门示例程序struts2 入门示例程序struts2 入门示例程序struts2 入门示例程序struts2 入门示例程序

    完整struts2文件上传示例

    以下是对"完整Struts2文件上传示例"的详细解释: 1. **配置Struts2框架** 在Struts2中,我们首先需要在`struts.xml`配置文件中添加相关的拦截器(interceptor)来处理文件上传。`struts.multipart.parser`属性应...

    struts 2.3.7 简单示例

    struts 2.3.7简单示例。...示例实现用户登录功能,由于该示例是ssh整合的第一步,所以并未包含Spring、Hibernate框架,仅是Struts2的示例。 如果需要其他整合,请看:http://blog.csdn.net/xz2001/

    struts2小程序 struts2代码

    这个“struts2小程序”很可能是开发者利用Struts2框架开发的一个小型项目,可能包含了基本的CRUD操作或其他特定功能。在描述中提到花费了3小时搭建,暗示这可能是一个简单的入门示例,用于学习或教学目的。 Struts2...

    struts taglib使用示例

    struts taglib使用示例 struts taglib使用示例 struts taglib使用示例struts taglib使用示例 struts taglib使用示例

    struts2配置示例

    这个“struts2配置示例”提供了一个基础的实现,展示了如何配置Struts2框架来处理用户的登录功能,使用OGNL(Object-Graph Navigation Language)表达式语言,并实现后台验证。下面我们将深入探讨这些关键知识点。 ...

    struts2验证框架示例

    这个“struts2验证框架示例”提供了深入理解并实际操作Struts2验证功能的机会。 首先,让我们了解一下Struts2验证框架的基本概念。验证框架基于两个主要组件:Validation拦截器和Action类中的验证配置。Validation...

    Struts2购物车示例

    在这个"Struts2购物车示例"中,我们将会探讨如何利用Struts2框架来构建一个功能完备的购物车系统,特别是在处理用户购物选择并将其存储在Session中的方法。 购物车是电子商务网站的核心组件之一,它允许用户在决定...

    Struts2示例demo

    描述中的"Struts示例demo"进一步强调了这是一个实践性的教程,旨在帮助开发者理解并掌握Struts2的核心概念和工作流程。 标签"Struts2demo"表明这是一个关于Struts2的实例,可能涵盖了Action、Interceptor、Result...

    Struts2 Json示例(Maven项目)

    在这个"Struts2 Json示例(Maven项目)"中,我们将会深入探讨如何在Struts2框架下实现JSON(JavaScript Object Notation)数据交换,以及如何结合Maven进行项目构建。 JSON是一种轻量级的数据交换格式,易于人阅读...

    Struts 2简单小示例

    这个"Struts 2简单小示例"旨在帮助初学者理解并掌握Struts 2的基本用法和核心概念。 在描述中提到的"http://localhost:8080/test/welcome"是Struts 2应用的一个URL,通常在本地开发环境中,我们可以访问这个URL来...

    Struts2示例2

    在"Struts2示例2"中,我们可以深入探索Struts2的核心功能和常见用法。 首先,让我们来看看3.9、3.10、3.8、3.11这些版本号。它们代表了Struts2的不同版本。Struts2会定期发布更新,以修复已知问题、增强性能和引入...

    Struts2学习示例

    struts2 示例 目的:构建struts2开发框架 适合:有一定struts2基础 实现:通过对用户信息的基本操作来给大家做个示范 1、struts2的搭建 2、web.xml文件的简单配置 3、struts.xml文件的简单配置 4、网站初始化工作...

    struts2 上传 示例

    这个"struts2 上传 示例"是一个用于演示如何在Struts2框架下实现文件上传的示例项目。 首先,我们要了解Struts2文件上传的基本原理。Struts2使用`Commons FileUpload`库处理文件上传,该库是Apache Commons项目的一...

    struts2通配符示例

    以下是对"struts2通配符示例"的详细解释: 1. **通配符匹配原理**: Struts2的通配符匹配是基于OGNL(Object-Graph Navigation Language)表达式实现的。它允许我们在Action配置中使用`*`和`?`两个特殊字符来创建...

    struts2简单示例

    这个"struts2简单示例"旨在帮助初学者快速掌握Struts2的基本用法,特别是实现一个简单的登录功能。下面将详细解释相关知识点。 首先,Struts2框架的核心是Action类,它是处理用户请求的中心。在这个示例中,你会...

    struts2通配符示例代码

    下面将详细解释Struts2通配符的用法,并结合示例代码进行解析。 1. **Struts2通配符概述** Struts2的通配符映射允许我们使用星号(*)来匹配一个或多个字符,或者使用两个星号(**)来匹配任意数量的目录。这种...

    Struts2 应用程序示例

    这个"Struts2应用程序示例"是专为初学者和开发者设计的,它利用Eclipse 3.3作为集成开发环境,JDK 6.0作为Java运行环境,以及Tomcat 6.0作为应用服务器,提供了实际操作的平台来理解和实践Struts2的核心概念。...

Global site tag (gtag.js) - Google Analytics