Struts2学习笔记

Struts2.1(因为是学习笔记,所以会不定期的更新,接着往下写)
一:Myeclipse的简单操作
1.	将类进行源码展示:
右击Jar包->Properties->Java Source Attachment->
F:/JAR_Total/Struts/struts2.x/struts-2.1.8.1/src/core/src/main/java
2.	文档的展示:
右击Jar包->Properties->JavaDoc Loction->
file:/F:/JAR_Total/Struts/struts2.x/struts-2.1.8.1/docs/struts2-core/apidocs/
之后出现新类的时候直接按F1就可以在Myeclipse中查看文档
3.	Struts.xml不自动提示
a)	window – preferences – 搜索 catalog  
b)	选择key type为URI
c)	key: http://struts.apache.org/dtds/struts-2.0.dtd
d)	location: 对应的dtd文件,位于struts-core包中,解压开,指定相应位置,如:D:\share\0750_Struts2.1.6\soft\struts-2.1.6\lib\struts2-core-2.1.6\struts-2.0.dtd
4.	右击项目->java->compliance->compiler compliance level->1.6
5.	常量的配置保存在struts2-core-2.1.8.1.jar->org.apache.struts2->default.properties
二:NameSpace

a)	namespace决定了action 的访问路径,默认为“”,可以接收所有路径的action,例如
http://localhost:8080/Test/asdfasdfas/sdgsdg/sdfsdfsd/index.jsp
b)	当将现有的项目拷贝出来一份以后,一定要记得,右击项目->Properties->Myeclipse->Web,将Web Context-root修改掉。
三:Action

a)	 具体视图的返回可以由用户自己定义的Action来决定
b)	 具体的手段是根据返回的字符串找到对应的配置项,来决定试图的内容
c)	 具体Action的实现可以是一个普通的Java类,里面有public String              execute()方法即可	
d)	修改默认编码:windows->preference->JSP
e)	Struts2的Action在每次访问时必定会new一个,而Struts1的Action在每次访问的时候可能只有new了一个
f)	实现Action的三种方法:
1.	直接写类名称+execute()方法
2.	继承自ActionSupport类+execute()方法
3.	实现自Action接口+execute()方法
四:Path_路径问题
a)	Struts2中的路径问题是根据Action的路径而不是Jsp的路径来确定,所以尽量不要使用相对路径<br>虽然可以用Redirect方式解决,但是Redirect方式并非必要的。<br>解决方法非常简单,统一使用绝对路径(在Jsp中使用request.getContextRoot方式来拿到webapp的路径,或者使用Myeclipse自己写的) 



五:ActionMethod
1.	Action执行的时候不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来制定执行哪个方法 ,也可以在在url地址中动态制定(动态方法调用DMI),还可以使用通配符来进行操作
(user是命名空间,userAdd是Actino的名称)
http://localhost:8080/Struts2_0400_Path_ActionMethod/user/userAdd
(action!method.action,user是Action的名称,userAdd是方法名)
http://localhost:8080/Struts2_0400_Path_ActionMethod/user!userAdd

六:ActionWildcard(通配符)
	使用通配符,将配置降到最低,不过,一定要遵循“约定优于配置”原则
        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action">
            <result>/{1}_{2}_success.jsp</result>
        </action>

七:接收参数的方式

1.	用Action的属性接收参数
<a href="<%=basePath%>user/user!add?name=lp&age=20">用Action的参数接收属性</a>

	private String nameString;
	private int age;
	public void setName(String name){(name的名称与参数名称一致就行了)
		this.nameString = name;
	}
2.	用DomainModel接收参数
private User user;

<a href="user/user!add?user.name=a&user.age=8">添加用户</a>
3.	用ModelDriven接收参数
<a href="user/user!add?name=a&age=8">添加用户</a>

//实现ModelDriven接口(记住使用泛型,否则需要类型强制转换)
public class UserAction extends ActionSupport implements ModelDriven<User>{
	
		//此处必须实例化对象,而不是使用setter和getter方法
	private User user = new User();

		@Override
		public User getModel() {
	    	return user;
	}
八:简单数据验证 

1.	简单数据验证1

Action
		if(name == null || !name.equals("admin")){
			this.addFieldError("name", "name is error");
			return ERROR;
		}
JSP
		<s:fielderror fieldName="name" theme="simple"/>
			<br />
		<s:property value="errors.name[0]"/>
		<s:debug></s:debug>

九:访问web元素(详见另外一份文档)

十:模块包含(IncludeModlus)

	Struts.xml:
		<struts>
			<include file=”login.xml”>
		</struts>
	Login.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="login" extends="struts-default" namespace="/login"> 
        <action name="login" class="com.bjsxt.struts2.user.action.LoginAction">
            <result>/user_login_success.jsp</result>
        </action>
    </package>
</struts>

十一:默认Action
	    <struts>
    <package name="default" extends="struts-default" namespace="/"> 
        <default-action-ref name="index"></default-action-ref>
        <action name="index" class="com.bjsxt.struts2.user.action.LoginAction">
            <result>/user_login_success.jsp</result>
        </action>
    </package>
    </struts>

十二:默认Result_Type
	dispatcher
	redirect
	chain
	redirectAction
	freemarker
	httpheader
	stream
	velocity
	xslt
	plaintext
	tils
	    <struts>
	    <package name="resultTypes" extends="struts-default" namespace="/r"> 
	        <action name="r1" class="com.bjsxt.struts2.user.action.LoginAction">
	            <!-- 服务器端跳转,不能跳转到Action,只能跳转到试图 -->
	            <result type="dispatcher">/user_login_success.jsp</result>
	        </action>
	        <action name="r2" class="com.bjsxt.struts2.user.action.LoginAction">
	            <!-- 客户端跳转,不能跳转到Action,只能跳转到试图 -->
	            <result type="redirect">/user_login_success.jsp</result>
	        </action>
	        <action name="r3" class="com.bjsxt.struts2.user.action.LoginAction">
	            <!-- 使用forward的方式访问Action -->
	            <result type="chain">r1</result><!-- aaa/r1 -->
	        </action>
	        <action name="r4" class="com.bjsxt.struts2.user.action.LoginAction">
	           <!-- 客户端跳转,跳转到Action  -->
	            <result type="redirectAction">r2</result>	        </action>
	    </package>
	    </struts>

十三: Global_Results(全局结果集)
Struts.XML代码:
<package name="user" extends="struts-default" namespace="/user">
		<global-results>
			<result name="mainpage">/main.jsp</result>
		</global-results>
		<action name="user" class="com.action.UserAction">
			<result>/user_login_success.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
	</package>
	
	<package name="admin" namespace="/admin" extends="user">
		<action name="admin" class="com.action.AdminAction">
			<result>/admin.jsp</result>
		</action>
	</package>
UserAction代码:
	public String execute(){
		if(type==1){
			return SUCCESS;	
		}else if(type==2){
			return ERROR;
		}else {
			return "mainpage";
		}
		
	}
十四: Dynamic_Results(动态结果集)
	Action代码:
	public String execute() throws Exception {
		if(type == 1) r="/user_success.jsp";
		else if (type == 2) r="/user_error.jsp";
		return "success";
	}
	XML代码:
	    <package name="user"namespace="/user"extends="struts-default">
    	
	    <actionname="user"class="com.bjsxt.struts2.user.action.UserAction">
	    	<result>${r}</result>
	    </action>	    
    </package>

十五:带参数的结果集(客户端跳转时候才用到)
XML代码:		
<package name="user" namespace="/user" extends="struts-default" >

		<action name="user" class="com.action.UserAction">
			<result type="redirect">/user_success.jsp?t=${type}</result>
			<!-- 原本所有Action公用一个值栈,可以直接访问type属性,现在进行客户端跳转,不共享同一个值栈了,不可以再访问到type属性,所以使用以上方式进行参数的传递 -->
		</action>
	</package>
JSP代码:
    <!-- s:property是从值栈中取值,XML中客户端重新发了一次请求给JSP,但是此时值栈中已经为null了,故而取不到 -->
    from valueStack:<s:property value="t"/><br>
from actionContext:<s:property value="#parameters.t"/>
访问地址:
http://localhost:8080/.../...?type=1


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值