struts整理

Value注入值,ref注入对象
Jsp实时编译的,freemarker是预编译的
EL表达式只能取session、application、request的值
将String[]转换为List<String>
    Arrays.<String>alist(数组对象)
Struts中上传文件大小不得大于2mb
Struts中xml有继承的概念
拦截器方法在action执行前或之后执行,动态代理的原理,ref引用对象
Struts中没有404错误,一般为struts的异常模板,除非转发页面时没有找到页面
实现struts中action的方法:
    1.继承actionsupport
    2.实现action接口,重写String excute()方法
Struts2执行顺序:
    Struts-default---?struts-plugin--?struts.xml
使用Struts 2 开发程序的基本步骤
加载Struts2 类库
配置web.xml文件
开发视图层页面
开发控制层Action
配置struts.xml文件
部署、运行项目
struts2 动作配置
<package  name=”唯一的包” namespace=”/”  extends=”struts-default”>
     定义动作
<action  name=”虚拟地址”  class=”交给哪个类来处理” method=”哪个方法”>
           <result name=”哪个方法返回的字符串”
type=”转发dispatcher,重定向urlredirect,重定向action (redirectAction)”
>
                  哪个页面显示
</result>
</action>
</package>

1、实现struts中的action有几种方法?
1)、  继承ActionSupport
2)、  实现Action 接口  -->重写 String execute()

2、动态调用
        作用:减少action数量
        使用:actionName!methodName.action
        禁用:将属性struts.enable.DynamicMethodInvocation设置为false
如果使用动态调用就不能使用通配符
public class UserAction implements Action{//user!login.action,调用UserAction的login()方法
        ……
        public String login(){…..}
public String register(){…..}
}
<action name="user" class="com.xxxx.web.UserAction" >
        <result name="login">/page/manage.jsp</result>
        …………
</action>
3、设定默认action,用来显示用户输入错误action地址
        配置默认Action
            没有Action匹配请求时,默认Action将被执行
            通过<default-action-ref…../>元素配置默认action
<struts>
    <default-action-ref  name=”defaultAction”/>
    <package  name=”default”  extends=”struts-default”>
        <action  name=”defaultAction”>
<result>error.jsp</result>
</action>
            </package >
<struts>

4、配置全局的结果集
    全局结果
        实现同一个包中多个action共享一个结果
<struts>
    <default-action-ref  name=”defaultAction”/>
    <package  name=”default”  extends=”struts-default”>
        <global-results>
<result  name=” error”>/error.jsp</result>
<result  name=”login”  type=”redirect”>/login.jsp</result>
</global-results>
…..省了action的配置
            </package >
<struts>

5、struts2原型图
用户请求-->ActionMapper(Action映射)-->FilterDispatcher(转发)-->ActionProxy(Action代理)
-->读取配置文件-->比对struts.xml中配置 -->ActionInvocation(Action核心调度器)
-->经过层层的(Interceptor)过滤-->执行Action中的method方法-->方法执行完后返回Result结果-->根据返回结果读取页面(Template)-->再一次经过层层(Interceptor)过滤-?响应给用户

6、拦截器和拦截器栈
  拦截器,只能有一个功能
    <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

  拦截器栈,  是由一个或者多个拦截器组成的一个集合
  <interceptor-stack name="basicStack">
                <interceptor-ref name="exception"/>
                <interceptor-ref name="servletConfig"/>
                <interceptor-ref name="deprecation"/>
  </interceptor-stack>

7、自定义拦截器
1)、继承 AbstractInterceptor
2)、重写  intercept 方法
         Invocation.invoke();  执行你定义的action中的方法
3)、在struts.xml中去配置

    <!-- 配制全局的包,让其它packet继承这个包 -->
    <package name="commonPackage" namespace="/" extends="json-default"
        abstract="true">
        <!-- 定义拦截器 -->
        <interceptors>
            <interceptor name="timeSpeend"
                class="com.wisezone.interceptor.TimeSpeedInterceptor"></interceptor>
            <!-- 定义拦截器栈,重写系统strtus-default.xml中默认的 -->
            <interceptor-stack name="myDefaultStack">
                <!-- 系统默认的 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <!-- 我自己的 -->
                <interceptor-ref name="timeSpeend"></interceptor-ref>
            </interceptor-stack>        </interceptors>
        <!-- 更新全局的拦截器 -->
        <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
    </package>

<!--约定大于配置 -->
<packagename="FlinkTypePackage" namespace="/admin" extends="commonPackage">
</package>

8、文件上传命名规则
private File upload;
private String uploadContentType;
private String uploadFileName;

页面:<input  type=”file”  name=”upload”/>
9、自定义类型转换
public class DateConverter extends DefaultTypeConverter
ArrayConverter
ListConverter
DateConverter
NumberConverter
StringConverter

10、strtus2值栈

要访问ValueStack就必须要与struts中的标签一起用,它不能单独使用
User  (userName,password)  -->存在值栈中   private User  user;  //getter/setter方法
 <s:property   value=”user.userName” />
<s:textfield name="user.userName" id="userName"></s:textfield>
<s:password name="user.password" id="password"></s:password >

日期标签:
    语法:
        <s:date  format=”format”  nice =”true|false”  name=”name”  id=”id”>
            ……….
        </s:date>
        Formate属性:指定格式进行日期格式化

Nice属性:该属性只有true和false两个值用于指定是否输出指定日期与当前时间的时差,默认为false
        Name属性:表示当前需要格式化的日期
        Id属性:表示引用该元素的id值
11、struts2验证规则
        void  validate方法名()   对某一个动作进行验证
        void  validate()          所有的动作进行验证  ( 不会重写)
    public void saveInfo(){}
    public void validateSaveInfo(){
        if(StringUtil.isEmpty(this.flinkType.getTypeName)){
            super.addFiledError(“typeName”,”分类名称不能为空”);
}
}
12、国际化

13、保证新增和修改保存 唯一,不允许 重复提交
重复提交发生时机:
    1)、网络慢的时候
    2)、提交失败了报错, 按返回上一步,再一次提交

    token 令牌机制
<package name="filePackage" namespace="/admin" extends="commonPackage">
        <!-- 定义一个通配查询动作 admin/admin_angular1.action -->
        <action name="file_upload" class="fileUploadTestAction" method="upload">
            <!-- 重复提交,开始token机制 -->
            <interceptor-ref name="myDefaultStack"></interceptor-ref>
            <interceptor-ref name="token"></interceptor-ref>
            <result name="success">/admin/flinktype/file.jsp</result>
            <result name="invalid.token">/admin/重复提交.jsp</result>
        </action>
    </package>
14、struts2类型转换器
struts2  TypeConvertor 博客园

15、freemarker 模板 框架
                模板
页面:纯html  ${name}    中间:Freemarker:velocity    后台:name=”张三”
16、Freemarker的使用方法
第一步:把freemarker的jar包添加到工程中
第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。
第三步:创建一个Configration对象,该对象负责管理Freemarker的模板加载路径,负责生成模板实例
第四步:告诉config对象模板文件存放的路径。
第五步:设置config的默认字符集。一般是utf-8
第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。
第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。数据模型就是一个MAP集合
第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
第十步:关闭writer对象。
17、
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:
1,文本:直接输出的部分
2,注释:<#-- ... -->格式部分,不会输出
3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出
4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出
18、freemarker通用插值:
FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}
1、通用插值
对于FreeMarker的通用插值,又可以分为以下4种情况:
1. FreeMarker插值结果为字符串值:直接输出表达式结果
2. FreeMarker插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
输出结果是:
$42.00
$42.00
42
$42.00
4,200%
3. FreeMarker插值结果为日期值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ‘‘yy")}
${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a ‘(‘zzz‘)‘")}
输出结果是:
2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, ‘03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4. FreeMarker插值结果为布尔值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
<#assign foo=true/>
${foo?string("yes", "no")}
输出结果是:
yes
2、数字格式化插值
关于FreeMarker数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 输出2.58 -->
#{y; M2} <#-- 输出4 -->
#{x; m2} <#-- 输出2.6 -->
#{y; m2} <#-- 输出4.0 -->
#{x; m1M2} <#-- 输出2.58 -->
#{x; m1M2} <#-- 输出4.0 -->
3、集合
集合以方括号包括,各集合元素之间以英文逗号","分隔,看如下的例子:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x}
</#list>
输出结果是:
星期一
星期二
星期三
星期四
星期五
星期六
星期天
4、If指令
这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下:
<#if condition>...
<#elseif condition>...
<#elseif condition>...
<#else> ...
</#if>

例子如下:
<#assign age=23>
<#if (age>60)>老年人
<#elseif (age>40)>中年人
<#elseif (age>20)>青年人
<#else> 少年人
</#if>
输出结果是:青年人
4.2 switch , case , default , break指令
这些指令显然是分支指令,作用类似于Java的switch语句,switch指令的语法结构如下:
<#switch value>
<#case refValue>...<#break>
<#case refValue>...<#break>
<#default>...
</#switch>
5、字符串使用的内建函数:
html : 字符串中所有的特殊 HTML 字符都需要用实体引用来代替(比如 < 代替 &lt; )
cap_first :字符串的第一个字母变为大写形式
lower_case :字符串的小写形式
upper_case :字符串的大写形式
trim :去掉字符串首尾的空格
6、Struts2解析FreeMarker模板中变量的顺序如下:
1,FreeMarker模板内建的变量;
2,ValueStack中的变量;
3,ActionContext中的变量;
4,HttpServletRequest中的属性;
5,HttpSession中的属性;
6,ServletContext范围的属性. 
时间: 2024-10-24 23:43:52

struts整理的相关文章

Struts ajax json重新整理

刚才写的例子,出了些问题,又重新写了一个. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/l

struts2中struts.xml配置文件详解【未整理】

1.    深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1.    包配置: Struts2框架中核心组件就是Action.拦截器等,Struts2框架使用包来管理Action和拦截器等.每个包就是多个Action.多个拦截器.多个拦截器引用的集合. 在struts.xml文件中package元素用于定义包配置,每个package元素定义了一个包配置.它的常用属性有: l name:必填属性,用来指定包的名字. l extends:可选属性,用来指定该包继承

笔记之_java整理struts

weixinAPI微信对接 Struts标签库 Xml的地址:http://blog.csdn.net/xiazdong/article/details/7293177 Struts注入优先考虑modelDirven中找,其次才是setter方法 Value注入值,ref注入对象 Jsp实时编译的,freemarker是预编译的 EL表达式只能取session.application.request的值 将String[]转换为List<String> Arrays.<String>

GitHub上整理的一些工具

GitHub上整理的一些工具 GitHub   2015-11-19 10:10:47 发布 您的评价:       0.0   收藏     5收藏 技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 OSChina:开源技术社区,开源方面做的不错哦 cnblogs,51cto,csdn:常见的技术社区,各有专长 stackoverflow:IT

FindBugs规则整理

FindBugs规则整理 FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查.没有合理关闭资源.字符串相同判断错(==,而不是equals)等 一.Security 关于代码安全性防护 1.Dm: Hardcoded constant database password (DMI_CONSTANT_DB_PASSWORD) 代码中创建DB的密码时采

flex3+struts 1.3+spring+ibatis 2.x整合代码实例

原创整理不易,转载请注明出处:flex3+struts 1.3+spring+ibatis 2.x整合代码实例 代码下载地址:http://www.zuidaima.com/share/1778657261997056.htm 经过两天工作闲余时间的奋战,终于flex3+struts 1.3+spring +ibatis 2.x 整合成功,下面介绍下详细的步骤和核心代码: IDE:myeclipse (当然:前提是FLEX+java整合成功的情况下,关于flex+java整合的文章就比较多,go

Java Web架构知识整理——记一次阿里面试经历

惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里的面试机会,于是就试了试. 首先是电话面试,当时正在上班,人多口杂,好不容易找了个没人的地方开始面试.面试的方向是Java Web,面试官很nice,跟朋友一样,一开始问了些比较基础的东西,比如hashmap/hashtable的区别和优缺点,我答得还行,而且对于原理的东西还算讲的比较透彻. Jav

Java新手如何学习Spring、Struts、Hibernate三大框架?(转)

整理知乎大牛答案: 1.入门看文档(blog,书籍等等),深入理解配置文件的含义(Spring.Struts.Hibernate); 2.遇到问题,自己动手解决,如果解决了,为什么这样解决?(凡事总问个为什么) 3.具体到hibernate的入门, 首先还是先要学会数据库, JDBC, 设计模式, 这些都是基础. 我的个人理解:凡事总问为什么,很关键,这是入门也是以后进一步发展的基础. 具体新手学习视频资料可以参考看看网上的视频教程,但理念必须在入门之前建立起来. 如果你是个老师(Java工程师

struts2知识系统整理

1.MVC 和 JSP Model 2 **   a.:M-Model 模型 包含两部分:业务数据和业务处理逻辑  b.V-View 视图:视图(View)的职责是负责显示界面和用户交互(收集用户信息).  c.C-Controller 控制器 项目中写的ActionServlet.--------------------------------------------------2.我们写的模式被我们称为JSP Model1,在其中我们有模型层(M),但是视图层(V)的  JSP中包含了业务逻