- 浏览: 978179 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
Struts2.0深入学习 Strust2与Servlet API,Action多方法调用,result标签的type的类型
- 博客分类:
- Struts2
Struts2深入探索:
1,package中的abstract="true"表示该package里面不能包函action元素
2,package中若指定namespace="/mynamespace"则:
<!--
包的namespace要以"/"开头,对应的页面的路径前面也加上/mymengya/ActionName.action
如:<s:form action="/mymengya/register.action" method="post" theme="simple">
-->
<package name="mengya" extends="struts-default" namespace="/mymengya">
<action name="register"
class="com.mengya.action.RegisterAction">
<result name="success">/show.jsp</result>
<result name="input">/index.jsp</result>
<result name="invalid.token">/index.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
在页面form的action中也要加上/mynamespase并且还要加上后缀action(不管是不是用的struts标签)
3,模型驱动
/**
* 模型Bean
* @author 张明学
*
*/
public class RegisterBean {
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Action则要接实com.opensymphony.xwork2.ModelDriven接口:
public class RegisterAction extends ActionSupport implements ModelDriven {
/**
* 模型驱动,该模型Bean必须实例化
*/
private RegisterBean loginBean = new RegisterBean();
public Object getModel() {
return loginBean;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
对应页面则可以直接用模型Bean的属性
如:<tr>
<td>
用户名:
<s:textfield name="username"></s:textfield>
<%-- 将form的theme="simple"就可以自由布局了,对于fielderror加上name属性就可以显示这个属生的错误信息 --%>
<s:fielderror name="username"></s:fielderror>
</td>
</tr>
<tr>
<td>
密码:
<s:password name="password"></s:password>
<s:fielderror name="password"></s:fielderror>
</td>
</tr>
<s:property value="username"/>
<s:property value="password"/>
5,表单重复提交:
一,在form里面加上<s:token id="register"></s:token>标签
二,在Action里加上<interceptor-ref name="token"></interceptor-ref>拦截器
默认拦截器:<interceptor-ref name="defaultStack"></interceptor-ref>
三:原理:
当页面第一次生成的时候<s:token id="register"></s:token>会生成一个隐藏表单域其中包涵一个值,该值也同样被存放到session当中去了
当页面第一次提交的时候token拦截器会比较这两个值是否相同,相同则第一次提交,第一次提交后会把session这个值清空,表单若再一次提交时则
session当中没有值即两个值不相同提交失败,返回的resut的name为:invalid.token 即:<result name="invalid.token">/index.jsp</result>
<s:form action="/mymengya/register.action" method="post" theme="simple">
<s:token id="register"></s:token>
<table width="50%">
<tr>
<td>
用户名:
<s:textfield name="username"></s:textfield>
<s:fielderror name="username"></s:fielderror>
</td>
</tr>
<tr>
<td>
密码:
<s:password name="password"></s:password>
<s:fielderror name="password"></s:fielderror>
</td>
</tr>
<tr>
<td>
<s:submit value="注册"></s:submit>
</td>
</tr>
</table>
</s:form>
<package name="mengya" extends="struts-default" namespace="/mymengya">
<action name="register"
class="com.mengya.action.RegisterAction">
<result name="success">/show.jsp</result>
<result name="input">/index.jsp</result>
<result name="invalid.token">/index.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
修改Struts2默认的重复提交的错误提示信息:
在Struts2国际化属性文件中添加一条信息:
struts.messages.invalid.token = \u8868\u5355\u4e0d\u5141\u8bb8\u91cd\u590d\u63d0\u4ea4
struts.messages.invalid.token = 不能重复提交
6,Strust2与Servlet API
第一种方式:使用ActionContext
/** * ActionContext类降低了与servlet API的耦合(获得不了response) */ // 实例化,用ActionContext的getContext()静态方法 ActionContext actionContext = ActionContext.getContext(); // 与request.setAttribute("mengya", "xiaobo")类似 actionContext.put("mengya", "xiaobo"); // request.getAttribute("mengya")类似 actionContext.get("mengya"); // 相当于ServletContext // Returns a Map of the ServletContext when in a servlet environment or // a generic application level Map otherwise actionContext.getApplication(); // 相当于HttpServletSession Map session = actionContext.getSession(); // 相当于request.getParameterMap(); Map parametersMap = actionContext.getParameters();
第二种方式:让Action实现ServletRequestAware或ServletResponseAware接口
/**
* 获得HttpServletRequest 实现ServletRequestAware接口
*
* @author 张明学
*
*/
public class RegisterAction2 extends ActionSupport implements ModelDriven,
ServletRequestAware {
private HttpServletRequest request;
private RegisterBean loginBean = new RegisterBean();
public Object getModel() {
return loginBean;
}
@Override
public String execute() throws Exception {
request.setAttribute("mengya", "xiaobo");
request.getAttribute("mengya");
return SUCCESS;
}
public void setServletRequest(HttpServletRequest arg0) {
request = arg0;
}
}
/**
* 获得HttpServletResponse 实现ServletResponseAware接口
*
* @author 张明学
*
*/
public class RegisterAction3 extends ActionSupport implements ModelDriven,
ServletResponseAware {
private HttpServletResponse response;
private RegisterBean loginBean = new RegisterBean();
public Object getModel() {
return loginBean;
}
@Override
public String execute() throws Exception {
Cookie cookie = new Cookie("username", this.loginBean.getUsername());
response.addCookie(cookie);
return SUCCESS;
}
public void setServletResponse(HttpServletResponse arg0) {
this.response = arg0;
}
}
第三种方式:ServletActionContext
/**
* ServletActionContext真接获得HttpServletRequest和HttpServletResponse
*/
HttpServletRequest reqeust = ServletActionContext.getRequest();
HttpSession httpsession = reqeust.getSession();
HttpServletResponse response = ServletActionContext.getResponse();
7,Action多方法调用
方式一:
在struts.xml中的action标签中添加method值如:
<!-- 没有method属性值则这是MyTestAction默认的调用方法即execute方法将被调用 -->
<action name="myTest" class="com.mengya.action.MyTestAction">
<result name="success">/index.jsp</result>
</action>
<!-- method属性值为text1则这是MyTestAction调用方法即text1方法将被调用 -->
<action name="text1" class="com.mengya.action.MyTestAction" method="text1">
<result name="success">/index.jsp</result>
</action>
方式二:
在struts.xml中的action标签不改
<action name="myTest" class="com.mengya.action.MyTestAction">
<result name="success">/index.jsp</result>
</action>
页面修改:
<a href="myTest.action">Action默认的方法</a><br>
<a href="myTest!text1.action">Action的text1方法</a><br>
<a href="myTest!text2.action">Action的text2方法</a>
方式三:通配符(个人不推荐使用)
struts.xml的配置:
<action name="*myTest" class="com.mengya.action.MyTestAction" method={1}>
<result name="success">/index.jsp</result>
</action>
页面:
<a href="myTest.action">Action默认的方法</a><br>
<a href="text1myTest.action">Action的text1方法</a><br>
<a href="text2myTest.action">Action的text2方法</a>
8,result标签的type的类型
在struts2-core-2.1.6.jar中的struts-default.xml中:
<result-types>
<!-- Action链 -->
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<!-- 默认的type类型,请求转发 request.getRequestDispatcher(url).forward(request, response)-->
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<!-- 重定向response.sendRedirect(url); -->
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<!-- 重定向到另一个Action -->
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<!-- 文件下载 -->
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>
- Struts2_12.rar (3.6 MB)
- 描述: Struts2.0深入学习 Strust2与Servlet API,Action多方法调用,result标签的type的类型实例
- 下载次数: 89
发表评论
-
Struts2 + JasperReport应用二:jasperReport Web形式打印
2010-02-02 16:16 5221将jasperReport设计文件和编译文件放到webRoot ... -
Struts2 + JasperReport应用一:导PDF,Excel,HTML显示
2010-01-29 16:34 9826我用的是struts2.1.6,从struts2的自带的dem ... -
Struts2 标签使用简介
2009-12-23 19:33 2600web.xml配置如下: <fil ... -
Struts2 的OGNL使用简介
2009-12-22 13:25 2304<div align="center" ... -
POI与Struts2的使用 poi-2.5.1.jar
2009-09-25 17:43 4837一.POI 简介 Jakarta POI 是apache的子项 ... -
jFreeChart与Struts2的组合,将jFreeChart作为显示视图
2009-09-25 16:26 1445jFreeChart与Struts2的组合: 一,加 ... -
Struts2与Spring2.0的组合
2009-09-09 09:46 1001Struts2与Spring的集成: 一,加入Str ... -
Struts2的异常处理
2009-09-07 13:41 1336Struts2的异常处理: 1,定义自己的异常信息类:继承Ex ... -
Struts2.0深入学习 命名空间,模型驱动,表单重复提交
2009-09-06 11:04 1821Struts2深入探索: 1,package中的ab ... -
Struts2国际化详解
2009-09-03 15:32 2675Struts2国际化: 1,国际 ... -
Struts2文件下载
2009-09-02 20:09 10567Struts2文件下载: Struts2文件下载对应将一个In ... -
设置Struts2文件上传的类型和大小
2009-09-02 20:09 5175设置Struts2文件上传的类型和大小: 在struts. ... -
Struts2多文件上传
2009-09-02 20:08 2416Struts2多文件上传: 在Action中配置三个属性: p ... -
Struts2文件上传详解
2009-08-31 17:27 2345Struts2文件上传: 一:请选参看Struts2_9中的S ... -
Struts2.0文件上传原理
2009-08-31 13:12 3027Struts2文件上传默认采用apache的文件上传的包,新建 ... -
Struts2的监听器的使用
2009-08-25 19:02 2488Struts2的监听器: 一,建立监听器: ... -
Struts2的拦截器的使用详解
2009-08-25 18:59 2332Struts2的拦截器: 一,拦截器的使用: ... -
Struts2拦截器原理分析
2009-08-25 18:55 2326第一步:创建目标对象的接口 /** * 目标对象的接口 ... -
Struts2的检证框架详解
2009-08-25 13:00 2403Struts2的检证框架: 一,根据字段校验(为每一 ... -
Struts2的Action多个方法配置和验证
2009-08-18 20:16 4742Struts2的Action多个方法配置和验证: 1 ...
相关推荐
本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...
十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...
该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true.如果需要关闭动态方法调用,则可设置该属性为false. struts.enable.SlashesInActionNames 该属性设置Struts 2是否允许在Action名中使用斜线,该属性的...
如数据类型转换、文件上传和下载、Struts2应用的安全性、调试与性能分析、FreeMarker、Velocily、Ajax,等等。跟随作者一道深入Struts2。聆听大量来之不易的经验之谈。你对Struts2开发框架的理解和应用水平都将更上...
2. 深入 STRUTS架构..................................................................................37 2.1. 随便谈谈......................................................................................
3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,优先拦截器 5、拦截器是包裹在过滤器中使用的。 复习 converter 转换器 ...
2. 深入STRUTS 架构..................................................................................37 2.1. 随便谈谈.......................................................................................
2.1 访问Servlet API.......................................................................................................8 2.2 动态方法调用...............................................................
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.list.struts.form.ListForm; import com.list.struts.util.Page; import ...
在配置文件中配置所有的action由ActionServlet统一管理,对于用户请求,根据请求URL调用不用的Action来处理,处理完之后再根据返回的Result返回给Dispatcher,根据action不同result的配置来转发或重定向到不同的页面.