Struts 使用及整合笔记

1 基本使用
1.1 Struts 2  DMI 动态方法调用:可以指定调用方法可不是必须调用execute()方法。
如可以spacename/xxx!add 则表示调用add()方法而不是调用execute方法。


1.2 Struts 2 通配符的使用,它可以使配置量最小。(约定优于配置)
<action name="Student*" class="com.test.StudentAction" method="{1}">
<result>/Student{1}_success.jsp></result>
</action>
/Studentadd  则{1}表示add  会调用 add方法 找到Studentadd_success.jsp。


<action name="*_*" class="com.test.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>

</action>
则/Teacher_add 会匹配类com.test.TestcherAction  和 add()方法,跳转至Teacher_add_success.jsp页面。


1.3 Struts 2s传参方式(3种)

1.3.1 在action里写出属性和getter、setter方法。访问时直接传入如/test?name=zhangzhengyu&&password=123456
1.3.2 #最常用#用领域模型(Domain Medol)[VO:value object;DO:data object;DTO:data transfer object]
访问:/test?user.name=zzz&&user.password=123
在action里创建User user属性及其setter、getter方法。不需要创建User实例
1.4 模型驱动,实现ModelDriven接口;当struts2发现实现ModelDriven接口后会调用getModel()方法返回一个模型,
然后调用模型的setter方法将前台的参数放到模型里。这样就可以使用模型的getter方法来取得参数。
简略代码:
public class User{
			private String name;
			public void setName(String name){
				this.name = name;
			}
			public String getName(){
				return this.name;
			}
		}

	public class UserAction extends ActionSupport implements ModelDriven<User>{
			private User user = new Uesr();
			@override
			public User getModel(){
				return user;
			}
			public String add(){
				System.out.println(user.getName());
				return "success";
			}


努力固然重要,方法也不容忽视。


1.5 struts2中等到request session application 的方法:(2种)
1.5.1 Map request = (Map)ActionContext.getContext().get("request");
Map session = ActionContext.getContext().getSession();
Map application = ActionContext.getCjontext().getApplication();
2)实现RequestAware,SessionAware,ApplicationAware接口
简码:
public class TestAction extens ActionSupport implements RequestAware,SessionAware,ApplicationAware{
		private Map<String,Object> request;
		private Map<String,Object> session;
		private Map<String ,Object> application;
		@Override
		public void setRequest(Map<String ,Object> request){
			this.request = request;
		 }


		 @Override
		 public void setSession(Map<String ,Object> session) {
			this.session =  session;
		 }
		 @Override
		 public void setApplication(Map<String ,Object> application) {
			this.application =  application;
		 }
		 @Override
		 public String execute(){
			request.put("t1","helo");
			session.put("t2","world");
			application.put("t3","ni aho");
		 }
	}


1.6 得到HttpServletRequest,HttpSession,ServletContext对象:(2种方法)
1.6.1 HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
Servletcontext aplication = sesion.getServletContext();
{用相应的setAttribute(String param,Object val)方法}
1.6.2 实现ServletRequestAware接口:
简码:
class   implements  ServletRequestAware {
HttpServletRequest request;


@Overried
public void setServletRequest(HttpServletRequest requst) {
this.request = request;
}
}
//得到request后可用1)中相同 的方法得到Session 和 ServetContext
1.7 result 的结果类型:
1.7.1 dispatcher 服务器转发
1.7.2 redirect 客户端转发
1.7.3 chain 转至另一个 action继续处理(服务器端跳转),暂不返回给客户端
如:<action name="t1">
<result type="chain" >t2</result>
</action>
<action name="t2" class="com.test.Test">
<result>/test.jsp</result>
</action>
1.7.4 redirectAction 不做任何处理而交给别的action来处理
如:<action name="t1">
<result type="redirectAction" >t2</result>
</action>
<action name="t2" class="com.test.Test">
<result>/test.jsp</result>
</action>
1.8 global-results 配置共享的跳转结果
<package name="test" namespace="/" extends="struts-default.xml">
<global-results>
<result name="index">/index.jsp</result>
</global-results>
</package>


1.9 动态结果集
action:
class ... {
private String filedParam;
....
if(type == 1)
filedParam = "/main/index.jsp";
else 
filedParam = "/second/check.jsp";
}

struts.xml :
...
<result>${filedParam}</result>
...
//${filedParam}会取得action里的filedParam的属性值,进而根据filedParam动态指定的值跳转到指定页面。
1.10 dispatcher:一次request只有一个值栈。使用dispatcher在服务器端forward时,客户端只请求了一次,因此只有一个值栈。
dispather的多个目标action都可以共享这个值栈。也就是说跳转到其他action可以直接访问request请求的action里的参数。
redirect:不同于dispatcher,每次redirect都相当于客户端发出了新请求。因此request请求的action里的参数不能被redrect的目标
action访问。要想传递参数,要使用如下方法:
class ... {
...
private String param;
... getter and setter...
//change value of param
...
}
xml of configuration:
<action name="" class="">
<result>/main/test.jsp?param=${param}</result>
</action>


1。界面原型
2。设计数据库
3。确定架构
4。用什么样的约定,在编码和配置的时候用什么约定形成文档,应当具体,没一个类的命名、数据库表的命名等。


2 struts 2 OGNL (object-graph navigation language)
2.1 在使用DomainModel时并没有创建实例,当前台页面给相应的属性传值时会自动创建一个实例。
例如:<a href="/test?user.name=zzzz&&password=123" ></a>
则在后台会创建User的实例并赋值。
可以手动的创建一个User的实例。
2.2 Struts 2 里访问静态方法需要在struts.xml里配置
<constant name=”struts.ognl.allowStaticMethodAccess” value=”true”></constant>
访问方法@类名@方法名
如 : om.test.ClassName@StaticMethodInClassName()
访问Math类的静态方法,如:
<s:property value=”@@max(2,4)” />
2.3 <s:property value=”#username” />  #表示直接从ActionContext里取值
2.4 过滤
2.4.1 User.{?#this.age==1}.{age}[0] this 代表当前循环的对象 user.{?#this.age==1}, user.{?#this.age==1}.{age}都返回的是集合
2.4.2 ?代表过滤条件  ^以什么开始 $以什么结束
例如,user.age=1,2,3
user.{^#this.age>1}.{age}    为age=2
user.{$#this.age>1}.{age}    为age=3
因为age>1的有age=2,age=3,^表示开头的那个,即第一个,$表示结尾的那个,即最后一个。
2.5 <s:property value=””[0]” /> [0]表示值栈中第一个对象(栈顶元素,最后入栈的元素)[1]表示第二个对象。栈顶元素是action的对象。
2.6 #request.paraName  取得request范围内的参数
2.7 #parameters  取得ActionContext范围内的参数
3 Struts 2 标签
3.1 Action 里 this.addFieldError(“action.error”,”error“);
3.2 <s:property value=”username” /> 后台有username 属性
3.3 <s:property value=”’ ‘username’ ’” /> 值就是username
3.4 Value=””admin”  后台没有或者没有取到值,可以用default=””defaultValue” 设置默认值。取到值时用取到的值,没有取到用默认值。
3.5 输出html:<s:property value=””<hr/>” escape=”””false”/> 默认是true,是true时会输出<hr/> 设置为false,则会输出为横线。
3.6 <s:set var=”adminName” value=”listOrsetField” /> set的默认范围是request和ActionContext
3.7 <s:if test=”age < 0”>条件为真则显示此处</s:if> 
<s:if test=”#parameters.age[0] < 0”>条件为真则显示此处</s:if> 
test里是验证条件。
3.8 <s:set var=”varName” value=”#parameters.age[0]”></s:set>相当于定义了一个 varName的变量,变量的值为#parameters.age[0],以后便可以使用varName来引用#parameters.age[0]。
3.9 <s:iterator value=”{‘aaa’,’bbb’,’ccc’}” var=”varName”status=”status”>
<s:property/>输出当前元素
<s:property value=”#varName”/>输出当前元素
<s:property value=”#status.count”/>统计总数
<s:property value=”#status.index”/>当前变量的索引值
status还有even,odd,first,last等属性
可以如下定义 一个map,注意 # 
<s:iterator value=”#{1:’aaa’,2:’bbb’,3:’ccc’}”var=”varName”status=”status”>
<s:property value=”#varName.key”/>输出当前所遍历键值对的键
<s:property value=”#varName.value”/>输出当前所遍历键值对的值。如果没有定义varName也可以如下直接访问
<s:property value=”key”/>
<s:property value=”value”/>
4 Struts 2 的动作管理委托给spring
4.1 利用MyEclipse添加对struts、spring的支持。整合时需要用到struts2-spring-plugin2.x.jar包。其他包正常。也可手动将所需要的jar文件复制到WEB-INF/lib下。
4.2 框架支持正确部署好后:
4.2.1 修改web.xml文件,如下:
<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>
  <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  
  </listener>
  <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
</context-param>



4.2.2 修改struts.xml,添加如下信息:
<constant name="struts.i18n.encoding" value="UTF-8" />
<include file="struts-plugin.xml"></include>
<constant name="struts.objectFactory" value="spring" />
<package name="test" namespace="/" extends="struts-default">
<action name="ognl" class="ognl">
<result name="success">/ognlTest.jsp</result>
</action>
</package>


4.2.3 修改applicationContext.xml,添加如下信息:
<bean id="property" class="com.jiyi.utils.PropertyImpl">
<property name="fileName" value="D:/Program Files/apache-tomcat-6.0.35/webapps/L1302/WEB-INF/properties/filePath.properties"></property>
</bean>
<bean id="ognl" class="com.jiyi.web.Test" scope="prototype">
<property name="prop"><ref bean="property" /></property>
</bean>


4.3 注意:
○1 web.xml中配置加载spring配置文件的监听器,有多个文件可以用”,”半角英文逗号隔开。
○2 struts.xml中的action类不再是类名,而是在spring配置文件applicationConext.xml中对应的id(默认策略为name,表示spring会自动地搜索beans中id与name同名的bean,可以通过在struts.xml中设置<constant name="struts.objectFactory.spring.autoWire" value="name" />更改)





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值