文档章节

使用Action的动态方法调用

一语渡仙川公子
 一语渡仙川公子
发布于 2017/04/15 22:37
字数 733
阅读 17
收藏 0

加入form表单需要注册和登录按钮,则Struts2需要提供包含多个处理逻辑的action

action="actionName!methodName" 表示调用名为actionName的methodName的方法。

代码如下:

1.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>dmi</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <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>

2.配置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.custom.i18n.resources" value="mess"/>
	<constant name="struts.devMode" value="true"/>
	<!-- 动态方法调用 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	<package name="Demo" namespace="/" extends="struts-default">
		<action name="*">
			<result>/WEB-INF/content/{1}.jsp</result>
		</action>
		<action name="login" class="dmi.loginRegiestAction">
			<result name="success">/WEB-INF/content/welcome.jsp</result>
			<result name="error">/WEB-INF/content/error.jsp</result>
		</action>
	</package>	
  

</struts>

3.资源国际化

loginPage=\u767b\u5f55\u9875\u9762
errorPage=\u9519\u8bef\u9875\u9762
succPage=\u6210\u529f\u9875\u9762
login=\u767b \u5f55
regies=\u6ce8\u518c
user=\u7528\u6237\u540d
pass=\u5bc6 \u7801

4.loginForm表单

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><s:text name="loginPage"/></title>
</head>


<body>
	<form action="login">
	用户名:<input type="text" name="username"/><br/>
	密 码:<input type="password" name="password"/><br/>
	<input type="submit" value="注册" onclick="regiest()"/>
	<input type="submit" value="登录" onclick="this.form.action='login';"/>
	</form>
	
	<script type="text/javascript">
	function regiest(){

                <!--获取第一个表单-->
		targetForm = document.forms[0]; 
                <!--动态修改表单的action属性-->
		targetForm.action="login!regiest";
		
	}
	</script>
</body>


</html>

5.action处理类:

package dmi;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class loginRegiestAction extends ActionSupport{
	private String username;
	private String password;
	private String tip;
	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 getTip() {
		return tip;
	}
	public void setTip(String tip) {
		this.tip = tip;
	}
	
	
	public String regiest()throws Exception{
		ActionContext.getContext().getSession().put("username", getUsername());
		ActionContext.getContext().getSession().put("password", getPassword());
		setTip("恭喜您"+getUsername()+"已经注册成功了");
		return SUCCESS;
	}
	
	[@Override](https://my.oschina.net/u/1162528)
	public String execute() throws Exception {
		String username = (String) ActionContext.getContext().getSession().get("username");
		String password = (String)ActionContext.getContext().getSession().get("password");
		
		if(getUsername().equals(username)&&getPassword().equals(password)){
			setTip("欢迎"+getUsername()+",您已经登录成功了!");
			return SUCCESS;
		}
		return ERROR;
	}
	
}

6.登录成功和错误页面

welcome.jsp

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><s:text name="succPage"/></title>
</head>
<body>
	<s:property value="tip"/>
</body>
</html>

error.jsp

<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><s:text name="errorPage"/></title>
</head>
<body>
	对不起,请您先注册!
</body>
</html>

在此之前还需要导入Struts2 所需的jar包; 在使用动态方法调用之前,需要设置Struts2允许动态方法调用。抬起系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation的value为true。 Struts2 的动态方法调用会存在一些安全的缺陷,应该尽量少使用动态方法调用。``` 这里输入代码

© 著作权归作者所有

一语渡仙川公子
粉丝 0
博文 8
码字总数 3906
作品 0
毕节
私信 提问
【学习笔记11】动态方法调用和使用通配符定义action

动态方法调用: 如果Action中存在多个方法时,我们可以使用!+方法名调用指定方法。如下: public class HelloWorldAction{ } 假设访问上面action的URL路径为: /struts/test/helloworld.acti...

张超
2013/04/14
65
0
Struts2理解--动态方法和method属性及通配符_默认Action

众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Action中的任意方法。 想要禁止...

mifans
2016/09/30
49
0
play2.0文档-面向java开发者(2)

HTTP routing The built-in HTTP router (内置的HTTP router) The router is the component that translates each incoming HTTP request to an action call (a static, public method in a......

老盖
2012/04/06
815
1
struts2基于动态代理的Interceptor

struts2核心功能都是基于struts2拦截器的,而拦截器又是基于java的动态代理。 要实现struts2拦截器,需在struts.xml中配置拦截器,每个action可以指定拦截器,指定了拦截器之后默认的拦截器链...

cjun1990
2015/10/23
1K
0
如何解决动态调用和通配符调用无法访问的问题

在新版本中的truts2 为了安全,在动态调用下做了allowed-method方法的安全防范 如果要去使用动态调用,一定要把你所需要访问的方法,允许通过,才能正常访问,有以下四种配置方式: 1) stri...

AnyLiem
2018/04/14
18
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
6
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
17
0
浅谈java过滤器Filter

一、简介 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml...

青衣霓裳
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部