过一下Struts2-3

1. Struts2处理传入多个值
  • 多个字符串参数传入后台

关键代码:
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>
	<package name="helloworld" extends="struts-default">
		<action name="hobby" class="com.bee.action.HobbyAction">
            <result name="success">success.jsp</result>
        </action>
	</package>
</struts>

HobbyAction.java

public class HobbyAction implements Action {

	private String[] hobby;

	public String[] getHobby() {
		return hobby;
	}

	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}

	@Override
	public String execute() throws Exception {
		System.out.println("执行了Action的默认方法");
		if (hobby != null) {
			for (String h : hobby) {
				System.out.println(h);
			}
		}
		return SUCCESS;
	}

}

hobby.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="hobby" method="post">
	爱好:
	<input type="checkbox" name="hobby" value="唱歌"/>唱歌
	<input type="checkbox" name="hobby" value="跳舞"/>跳舞
	<input type="checkbox" name="hobby" value="睡觉"/>睡觉
	<input type="checkbox" name="hobby" value="玩CF"/>玩CF
	<input type="submit" value="提交"/>
</form>
</body>
</html>
  • 多个JavaBean参数传入后台

关键代码:

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>
	<package name="helloworld" extends="struts-default">
        <action name="student" class="com.bee.action.StudentAction">
            <result name="success">success.jsp</result>
        </action>
	</package>
</struts>

Student.java

public class Student {

	private String name;
	private String sex;
	private int age;

	public String getName() {
		return name;
	}

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

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}

}

StudentAction.java

public class StudentAction implements Action {

	private List<Student> students;

	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}

	@Override
	public String execute() throws Exception {
		System.out.println("执行了Action的默认方法");
		for (Student s : students) {
			System.out.println(s);
		}
		return SUCCESS;
	}

}

addstudents.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="student" method="post">
	<table>
		<tr>
			<th>姓名</th>
			<th>性别</th>
			<th>年龄</th>
		</tr>
		<tr>
			<td><input type="text" name="students[0].name"/></td>
			<td><input type="text" name="students[0].sex"/></td>
			<td><input type="text" name="students[0].age"/></td>
		</tr>
		<tr>
			<td><input type="text" name="students[1].name"/></td>
			<td><input type="text" name="students[1].sex"/></td>
			<td><input type="text" name="students[1].age"/></td>
		</tr>
		<tr>
			<td colspan="3">
				<input type="submit" value="提交"/>
			</td>
		</tr>
	</table>
</form>
</body>
</html>
2. struts.xml的配置
  • package标签

name 标识包。项目分包(模块化组织),package包含action标签。即可以并列多个package标签。

extends 继承

namespace 包命名空间。指定的值将作为URL中action标签中name定义的访问路径的前缀。值的形式 namespace="/fore"。
比如:

<package name="helloworld" namespace="/fore" extends="struts-default">
	<action name="user" class="com.bee.action.UserAction">
		<result name="success">success.jsp</result>
	</action>
</package>

则访问的URL为 http://localhost:8080/ProjectName/fore/user
注意:success.jsp的URL变为了 http://localhost:8080/ProjectName/fore/success.jsp
如果success.jsp在WebContent目录下,则要写作:

<result name="success">${pageContext.request.contextPath}/success.jsp</result>

abstract 抽象包,主要用于其他包来继承它。

<package name="infoFilter" abstract="true"></package>
  • action标签

name 定义URL的访问路径。

class 请求处理类

method 指定Action处理类中是哪个方法来处理http请求。

<package name="background" namespace="/back" extends="struts-default">
  	<action name="studentList" class="com.bee.action.BackStudent" method="show">
  		<result name="success">${pageContext.request.contextPath}/success.jsp</result>
  	</action>
</package>

指定com.bee.action.BackStudent类中的show()方法来处理 /back/studentList 请求。

3. struts.xml分模块的配置方法
  • 配置文件

  • 配置内容

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>
  <package ...>
	<action ...>
	</action>
	<action ...>
	</action>
	...
  </package>
  
  <include file="cheliang.xml"></include>
  <include file="zichan.xml"></include>
</struts>

cheliang.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>
  <package name="cheliang" namespace="/cheliang" extends="struts-default">
  	<action name="cheliang" class="com.bee.action.CheLiangAction">
  		<result name="success">${pageContext.request.contextPath}/success.jsp</result>
  	<!-- 一启用namespace,jsp的位置就需要如上设定 -->
  	</action> 
  </package>
</struts>

zichan.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>
  <package name="zichan" namespace="/zichan" extends="struts-default">
  	<action name="zichan" class="com.bee.action.ZiChanAction">
  		<result name="success">${pageContext.request.contextPath}/success.jsp</result>
  	<!-- 一启用namespace,jsp的位置就需要如上设定 -->
  	</action>
  </package>
</struts>

测试结果

4. 使用通配符
  • 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>
	<package name="helloworld" extends="struts-default">
		<action name="hello" class="com.bee.action.HelloWorldAction2">
			<result name="success">helloworld.jsp</result>
		</action>
		
		<action name="user" class="com.bee.action.UserAction">
			<result name="success">success.jsp</result>
			<result name="error">error.jsp</result>
		</action>
		...
	</package>
	<!-- package的name仅是用于标识区分。默认名字空间namespace="/" -->
	<package name="manage" extends="struts-default">
		<action name="Student_*"
			class="com.bee.action.StudentAction" method="{1}">
			<!--这里的{1}就是前边通配符*所指代的内容-->
			<result name="success">success.jsp</result>
		</action>
		
		<action name="Grade_*" class="com.bee.action.GradeAction"
			method="{1}">
			<!--这里的{1}就是前边通配符*所指代的内容-->
			<result name="success">success.jsp</result>
		</action>
	</package>
</struts>
  • success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
登录成功! ${name }
</body>
</html>
  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>通配符</title>
</head>
<body>
<h1>通配符</h1>
<a href="Student_list" target="_blank">学生信息查询</a>&nbsp;
<a href="Student_add" target="_blank">学生信息添加</a>&nbsp;
<a href="Student_update" target="_blank">学生信息修改</a>&nbsp;
<a href="Student_delete" target="_blank">学生信息删除</a>&nbsp;
<br/><br/>
<a href="Grade_list" target="_blank">班级信息查询</a>&nbsp;
<a href="Grade_add" target="_blank">班级信息添加</a>&nbsp;
<a href="Grade_update" target="_blank">班级信息修改</a>&nbsp;
<a href="Grade_delete" target="_blank">班级信息删除</a>&nbsp;<br/>
</body>
</html>
  • GradeAction.java
package com.bee.action;

import com.opensymphony.xwork2.ActionSupport;

public class GradeAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String name;

	public String getName() {
		return name;
	}

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

	public String list() throws Exception {
		System.out.println("班级查找");
		name = "班级查找";
		return SUCCESS;
	}

	public String add() throws Exception {
		System.out.println("班级添加");
		name = "班级添加";
		return SUCCESS;
	}

	public String update() throws Exception {
		System.out.println("班级修改");
		name = "班级修改";
		return SUCCESS;
	}

	public String delete() throws Exception {
		System.out.println("班级删除");
		name = "班级删除";
		return SUCCESS;
	}

}
  • StudentAction.java
package com.bee.action;

import com.opensymphony.xwork2.ActionSupport;

public class StudentAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String name;

	public String getName() {
		return name;
	}

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

	public String list() throws Exception {
		System.out.println("学生查找");
		name = "学生查找";
		return SUCCESS;
	}

	public String add() throws Exception {
		System.out.println("学生添加");
		name = "学生添加";
		return SUCCESS;
	}

	public String update() throws Exception {
		System.out.println("学生修改");
		name = "学生修改";
		return SUCCESS;
	}

	public String delete() throws Exception {
		System.out.println("学生删除");
		name = "学生删除";
		return SUCCESS;
	}

}

  • 通配符的另一种形式(struts.xml中配置)
	<package name="manage" extends="struts-default">
		<action name="*_*" class="com.bee.action.{1}Action"
			method="{2}">
			<!-- 上边的{1}指代第一个通配符*,{2}指代第二个通配符* -->
			<result name="success">success.jsp</result>
		</action>
	</package>
  • 一个小问题的处理
    eclipse右下角

    如何关闭优化掉它?
    菜单->Window->Preferences

    可以取消:
    DTD Validator,XML Schema Validator,XML Validator。
5. 动态方法调用(不推荐使用)
  • 在struts.xml中配置启用动态方法调用并配置url与Action类的映射
<?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>
  <package ...>
	<action ...>
	</action>
	<action ...>
	</action>
	...
  </package>
  
  <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  	<package name="manage" extends="struts-default">
		<action name="student"
			class="com.bee.action.StudentAction">
			<result name="success">success.jsp</result>
		</action>

		<action name="grade" class="com.bee.action.GradeAction">
			<result name="success">success.jsp</result>
		</action>
	</package>
</struts>
  • 在html中使用“!”调用ActionSupport类方法
<h1>动态方法调用</h1>
<a href="student!list" target="_blank">学生信息查询</a>&nbsp;
<a href="student!add" target="_blank">学生信息添加</a>&nbsp;
<a href="student!update" target="_blank">学生信息修改</a>&nbsp;
<a href="student!delete" target="_blank">学生信息删除</a>&nbsp;
<br/><br/>
<a href="grade!list" target="_blank">班级信息查询</a>&nbsp;
<a href="grade!add" target="_blank">班级信息添加</a>&nbsp;
<a href="grade!update" target="_blank">班级信息修改</a>&nbsp;
<a href="grade!delete" target="_blank">班级信息删除</a>&nbsp;<br/>

href中的!可以直接调用ActionSupport子类中定义的方法。比如student!list可以调用StudentAction类的如下方法:

	public String list() throws Exception {
		System.out.println("学生查找");
		name = "学生查找";
		return SUCCESS;
	}
6. Action的生命周期

每次url对Action的请求都会产生一个新的Action实例。

  • struts.xml
    <package name="manage" extends="struts-default">
		<action name="hello" class="com.bee.action.HelloAction">
			<result name="success">success.jsp</result>
		</action>
	</package>
  • HelloAction.java
public class HelloAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public HelloAction() {
		System.out.println(this); //每次产生不同的实例
	}

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

println(this)的输出如下:

com.bee.action.HelloAction@625cf813
com.bee.action.HelloAction@2779c058
com.bee.action.HelloAction@3958fb5d
com.bee.action.HelloAction@d64c3a4

发现是不同的实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值