---------------------------源码及文档位置-------------------------------------------------------------------------------------------
源码位置:strtus-2.1.6/src/core/src/main/java
文档位置:strtus-2.1.6/strtus2-core/apidocs
jar包 加源码 加文档
---------------------------源码及文档位置--------------------------------------------------------------------------------------------
---------------------------web.xml中配置strust访问形式---------------------------------------------------------------------------
web.xml 中 /* , *.action 映射方式都可以,但是建议/*
访问时可以省略.action 例如: http://localhost:8080/myproject/hello (hello.action)
---------------------------web.xml中配置strust访问形式---------------------------------------------------------------------------
----------------------------------- struts.xml中配置开发模式---------------------------------------------------
<constant name="struts.devMode" value="true"/> 开发模式,不用重新发布
----------------------------------- struts.xml中配置开发模式---------------------------------------------------
myEclipse--window 搜索 catalog --XML Catalog 增加 struts.dtd
--------------------Action三种实现形式----------------------------------------------------
1、直接XxxAction 内有excute()方法
2、实现Action接口
3、继承ActionSupport
推荐 继承 ActionSupport 不用实现Action接口的写法
--------------------Action三种实现形式----------------------------------------------------
---------------------jsp中设置basePath绝对路径-------------------------------------------------------------------
jsp中<base href="<%=basePath%>" />
<!-- 设置绝对路径,其余在页面里直接用相对路径即可,例如 personmanage/person!add.action-->
---------------------jsp中设置basePath绝对路径-------------------------------------------------------------------
---------------------------------strtus.xml-----------------------------------------------------------------------------------------------
通配符 约定优于配置
<struts>
<constant name="struts.devMode" value="true"/>
<package name="model_1" namespace="/model_1" extends="mydefault"><!-- 包的继承-->
<action name="*_*" class="com.cpcns.model1.action.{1}Action" method="{2}">
<result>model_1/{1}_{2}.jsp</result>
</action>
</package>
<!--输入一个不存在的Action不会报错误页面,而是跳转到设定好的default页面,比如说登陆页面或者首页 -->
<package name="mydefault" extends="struts-default" namespace="/">
<default-actin-ref name="index" />
<action name="index">
<result>index.jsp</result>
</action>
</package>
</struts>
<s:debug></s:debug><!--在页面中查看堆栈信息-->
---------------------------------strtus.xml-----------------------------------------------------------------------------------------------
-------------------Action 三种接收参数形式-----------------------------------------------------------------------------------
1、Action定义变量,2、DomainModel,3、继承ModelDriver 实现getModel方法
Action 中 用VO继承DomainModel 的形式,User.name。。。避免Action中代码过乱
XXXAction implements ModelDriver<User>{
private User user = new User();
@Override
public User getModel(){
return user;
}
}
-------------------Action 三种接收参数形式-----------------------------------------------------------------------------------
-------------------------------------------------表单校验-----------------------------------------------------------------------
extends ActionSupport
用父类的
addFieldError("passwordError","密码长度不足8位");
addFieldError("passwordError","密码中至少包含1个字母1个数字1个特殊字符");
页面中两种方式:
<s:fielderror fieldName="error1" theme="simple">
passwordError1:<s:property value="errors.passwordError[0]"/>
passwordError2:<s:property value="errors.passwordError[1]"/>
-------------------------------------------------表单校验-----------------------------------------------------------------------
---------------------------------------------resultType------------------------------------------------------------------------
<package name="model_x" namespace="/space_x" extends="struts-default">
<global-results><!--全局result-->
<result name="reLogin">/reLogin.jsp</rssult>
</global-results>
<action name="action1">
<result type="dispatcher">a1.jsp</result>
</action>
<action name="action3">
<result type="chain">
<param name="actionName">action1</param>
<param name="namespace">/space_x</param>
</result>
</action>
</package>
dispatcher 服务器端跳转
redirect 客户端跳转
chain 跳转到另一个Action
redirectAction 客户端跳转另一个Action
---------------------------------------------resultType------------------------------------------------------------------------
-------------------------动态结果集---------------------------------------------------------------------------------------------
<package name="model_x" namespace="/space_x" extends="struts-default">
<action name="xxxaction" class="x.x.XXXAction">
<result>${resultStr}</result>
<!-- 一次request(多次forward)共享同一valueStack无需传值,只有重定向才需要重新传值-->
<result name="addResult" type="redirect">a.jsp?t={type}</result><!-- 在a.jsp中 <s:property value="#parameters.t">来获取-->
</action>
</package>
puglic XXXAction{
private String resultStr;
private int type;
public void setResultStr(String str){
this.resultStr = str;
}
public String getResultStr(){
return resultStr;
}
public void setType(int i){
this.type = i;
}
public int getType(){
return type;
}
public String execute() throws Exception{
switch(type){
//这种方式在程序里写死,不常用
case 0: resultStr = "a0.jsp"; break;
case 1: resultStr = "a1.jsp"; break;
case 2: resultStr = "a2.jsp"; break;
.
.
default:resultStr = "default.jsp";
}
return resultStr;
}
public String add(){
return "addResult";
}
}
-------------------------动态结果集---------------------------------------------------------------------------------------------
-------------------------OGNL----------------------------------------------------------------------------------------------------------------------------
<constant name="struts.ognl.allowStaticMethedAccess" value="true"><!--struts.xml-->
<!--允许用OGNL方式访问静态方法 @com.xxx.a@staticMethod(),访问Method类:@@max(2,3) -->
<s:property value="users.{age}"/> 取所有user的age组成一个数组
<s:property value="users.{age}[0]"/>等价于<s:property value="users[0].age"/>
<s:property value="dogMap.dog001"/>
<s:property value="dogMap['dog001']"/>
<s:property value="dogMap[\"dog001\"]"/>
<s:property value="dogMap.keys"/> 访问Map所有的key
<s:property value="dogMap.values"/> 访问Map所有的values
<s:property value="dogMap.size()"/>|<s:property value="dogMap.size"/> 访问Map大小
投影
<s:property value="users.{?#this.age==1}.{age}"/>
<s:property value="users.{^#this.age>1}.{age}"/><!--age>1的所有user中的第一个-->
<s:property value="users.{$#this.age>1}.{age}"/><!--age>1的所有user中的最后一个-->
<s:property value="users.{$#this.age>1}.{age}==null"/><!--判断是否有满足条件的对象 -->
<s:property value="[0]"/><!--读取OGNL栈里的元素,从0开始的对象(Action,chain时会有多个Action)-->
-------------------------OGNL----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------strtus2标签------------------------------------------------------------------------
<s:set var="titleText" value="'XXX页面'" > 不建议用name或id,建议用var
struts.xml
<constant name="strtus.ui.theme" value="mysimple"/><!--页面中struts标签的样式 -->
新建一个文件夹src/template/mysimple
把strtus-core下的主题 拷贝过来,src/template/mysimple/fielderror.ftl 重写fielderror.ftl 文件(freemarker语言)覆盖struts样式
--------------------------------------------strtus2标签------------------------------------------------------------------------
------------------------------------propertiesEditer插件---------------------------------------------------------------------
propertiesEditer插件,properties 中的中文必须是UTF-8的编码(\u6b22\u8fce),编写不方便,尤其的国际化的时候,
所以下载个propertiesEditer插件到MyEclipse很是必要
jp.gr.java_conf.ussiy.app.propedit_5.3.3.zip
------------------------------------propertiesEditer插件---------------------------------------------------------------------
-------------------------------------token防止重复提交-----------------------------------------------------------------------
<constant name="strtus.devMode" value="true">
<package name="manage" namespace="/" extends="struts-default">
<!-- token 提交返回本页面有问题,整个html返回 -->
<action name="input" class="com.xxx.manage.action.InputAction">
<result>/manage/input.jsp</result>
</action>
<action name="user" class="com.xxx.manage.action.UserAction">
<result>/manage/ok.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
<result name="invaild.token">/token.jsp</result>
</action>
</packag>
input.jsp
<s:token></s:token>
-------------------------------------token防止重复提交-----------------------------------------------------------------------
分享到:
相关推荐
struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...
在本项目总结中,我们将深入探讨Struts2的核心特性、工作原理以及如何在实际项目中应用。 一、Struts2框架基础 1. 动态方法调用(Dynamic Method Invocation,DMI):Struts2允许通过URL直接调用Action类的方法,...
struts2学习总结
### Struts2初步使用总结 #### 一、Struts2原理概述 **1.1 为什么要用Struts2** 在探讨为何使用Struts2之前,我们先简要回顾一下Struts2的一些基本特点: - **模块化设计**:Struts2采用模块化的架构设计,使得...
原文中提到“struts2 null异常”,这通常指的是在使用Struts2框架时遇到的NullPointerException。此类异常一般发生在尝试访问一个对象的属性或方法时,该对象为null的情况下。解决这类问题通常需要检查相关的配置...
本总结将深入探讨Struts2的核心概念、关键功能和实用技术,以帮助开发者全面理解并熟练运用这一框架。 一、Servlet模板 在Struts2中,Servlet模板是一种处理请求和响应的方式。它通过拦截器链对请求进行处理,然后...
本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...
以下是对Struts2知识点的详细总结: 1. **Struts2核心组件** - **FilterDispatcher**(或现在的`StrutsPrepareAndExecuteFilter`):这是Struts2的核心过滤器,它负责拦截请求,处理Action映射,并转发到相应的...
1. **类型转换**:首先,Struts2框架使用类型转换器将HTTP请求中的字符串参数转换为相应的Java类型,如Integer、Date等,并将这些值设置为Action类的属性。 2. **异常处理与错误封装**:如果类型转换过程中遇到问题...
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
Struts2是一个基于MVC设计模式的Java web框架,它极大地简化了企业级应用的开发。以下是关于Struts2的一些核心知识点的详细说明: 1. **环境搭建**:要搭建Struts2的开发环境,首先需要配置Tomcat服务器和JDK。接着...
Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...
在Struts2中,当服务端验证失败时,通常会将错误信息保存在ActionContext中,并通过ActionSupport类中的addFieldError方法添加到字段上。此时,为了保留页面的初始状态,我们可以采取以下策略: 1. 使用`...
Struts2作为一款流行的...通过以上对Struts2输入校验的深入总结,我们可以看到Struts2为开发者提供了灵活多样的校验方式,能够满足不同场景下的需求。了解并熟练掌握这些校验机制,有助于提升应用程序的质量和安全性。