p.s 关键在于struts.xml中的匹配,使用* ,{}以及${}可以让代码更加简洁清晰

代码核心思路 在struts.xml中通过路由(url)去指定控制逻辑的Action中的方法,例如

<package name="admin" namespace="/admin" extends="struts-global"><action name="login_*" class="com.zy.javaee.controller.actions.AdminLoginAction" method="{1}"><result name="success">${directUrl}</result><param name="defaultAdmin.username">testadmin</param><param name="defaultAdmin.password">123</param></action></package>
复制代码

中{1}指向login_*中的*部分, 访问/admin/login_adminLoginPage则{1}代表adminLoginPage,method={1},则路由的控制权转至AdminLoginAction.java中的adminLoginPage()方法,其次是${directUrl}指向了AdminLoginAction.jav继承的BaseAction.java中的getDirectUrl(),在AdminLoginAction.java中填充跳转页面路由即可实现由控制器控制跳转页面

普通用户登录 http://localhost:8080/users/login_userLoginPage 管理员用户登录http://localhost:8080/admin/login_adminLoginPage 默认登录 http://localhost:8080/login

<constant name="struts.i18n.encoding" value=“GBK"/> 支持中文 支持多个扩展名 设置浏览器不缓存静态内容 设置自动重新加载struts.xml

github: https://github.com/joeytsai03/javaee_test2.git

运行情况

整体的目录结构

User代码

package com.zy.javaee.domin;/*** Created by Joey_Tsai on 2018/3/9.*/
public class User {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;}private String username;private String password;}复制代码

UserLoginAction 代码

package com.zy.javaee.controller.actions;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.zy.javaee.controller.BaseAction;
import com.zy.javaee.domin.User;/*** Created by Joey_Tsai on 2018/3/19.*/
public class UserLoginAction extends BaseAction {private User user;private User defaultUser;public String userLoginPage(){setDirectUrl("/html/userLoginPage.jsp");return SUCCESS;}public String login(){if (getUser().getUsername().equals(getDefaultUser().getUsername()) && getUser().getPassword().equals(getDefaultUser().getPassword())) {ActionContext.getContext().getSession().put("user",user);setDirectUrl("/html/helloPage.jsp");return SUCCESS;} else {return userLoginPage();}}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public User getDefaultUser() {return defaultUser;}public void setDefaultUser(User defaultUser) {this.defaultUser = defaultUser;}}复制代码

LoginAction-conversion.properties

user=com.zy.javaee.UserConverter
复制代码

userLoginPage

  Created by IntelliJ IDEA.User: Joey_TsaiDate: 2018/3/19Time: 14:14To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>普通用户登陆界面</title>
</head>
<body><a href="/login">普通用户登陆</a>
<a href="/admin/login_adminLoginPage">管理员登陆</a><h1>普通用户登陆</h1>
<s:form action="/users/login_login" method="POST"><table><tr><td><s:textfield name="user.username" label="用户名" value="testuser"/></td></tr><tr><td><s:password name="user.password" label="密码" value="123"/></td></tr><tr><td colspan="2" style="text-align: center"><s:submit value="登录"/></td></tr></table>
</s:form>
</body>
</html>复制代码

UserConverter

package com.zy.javaee;import com.zy.javaee.domin.User;
import ognl.DefaultTypeConverter;import java.util.Map;/*** Created by Joey_Tsai on 2018/3/9.*/
public class UserConverter extends DefaultTypeConverter {public Object convertValue(Map context, Object value, Class toType){/*如果是要转换成User对象*/if (toType==User.class) {/*页面传递过来的参数被封装成了String[]*/String[] params = (String[]) value;User user = new User();/*取出user字符串,按,分割成数组*/String[] uservalues = params[0].split(",");user.setUsername(uservalues[0]);user.setPassword(uservalues[1]);return user;}/*页面要显示user参数值,则要转换成字符串*/else if (toType==String.class) {User user =(User)value;return "姓名:"+user.getUsername()+", 密码:"+user.getPassword();}return null;}}复制代码

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd">
<struts><constant name="struts.i18n.encoding" value="GBK"/><constant name="struts.action.extension" value="do,action,"/><constant name="struts.serve.static.browserCache" value="false"/><constant name="struts.configuration.xml.reload" value="true"/><package name="struts-global" namespace="/" extends="struts-default"><global-results><result name="exception" >/error.jsp</result></global-results><global-exception-mappings><exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping></global-exception-mappings><action name="tryException" class="com.zy.javaee.controller.actions.ErrorProcessAction" method="tryException"><result name="success">/users/login_userLoginPage.do</result></action></package><package name="default" namespace="/" extends="struts-global"><action name="login"><result type="redirect">/users/login_userLoginPage.action</result></action></package><package name="admin" namespace="/admin" extends="struts-global"><action name="login_*" class="com.zy.javaee.controller.actions.AdminLoginAction" method="{1}"><result name="success">${directUrl}</result><param name="defaultAdmin.username">testadmin</param><param name="defaultAdmin.password">123</param></action></package><package name="users" namespace="/users" extends="struts-global"><action name="login_*" class="com.zy.javaee.controller.actions.UserLoginAction" method="{1}"><result name="success">${directUrl}</result><param name="defaultUser.username">testuser</param><param name="defaultUser.password">123</param></action></package>
</struts>
复制代码

xwork-conversion.properties

com.zy.javaee.domin.User=com.zy.javaee.UserConverter
复制代码

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><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>
复制代码

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>实验2</title>
</head>
<body>
<a href="/login">普通用户登陆</a>
<a href="/admin/login_adminLoginPage">管理员登陆</a></body>
</html>
复制代码

error.jsp

<%--Created by IntelliJ IDEA.User: Joey_TsaiDate: 2018/3/19Time: 17:40To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>页面错误</title>
</head>
<body><%--<s:property value="exception.message"/>--%>
<%--<s:property value="exceptionStack"/>--%>
<s:debug></s:debug>
</body>
</html>复制代码

helloPage.jsp

<%--Created by IntelliJ IDEA.User: Joey_TsaiDate: 2018/3/19Time: 14:36To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>欢迎页面</title>
</head>
<body>
<a href="/login">普通用户登陆</a>
<a href="/admin/login_adminLoginPage">管理员登陆</a><h1><s:property value="user.username"/></h1>
登陆成功!!!!
</body>
</html>
复制代码

adminLoginPage.jsp

<%--Created by IntelliJ IDEA.User: Joey_TsaiDate: 2018/3/19Time: 14:14To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>管理员登陆界面</title>
</head>
<body>
<a href="/login">普通用户登陆</a>
<a href="/admin/login_adminLoginPage">管理员登陆</a><h1>管理员登陆</h1>
<s:form action="/admin/login_login" method="POST"><table><tr><td><s:textfield name="user.username" label="用户名" value="testadmin"/></td></tr><tr><td><s:password name="user.password" label="密码" value="123"/></td></tr><tr><td colspan="2" style="text-align: center"><s:submit value="登录"/></td></tr></table>
</s:form>
</body>
</html>复制代码

AdminLoginAction

<%--Created by IntelliJ IDEA.User: Joey_TsaiDate: 2018/3/19Time: 14:14To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head><title>管理员登陆界面</title>
</head>
<body>
<a href="/login">普通用户登陆</a>
<a href="/admin/login_adminLoginPage">管理员登陆</a><h1>管理员登陆</h1>
<s:form action="/admin/login_login" method="POST"><table><tr><td><s:textfield name="user.username" label="用户名" value="testadmin"/></td></tr><tr><td><s:password name="user.password" label="密码" value="123"/></td></tr><tr><td colspan="2" style="text-align: center"><s:submit value="登录"/></td></tr></table>
</s:form>
</body>
</html>复制代码

ErrorProcessAction

package com.zy.javaee.controller.actions;import com.opensymphony.xwork2.ActionContext;
import com.zy.javaee.controller.BaseAction;
import com.zy.javaee.domin.User;import java.sql.SQLException;/*** Created by Joey_Tsai on 2018/3/19.*/
public class ErrorProcessAction extends BaseAction {public String tryException() throws Exception {throw new Exception();}}复制代码

BaseAction

package com.zy.javaee.controller;import com.opensymphony.xwork2.ActionSupport;/*** Created by Joey_Tsai on 2018/3/19.*/
public abstract class BaseAction extends ActionSupport{private String directUrl;public String getDirectUrl() {return directUrl;}public void setDirectUrl(String directUrl) {this.directUrl = directUrl;}
}复制代码

struts2实验2:struts2.xml action中* ,{}以及${}相关推荐

  1. struts2:JSP页面及Action中获取HTTP参数(parameter)的几种方式

    本文演示了JSP中获取HTTP参数的几种方式,还有action中获取HTTP参数的几种方式. 1. 创建JSP页面(testParam.jsp) <%@ page language=" ...

  2. Struts2的配置 struts.xml Action详解

    在学习struts的时候,我们一定要掌握struts2的工作原理.只有当我们明确了在struts2框架的内部架构的实现过程,在配置整个struts 的框架时,可以很好的进行逻辑上的配置.接下来我就先简 ...

  3. struts2默认配置文件 struts-default.xml

    注:用的struts2的版本是2.1.6 strtus2的默认配置文件 struts-default.xml ,其中的默认的拦截器,包括其中的拦截器栈. 因为struts2的配置文件struts.xm ...

  4. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性

    有两种方式可以实现在Action中使用Servlet的API.一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony. ...

  5. struts2随笔(一)Action、struts.xml、Interceptor细节

    Struts2由Struts1和webWork两个经典MVC框架发展起来.与传统的Struts1相比,Struts2允许使用不同的Java对象作为Action.支持更多的视图技术,基于AOP思想的拦截 ...

  6. struts2 action中result参数详解

    chain 用来处理Action链 com.opensymphony.xwork2.ActionChainResult dispatcher 用来转向页面,通常处理JSP org.apache.str ...

  7. struts2的action中获得request response session 对象

    在struts2中有两种方式可以得到这些对象 1.非IoC方式 要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态 ...

  8. struts2在action中获取request、session、application,并传递数据

    假设仅仅是通过request.session.application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下: ScopeAction.java: package com.ithe ...

  9. struts2 的一个action中配置多个result input

    主题:struts2 的一个action中配置多个result input 讨论下 本文来自: 浪曦视频在线 作者: hoojo 发表于: 2009-6-4 19:05 阅读: 2005 人 收藏 看 ...

最新文章

  1. Android各大热补丁方案分析和比较
  2. 找不到或无法加载主类的原因之一
  3. Spring Cloud Alibaba - 02 SpringCloud 、 SpringCloud Alibaba 、SpringBoot的生产版本选择
  4. 石油大c语言答案,中国石油大学C语言答案
  5. union all怎么用在循环里_欧式边框在PPT里怎么用?我怎么好像没见过
  6. Linux 系统之虚拟化部署
  7. 某考试 T1 monopoly
  8. blazor wasm开发chrome插件
  9. 【转】AfxMessageBox、MessageBox、::MessageBox的区别
  10. 【数据处理】奇异值分解(SVD) 数据降噪的python实现
  11. 西门子g120变频器接线图_西门子G120变频器参数设置,快速使用
  12. Redis 雪崩、穿透、击穿
  13. 解决80端口被svchost.exe进程占用的问题
  14. QOS-CBWFQ\QOS-LLQ\QOS-PQ\QOS-CQ\QOS-WFQ
  15. SNP全称是什么? SNP是什么公司? SNP是什么意思?
  16. 解决No version of NDK matched the requested version编译报错的问题
  17. 【WSN通信】基于matlab A_Star改进LEACH多跳传输协议【含Matlab源码 487期】
  18. macOS忘记密码后如何修改密码
  19. 十个机器学习应用实例
  20. 经典算法之黑色星期五

热门文章

  1. 概率论中高斯分布(正态分布)介绍及C++11中std::normal_distribution的使用
  2. WaitForSingleObject和WaitForMultipleObjects用法
  3. 【ubuntu】ubuntu14.04、16.04、18.04 LTS版本支持时间
  4. Linux下PS1设置
  5. python 累积正态分布函数_为什么机器学习都围绕正态分布进行讨论?
  6. php ziparchive 压缩文件,php使用ZipArchive压缩打包文件
  7. 如何把html转换pdf,怎么把html转换成pdf
  8. nodemanager不能正常关闭_在什么情况下不能使用罗茨风机及如何正确关闭罗茨风机...
  9. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...
  10. 刀剑英雄登陆显示服务器繁忙,玩刀剑遇到问题解决方法