Struts基础小结----Action配置与其他基础

一个Struts的配置:
<struts>
	<constant name="struts.devMode" value="true" />
	<package name="user" namespace="/user" extends="struts-default">
		<!-- global result , 大家共用的结果集! 在这个package里面是共用的 -->
		<global-results>
			<result name="mainpage">/main.jsp</result>
		</global-results>

		<action name="index">
			<result>/index.jsp</result>
		</action>
		<action name="user" class="com.struts2.action.UserAction">
			<result>/user_success.jsp</result>
			<result name="error">/user_error.jsp</result>
		</action>
	</package>

	<!-- admin包, 继承自user包 -->
	<package name="admin" namespace="/admin" extends="user">
		<action name="admin" class="com.struts2.action.AdminAction">
			<result>/admin.jsp</result>
		</action>
	</package>
</struts>
一、Action
Namespace 决定了 action 的访问路径
当namespace为空(默认为空)时,则当其他Package处理不了时,就是这个package来处理action。
1. Package和类中的作用一样,区分重名。
2. <resultname=“success”>默认就是success,可以不写。
3.  当Myeclipse中 复制 web 项目,访问的还是原来的项目。点属性,改web— web myeclipse Context-root的路径。

1.  JSP 默认编码是ISO-8859-1,改的话,在eclipse设置-->搜索jsp-->选中国。然后就变成 GB18030了。
2. Action中的 class=“com.struts2.IndexAction”,意思是:当访问action时,他就会去找对应的类,然后执行里面的 execute ()方法。函数的返回值就是 result name 对应的属性值
3. 当不配置class时,他默认找到的是ActionSupport这个类。开发中只用继承自ActionSupport的方式.因为ActionSupport已经帮我们继承了一些常用的方法.
4. Struts1/Struts2中Action区别:Struts2在每次访问action对应的class时,都会new一个新的出来,而struts1则只有一个,存在同步问题。
解决中文编码问题:  <constantname=" struts.i18n.encoding" value="GBK"/>

二、 路径问题pathDMI动态方法调用
1. 当设定namespace后,访问action时,会在路径上加上namespace。而要在页面中使用相对路径链接,则会加上多余的路径,这样会访问出错。
解决办法:永远 用绝对路径。(也不能直接用‘\’,这样访问的是apache的初始页面)。
<%String path = request.getContextPath();  String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
然后可以这样写 :href=“ <%= basePath %> myJsp.jsp”
<base  href = “<%= basePath %>”> 这句后, 和一般情况的写法就一样了.这样写  href=“ myJsp.jsp”
2. Action中可以指定调用的方法, 不一定非要调用execute()方法。添加method属性即可。
3.  DMI就是在URL地址中动态指定:/action!add          ( action 类中的方法):好处是当有很多方法时,可以动态指定调用。而不用配置那么多Action。

三、 ActionWildcard通配符、用Action的属性接收参数
1. 使用通配符, 将配置量降到最低
2. 约定优于配置。(项目中关于怎么取名的约定)。
3. {1},{2}代表action名字中第一个*,第二个*。
当项目组定好命名规范后,直接用通配符和可以匹配出 JSP文件。当有多个都能匹配的时候,就按先后顺序进行匹配了。
4.  参数传递
在对应Action的 中,设置属性,并 设定 set get 方法,那么在地址中输入参数的时候,会 自动取出数据。(类型会自动转换。内部实现调用的是set、get方法,所以当改变set方法里的名字时,只要set Name与传递的 name=XX相对应就行了)。

四、 DomainMode参数传递
1. Dto数据传输对象,VO:valueobject值对象。通常用于业务层之间的数据传递。两者一个意思。
2.  什么时候用 DTO?
传递的参数和 DomainMode 匹配不上时,  用DTO解决。当然还能用属性接收,然后再传。
3. DomainMode就是把要传递的参数封装成一个类。
例子访问方式: http://localhost:8080/ XXX项目名/a1!add?student.name=xuneng&student.age=22

五、 ModelDriven参数传递
1. 这种参数传递的方法并不常用,但是里面隐含的程序设计思想很重要
2.  ModelDriven 模型驱动
MVC(Model View Controller)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。解耦M与V。
MVC是一个设计模式,它强制性的使 应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器(分发器)。它们各自处理自己的任务。
3.  Struts 中的 MVC:V----JSP页面,M----后台建立的那些Model,C----各种各样的Action。
4. 通过getModel方法来调用model中的方法。
5.  Struts2重点放在Controller部分。写来写去都在写 Action。Model再进一步的封装就是hibernate的实现了。

六、 简单的数据校验SimpleDataValiation
1. 查看别人的程序:
先看视图页面,看实现了什么功能。 根据实现的某个功能顺着这条线读。这条线是能单独拿出来运行的。顺着某条线读,会从视图à代码à数据库等。
2. 数据校验:
addFieldError(。。)。中添加数据校验出错信息。
在JSP文件中<%@taglib uri=“/struts-tags” prefix=“s”%>在JSP中应用其他标签库,prefix指定前缀。
3. 带格式打印错误信息:  s:fielderror 。
< s:propertyvalue=" errors.name[0]"/><!--这样拿出来的直接是自己设定的错误消息,没有带格式-->
< s:debug />打印debug信息。

七、 访问WEB元素,IncludeModules模块包含
1. Web元素: requestsessionapplicationHttpServletRequestHttpSessionServletContext
2. Struts在http请求和map对象之间建立了连接,因此我们可以拿到request、session、application对象。
<s:propertyvalue= “#request.request1”/>加#号后与debug中的对应。
3. 本来是自己控制的, 交给别人控制了.就是 控制反转.Spring中就是通过配置文件来进行控制的。
4. 就是在Struts.xm中包含其他xml文件:<includefile=“l.xml”>
意义:多人开发时,自己写自己的配置文件。Struts中只写公用的。防止冲突。

八、 Action其他
1. DefaultAction: < default-action-ref name="default"/>
就是当找不到时,默认使用的Action.即使当输入的是不存在的Action时,他仍然能找到该Action.
作用: 当用户输入错误时,可以指定默认的错误页,或者指定为主页。
2. 关于查找错误: 排除环境问题,拷到其他电脑、设备。配置问题。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值