Action的方法访问:
1使用action标签中的 method 属性为这个name 指定一个方法(这个应该不用解释了)
2使用通配符的方法:
3.使用动态方法实现(不常用 而且麻烦 感兴趣自行百度)
为应用指定多个配置文件:
在<struts>中 加入<includefile=""/> 一般以模块来分开
配置全局性的result 在某个包下创建<global-result>节点再在其中建result节点 其中去定义一些属性
如果想要其他包也能访问到 可以继承该包,当然该包继承的是struts-defualt. 别的包继承了这个包 当然也继承了struts-defualt.和java的继承关系差不多.
常量配置:
将struts.devMode的value设置为true。从而当更改struts.xml文件后不需要重新启动服务就可以进行程序调试
<constantname="struts.devMode" value="true" />
<constantname="struts.i18n.encoding" value="UTF-8" />
当然还有很多常用的常量还有很多具体可以去百度下. 第二种配置常量的方法是在struts.properties 文件下去配置 感兴趣自行百度 但是不怎常用,因为第一种就够了。
Demo:
1.目录结构:
2.代码(代码中将所说到的都使用了):
1 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>
<constant name="struts.devMode" value="true"></constant>
<package name="default" extends="struts-default">
<global-results>
<result name="error">/WEB-INF/public/error.jsp</result>
</global-results>
</package>
<include file="student.xml"></include>
</struts>
2 student.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="student" extends="default" namespace="/student">
<action name="Question_*" class="com.lsy.Action.QuestionAction" method="{1}">
<!--修改name属性 不用通配符 使用method="getList"也行 -->
<result name="success">/WEB-INF/student/questionJsp.jsp</result>
<!--因为默认是forward转发 所以从后台可以访问到WEB-INF中的jsp-->
</action>
</package>
</struts>
3 QuestionAction.java
package com.lsy.Action;
import java.util.ArrayList;
import java.util.List;
import com.lsy.bean.Question;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class QuestionAction extends ActionSupport {
public String getList() throws Exception {
List<Question> qlist= new ArrayList<Question>();
for(int i=1;i<4;i++)
{
Question q =new Question("第"+i+"个题目!!!!","简答题",i+"");
qlist.add(q);
if(i==4){//用于一会测试全局result的配置
ActionContext.getContext().put("errmsg", "i=4所以跳到这个错误页面!!!");
return "error";
}
}
//往session域中添加试题集合
ActionContext.getContext().getSession().put("qlist",qlist);
return this.SUCCESS;
//SUCCESS为action接口里的常量,ActionSupport实现了action接口,这个又继承了这个ActionSupport类,故可以访问到
}
}
4 Question.java
package com.lsy.bean;
public class Question {
private String qname;
private String type;
private String answer;
public Question(String qname, String type, String answer) {
super();
this.qname = qname;
this.type = type;
this.answer = answer;
}
public Question() {
}
public String getQname() {
return qname;
}
public void setQname(String qname) {
this.qname = qname;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
}
5 jsp
<%@ page language="java" import="java.util.*" import="bean.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'questionJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<h3>试题信息!</h3>
<c:forEach items="${qlist}" var="question" varStatus="count">
第${count.index}道题:<br>
题目:${question.qname}<br>
类型:${question.type}<br>
答案:${question.answer}<br>
</c:forEach>
</body>
</html>
总结:虽然用到的都是基础 但一切的累积都从最小的开始最后再附上测试结果
,error这个全局result就不测试了 测试只需要更改一下java代码其中的 i 的大小即可。