??xml version="1.0" encoding="utf-8" standalone="yes"?>色在线视频观看,午夜精品久久久久久久四虎美女版,欧美大片一区二区http://www.aygfsteel.com/wx886104/category/34067.htmlzh-cnTue, 27 Jul 2010 02:05:13 GMTTue, 27 Jul 2010 02:05:13 GMT60Struts2校验框架(?http://www.aygfsteel.com/wx886104/archive/2010/07/27/327189.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Tue, 27 Jul 2010 02:01:00 GMThttp://www.aygfsteel.com/wx886104/archive/2010/07/27/327189.html [旉]:2009-7-27
[摘要]:校验框架配置、客L校验
[关键字]:曦视频QStruts2应用开发系列,WebWorkQApacheQvalidation
[环境]:struts-2.1.6、JDK6、MyEclipse7、Tomcat6
[作者]:Winty (wintys@gmail.com) http://www.aygfsteel.com/wintys

[正文]:
    Struts校验框架提供了一U不用编写代码,只需修改配置文g卛_对输入进行校验的功能。代码方式校验,即重写validate()Ҏ。实际应用中Q?strong>validate()与校验框架一般只选其一?br />
1、校验框枉|?br />     在RegisterAction.java相同目录新徏校验框架配置文gRegisterAction-validation.xml。RegisterAction-validation.xml的DTD可以复制struts自带的示例struts2-mailreader-2.1.6中的DTD:
<!DOCTYPE validators PUBLIC
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

xwork-validator-1.0.2.dtd:
<?xml version="1.0" encoding="UTF-8"?>

<!--
  XWork Validators DTD.
  Used the following DOCTYPE.
 
  <!DOCTYPE validators PUBLIC
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->


<!ELEMENT validators (field|validator)+>

<!ELEMENT field (field-validator+)>
<!ATTLIST field
    name CDATA #REQUIRED
>

<!ELEMENT field-validator (param*, message)>
<!ATTLIST field-validator
    type CDATA #REQUIRED
    short-circuit (true|false) "false"
>

<!ELEMENT validator (param*, message)>
<!ATTLIST validator
    type CDATA #REQUIRED
    short-circuit (true|false) "false"
>

<!ELEMENT param (#PCDATA)>
<!ATTLIST param
    name CDATA #REQUIRED
>

<!ELEMENT message (#PCDATA)>
<!ATTLIST message
    key CDATA #IMPLIED
>


RegisterAction-validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
 
 <validators>
 <!--  
     与field{h的validator
     <validator type="requiredstring">
         <param name="fieldName">name</param>
         <param name="trim">true</param>
         <message>name required</message>
     </validator>
     <validator type="stringlength">
         <param name="fieldName">name</param>
             <param name="trim">true</param>
             <param name="minLength">6</param>
             <param name="maxLength">10</param>
             <message>name length range : ${minLength} ~ ${maxLength}</message>
     </validator>
 -->    
     <field name="name">
         <field-validator type="requiredstring" >
             <param name="trim">true</param>
             <message>name required</message>
         </field-validator>
         <field-validator type="stringlength">
             <param name="trim">true</param>
             <param name="minLength">6</param>
             <param name="maxLength">10</param>
             <message>name length range : ${minLength} ~ ${maxLength}</message>
         </field-validator>
     </field>
     
     <field name="age">
         <field-validator type="conversion" short-circuit="true">
             <message>the field age conversion error</message>
         </field-validator>
         <field-validator type="int">
             <param name="min">1</param>
             <param name="max">150</param>
             <message>age range: ${min} ~ ${max}</message>
         </field-validator>
     </field>
     
     <field name="birthday">
         <field-validator type="required">
             <message>birthday required</message>
         </field-validator>
         <field-validator type="date">
             <param name="min">2009-01-01</param>
             <param name="max">2009-12-31</param>
             <message>birthday range: ${min} ~ ${max}</message>
         </field-validator>
     </field>
     
     <field name="email">
         <field-validator type="email">
             <message>invalid email address</message>
         </field-validator>
     </field>
 </validators>

说明:
a.校验框架有两U校验方?field和validator?br /> field校验:先指定需要校验的属性,再指定校验方式。validator校验:先指定校验方式,再指定需要校验的属性。两U方式是{h的?br />
field校验:
<field name="name">
    <field-validator type="requiredstring" >
        <param name="trim">true</param>
        <message>name required</message>
    </field-validator>
    <field-validator type="stringlength">
        <param name="trim">true</param>
        <param name="minLength">6</param>
        <param name="maxLength">10</param>
        <message>name length range : ${minLength} ~ ${maxLength}</message>
    </field-validator>
</field>

validator校验:
<validator type="requiredstring">
    <param name="fieldName">name</param>
    <param name="trim">true</param>
    <message>name required</message>
</validator>
<validator type="stringlength">
    <param name="fieldName">name</param>
    <param name="trim">true</param>
    <param name="minLength">6</param>
    <param name="maxLength">10</param>
    <message>name length range : ${minLength} ~ ${maxLength}</message>
</validator>

b.<field-validator type="requiredstring" >中的type及其对应的xworkcd以在xwork-2.1.2.jar/com.opensymphony.xwork2.validator.validators/default.xml中查扑ֈ?br /> default.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">

<!-- START SNIPPET: validators-default -->
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!--  END SNIPPET: validators-default -->

c. 对于校验<field-validator type="requiredstring" >:String用requiredstringQ其它类型用required?br /> d. 验证错误默认生FieldError?br /> e. short-circuit="true" : 一个校验失败,是否是l执行后l校验?br /> f. 对于相同属性的FieldErrorQvalidate()Ҏ中的验证和RegisterAction-validation.xml中的验证都会执行,q且FieldError都会昄?br /> 执行序: RegisterAction-validation.xml => validate()?br />

2、特定于业务逻辑的局部校?
对于struts.xml?lt;action>的method="register"指定的业务方法register()Q用校验RegisterAction-register-validation.xml(与RegisterAction.java在同一目录?。同ӞRegisterAction-validation.xml会被执行。执行顺?  RegisterAction-validation.xml => RegisterAction-register-validation.xml

3、Struts2客户端校?br />     讄struts标签<s:form>中validate="true"。这样就会根据RegisterAction-validation.xml生成面JavascriptQ在客户端执行校验?br />  
 注意:
 a.struts标签不能使用simple主题?br />  b.Struts2客户端校验功能较弱,一般不用?br />
4、FieldError和ActionError的实?br /> a.真正存放fieldU别错误信息的对象是LinkedHashMap?br /> b.该LinkedHashMap的key是Stringcd的,value是ArrayListcdQ所以同一个key可以对应多个错误消息?br /> c.对于ActionU别的错误信息,实际上是攄在ArrayList中的?br />     
[参考资料]:
    《浪曦视频之Struts2应用开发系列?br />

]]>
初用org.apache.commons.beanutils.ConvertUtils http://www.aygfsteel.com/wx886104/archive/2009/03/04/257710.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Wed, 04 Mar 2009 02:36:00 GMThttp://www.aygfsteel.com/wx886104/archive/2009/03/04/257710.htmlhttp://www.aygfsteel.com/wx886104/comments/257710.htmlhttp://www.aygfsteel.com/wx886104/archive/2009/03/04/257710.html#Feedback0http://www.aygfsteel.com/wx886104/comments/commentRss/257710.htmlhttp://www.aygfsteel.com/wx886104/services/trackbacks/257710.htmlConvertUtilsQ这个工L的职能是在字W串和指定类型的实例之间q行转换?

 

 

目前支持的类型有Q?

 

 

  • java.lang.BigDecimal

     

  • java.lang.BigInteger

     

  • boolean and java.lang.Boolean

     

  • byte and java.lang.Byte

     

  • char and java.lang.Character

     

  • java.lang.Class

     

  • double and java.lang.Double

     

  • float and java.lang.Float

     

  • int and java.lang.Integer

     

  • long and java.lang.Long

     

  • short and java.lang.Short

     

  • java.lang.String

     

  • java.io.File

     

  • java.net.URL

     

  • java.sql.Date

     

  • java.sql.Time

     

  • java.sql.Timestamp

     

M提供两类功能Q?

 

 

1.         字W串转换为指定类型;

 

 

2.         注册、注销和查询类型{换器Q?/font>

convert(java.lang.Object value)

Q意的实例转变?font face='"Times' New Roman">StringQ用法非常简单。在试的过E中Q感觉与调用实例上的toString()Ҏ的效果一P不知道是不是在这个方法内仅仅是调用了传入实例?font face='"Times' New Roman">toString()Ҏ?/font>

ps:需要读源代码才能清楚?/font>

convert(java.lang.String value, java.lang.Class clazz)

 

字W串value转换?font face='"Times' New Roman">clazz的一个实例;如果p|的话Q就?font face='"Times' New Roman">String的Ş式返?font face='"Times' New Roman">value?

 

 

convert(java.lang.String[] values, java.lang.Class clazz)

 

q个Ҏ是对前一Ҏ的加强版Q将数组中的每个value都进行{换,最后以Objectq回。(数组也是Object啊)

 

 

deregister()?a href_cetemp='http://www.itepub.net/html/kaifajingcui/Java/2006/0514/"file:///F:/software/apache/commons/commons-beanutils-1.7.0/docs/api/org/apache/commons/beanutils/ConvertUtils.html#deregister()"'>deregister(java.lang.Class clazz)

注销转换器,前者将所有的转换器注销掉,后者只注销对应?font face='"Times' New Roman">clazz的{换器。注销在这里不是彻底删除了Q而是{换器变ؓ默认的{换器Q?font face='"Times' New Roman">apache commons提供的)?/font>

lookup(java.lang.Class clazz)

获取指定cdclazz的{换器.

register(Converter converter, java.lang.Class clazz)

为指定类?font face='"Times' New Roman">clazz注册转换?font face='"Times' New Roman">converter。如?font face='"Times' New Roman">clazz已经存在一个对应的转换器,那么converterQ将覆盖原来的{换器。也是_我们可以?font face='"Times' New Roman">String,Double创徏自定义的cd转换器,q在注册后进行用?/font>

ps:apache的类定义明确Q描q非常清楚,所以就不脓Z子了。当然这只是到达可以正常使用的阶D,如果要进行改造或者创qConvertUtilsQ那可能需要更多的旉Q因要去参?font face='"Times' New Roman">ConvertUtilsBeanQ这里就不详qC?br />
以下Z用convertUtils的一个DATEcd的例子(该例子来源于学堂视屏)
1.定义converter

 1package com.bjsxt.oa.web;
 2
 3import java.text.ParseException;
 4import java.text.SimpleDateFormat;
 5import java.util.Date;
 6
 7import org.apache.commons.beanutils.Converter;
 8
 9public class UtilDateConverter implements Converter {
10    
11    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
12
13    public Object convert(Class type, Object value) {
14        if (value == null{
15            return value;
16        }

17        if (value instanceof Date) {
18            return value;
19        }

20        if (value instanceof String) {
21            try {
22                return format.parse((String)value);
23            }
 catch (ParseException e) {
24                e.printStackTrace();
25            }

26        }

27        return null;
28    }

29
30}

31
2.使用convertUilts注册converter
 1package com.bjsxt.oa.web;
 2
 3import java.util.Date;
 4
 5import javax.servlet.ServletException;
 6import javax.servlet.http.HttpServlet;
 7
 8import org.apache.commons.beanutils.ConvertUtils;
 9
10public class UtilDateConverterInitServlet extends HttpServlet {
11
12    @Override
13    public void init() throws ServletException {
14         ConvertUtils.register(new UtilDateConverter(), Date.class);
15    }

16
17}

18
3.在web.xml中配|servlet
1 <servlet>
2    <servlet-name>utilDateConverter</servlet-name>
3    <servlet-class>com.bjsxt.oa.web.UtilDateConverterInitServlet</servlet-class>
4    <load-on-startup>3</load-on-startup>
5  </servlet>  


]]>
org.apache.commons.beanutils.BeanUtils介绍http://www.aygfsteel.com/wx886104/archive/2009/03/04/257699.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Wed, 04 Mar 2009 01:53:00 GMThttp://www.aygfsteel.com/wx886104/archive/2009/03/04/257699.htmlhttp://www.aygfsteel.com/wx886104/comments/257699.htmlhttp://www.aygfsteel.com/wx886104/archive/2009/03/04/257699.html#Feedback0http://www.aygfsteel.com/wx886104/comments/commentRss/257699.htmlhttp://www.aygfsteel.com/wx886104/services/trackbacks/257699.htmlorg.apache.commons.beanutils.BeanUtils
 
一、简介:

BeanUtils提供?Java反射和自省API的包装。其主要目的是利用反机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,?多情况下Q对JavaBean的处理导致大量get/set代码堆积Q增加了代码长度和阅M码的隑ֺ?br />
二、用法:

BeanUtils是这个包里比较常用的一个工LQ这里只介绍它的copyProperties()Ҏ。该Ҏ定义如下Q?br />

public static void copyProperties(java.lang.Object dest,java.lang.Object orig)
    throws java.lang.IllegalAccessException,
           java.lang.reflect.InvocationTargetException


?果你有两个具有很多相同属性的JavaBeanQ一个很常见的情况就是Struts里的PO对象Q持久对象)和对应的ActionFormQ例?Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象Q传l的方式是用类g面的语句对属性?个赋|

//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋?br /> teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());

//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);

而用BeanUtils后,代码大大改观了Q如下所C:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋?br /> BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);


?果Teacher和TeacherForm间存在名UC相同的属性,则BeanUtils不对q些属性进行处理,需要程序员手动处理。例?Teacher包含modifyDateQ该属性记录最后修Ҏ期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的 copyProperties()后还要加上一句:

teacher.setModifyDate(new Date());


?么样Q很方便吧!除BeanUtils外还有一个名为PropertyUtils的工LQ它也提供copyProperties()ҎQ作用与 BeanUtils的同名方法十分相|主要的区别在于后者提供类型{换功能,卛_C个JavaBean的同名属性ؓ不同cdӞ在支持的数据cd范围 内进行{换,而前者不支持q个功能Q但是速度会更快一些。BeanUtils支持的{换类型如下:

      * java.lang.BigDecimal
      * java.lang.BigInteger
      * boolean and java.lang.Boolean
      * byte and java.lang.Byte
      * char and java.lang.Character
      * java.lang.Class
      * double and java.lang.Double
      * float and java.lang.Float
      * int and java.lang.Integer
      * long and java.lang.Long
      * short and java.lang.Short
      * java.lang.String
      * java.sql.Date
      * java.sql.Time
      * java.sql.Timestamp


q里要注意一点,java.util.Date是不被支持的Q而它的子cjava.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Datecd。否则在转换时会提示argument mistype异常?br />
三、优~点Q?br />
Apache Jakarta Commons目非常有用。我曑֜许多不同的项目上或直接或间接C用各U流行的commonslg。其中的一个强大的lg是BeanUtils。我 说明如何用BeanUtilslocal实体bean转换为对应的value 对象Q?br />

BeanUtils.copyProperties(aValue, aLocal)


?面的代码从aLocal对象复制属性到aValue对象。它相当单!它不localQ或对应的valueQ对象有多少个属性,只管q行复制。我们假?local对象?00个属性。上面的代码使我们可以无需键入臛_100行的冗长、容易出错和反复的get和setҎ调用。这太棒了!太强大了Q太有用 了!

现在Q还有一个坏消息Q用BeanUtils的成本惊人地昂贵Q我做了一个简单的试QBeanUtils所p的时间要过取数 据、将其复制到对应?value对象Q通过手动调用get和setҎQ,以及通过串行化将其返回到q程的客h的时间d。所以要心使用q种威力Q?
该文章的原文地址为:http://lifejava.spaces.live.com/Blog/cns!A666C33543221640!158.entry


]]>
pager-taglib的安装和使用http://www.aygfsteel.com/wx886104/archive/2008/12/29/248944.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Mon, 29 Dec 2008 08:45:00 GMThttp://www.aygfsteel.com/wx886104/archive/2008/12/29/248944.htmlhttp://www.aygfsteel.com/wx886104/comments/248944.htmlhttp://www.aygfsteel.com/wx886104/archive/2008/12/29/248944.html#Feedback0http://www.aygfsteel.com/wx886104/comments/commentRss/248944.htmlhttp://www.aygfsteel.com/wx886104/services/trackbacks/248944.html 2、在JSP面中用taglib指o引入pager-taglib标签?br /> 3、用pager-taglib标签库进行分处?br />
pg:pager【这个标{来设|分늚M参数】重要参数说明:
    url:分页的链接根地址Qpager标签会在q个链接的基上附加分参?br />     items:总记录数Qpager标签正是Ҏq个值来计算分页参数?br />     maxPageItems:每页昄的行敎ͼ默认?0
    maxIndexPages:在@环输出页码的时候,最大输出多个늠Q默认是10
    
pg:first【第一늚标签】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址Q最重要的export参数Q?br />     pageNumber - 늠
    firstItem - 首页W一行的索引?br />     lastItem - 首页最后一行的索引?br />     
pg:pre【上一|{】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址Q最重要的export参数Q?br />     pageNumber - 늠
    firstItem - 前页W一行的索引?br />     lastItem - 前页最后一行的索引?br />
pg:next【下一|{】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址Q最重要的export参数Q?br />     pageNumber - 늠
    firstItem - 下页W一行的索引?br />     lastItem - 下页最后一行的索引?br />     
pg:last重要参数说明Q?br />     export变量的意义:
    pageUrl - 分页链接URL地址Q最重要的export参数Q?br />     pageNumber - 늠
    firstItem - NW一行的索引?br />     lastItem - N最后一行的索引?br />     
pg:pages【这个标{来@环输出页码信息】重要参数说明:
    export变量的意义:
    pageUrl - 分页链接URL地址Q最重要的export参数Q?br />     pageNumber - 늠
    firstItem - pageNumberq个늠指定的那一늚W一行的索引?br />     lastItem - pageNumberq个늠指定的那一늚最后一行的索引?br />

pager-taglib-2.0下蝲
http://www.aygfsteel.com/Files/wx886104/pager-taglib-2.0.rar


]]>
struts--struts国际?/title><link>http://www.aygfsteel.com/wx886104/archive/2008/12/15/246347.html</link><dc:creator>勒紧皮带向前?/dc:creator><author>勒紧皮带向前?/author><pubDate>Mon, 15 Dec 2008 02:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/wx886104/archive/2008/12/15/246347.html</guid><wfw:comment>http://www.aygfsteel.com/wx886104/comments/246347.html</wfw:comment><comments>http://www.aygfsteel.com/wx886104/archive/2008/12/15/246347.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wx886104/comments/commentRss/246347.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wx886104/services/trackbacks/246347.html</trackback:ping><description><![CDATA[<p>1、struts国际化的配置<br />  * 在struts-config.xml文g中加入:<message-resources parameter="MessageResources" /><br />  <br /> 2、提供不同版本的国际化资源文Ӟ中文需要采用native2ascii转换成unicode</p> <p>3、在jsp中采?lt;bean:message>标签来读取国际化消息文本</p> <p>4、了解利用struts默认locale攑ֈsession中的Ҏ,完成采用~程的方式切换语a讄<br />  * 参见QChangeLanguageAction.java<br />  <br /> 5、消息文本的国际化处理,共有三个步骤Q?br />  * 创徏国际化消?br />  * 传递国际化消息<br />  * 昄国际化消?br />  <br /> 如何创徏国际化消息?<br />  理解ActionMessage和ActionMessages两个对象的区?br />  <br /> 如何传递国际化消息Q?br />  * 调用saveMessage()传递普通消息,调用saveErrors传递错误消?br />  <br /> 如何昄国际化消息?<br />  通过<html:messages>标签昄消息Q可以显C普通消息和错误消息Q?br />  通过<html:errors>昄消息Q只能显C错误消息) <br /> <br /> 当将国际化资源文件放入到一个包Ӟ在struts-config.xml文g中加入:<message-resources parameter="包名.MessageResources" /><br /> <br /> ChangeLanguageAction.java<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080"> 1</span><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Locale;<br /> </span><span style="color: #008080"> 2</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> </span><span style="color: #008080"> 3</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.http.HttpServletRequest;<br /> </span><span style="color: #008080"> 4</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.http.HttpServletResponse;<br /> </span><span style="color: #008080"> 5</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> </span><span style="color: #008080"> 6</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.struts.Globals;<br /> </span><span style="color: #008080"> 7</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.struts.action.Action;<br /> </span><span style="color: #008080"> 8</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.struts.action.ActionForm;<br /> </span><span style="color: #008080"> 9</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.struts.action.ActionForward;<br /> </span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.struts.action.ActionMapping;<br /> </span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> </span><span style="color: #008080">12</span><span style="color: #000000"><img id="Codehighlighter1_382_956_Open_Image" onclick="this.style.display='none'; Codehighlighter1_382_956_Open_Text.style.display='none'; Codehighlighter1_382_956_Closed_Image.style.display='inline'; Codehighlighter1_382_956_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_382_956_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_382_956_Closed_Text.style.display='none'; Codehighlighter1_382_956_Open_Image.style.display='inline'; Codehighlighter1_382_956_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> ChangeLanguageAction </span><span style="color: #0000ff">extends</span><span style="color: #000000"> Action </span><span id="Codehighlighter1_382_956_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_382_956_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /> </span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    @Override<br /> </span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> ActionForward execute(ActionMapping mapping, ActionForm form,<br /> </span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            HttpServletRequest request, HttpServletResponse response)<br /> </span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_547_953_Open_Image" onclick="this.style.display='none'; Codehighlighter1_547_953_Open_Text.style.display='none'; Codehighlighter1_547_953_Closed_Image.style.display='inline'; Codehighlighter1_547_953_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_547_953_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_547_953_Closed_Text.style.display='none'; Codehighlighter1_547_953_Open_Image.style.display='inline'; Codehighlighter1_547_953_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />            </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_547_953_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_547_953_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        String lang </span><span style="color: #000000">=</span><span style="color: #000000"> request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">lang</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /> </span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        Locale currentLocale </span><span style="color: #000000">=</span><span style="color: #000000"> Locale.getDefault(); <br /> </span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_670_717_Open_Image" onclick="this.style.display='none'; Codehighlighter1_670_717_Open_Text.style.display='none'; Codehighlighter1_670_717_Closed_Image.style.display='inline'; Codehighlighter1_670_717_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_670_717_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_670_717_Closed_Text.style.display='none'; Codehighlighter1_670_717_Open_Image.style.display='inline'; Codehighlighter1_670_717_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">"</span><span style="color: #000000">zh</span><span style="color: #000000">"</span><span style="color: #000000">.equals(lang)) </span><span id="Codehighlighter1_670_717_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_670_717_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            currentLocale </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Locale(</span><span style="color: #000000">"</span><span style="color: #000000">zh</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">CN</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">23</span><span style="color: #000000"><img id="Codehighlighter1_745_792_Open_Image" onclick="this.style.display='none'; Codehighlighter1_745_792_Open_Text.style.display='none'; Codehighlighter1_745_792_Closed_Image.style.display='inline'; Codehighlighter1_745_792_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_745_792_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_745_792_Closed_Text.style.display='none'; Codehighlighter1_745_792_Open_Image.style.display='inline'; Codehighlighter1_745_792_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        }</span></span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">en</span><span style="color: #000000">"</span><span style="color: #000000">.equals(lang)) </span><span id="Codehighlighter1_745_792_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_745_792_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            currentLocale </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Locale(</span><span style="color: #000000">"</span><span style="color: #000000">en</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">US</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />        }</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        </span><span style="color: #008000">//</span><span style="color: #008000">request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);</span><span style="color: #008000"><br /> </span><span style="color: #008080">27</span><span style="color: #008000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="color: #000000">        <br /> </span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.setLocale(request, currentLocale);<br /> </span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">index</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />    }</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /> </span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span></div> <p><br /> <br />  </p> <img src ="http://www.aygfsteel.com/wx886104/aggbug/246347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wx886104/" target="_blank">勒紧皮带向前?/a> 2008-12-15 10:46 <a href="http://www.aygfsteel.com/wx886104/archive/2008/12/15/246347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts中用Cookie控制d的流E?/title><link>http://www.aygfsteel.com/wx886104/archive/2008/12/12/245875.html</link><dc:creator>勒紧皮带向前?/dc:creator><author>勒紧皮带向前?/author><pubDate>Fri, 12 Dec 2008 02:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/wx886104/archive/2008/12/12/245875.html</guid><wfw:comment>http://www.aygfsteel.com/wx886104/comments/245875.html</wfw:comment><comments>http://www.aygfsteel.com/wx886104/archive/2008/12/12/245875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wx886104/comments/commentRss/245875.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wx886104/services/trackbacks/245875.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt">d Cookie 集合Q遍历集合找到所需?Cookie Q如果找C存进 Session Q否则蟩转到d面Q?</p> <p style="margin: 0cm 0cm 0pt"><strong>所需资源Q?</strong></p> <p style="margin: 0cm 0cm 0pt">ReadCookieAction.java- d Cookie 集合Q如果找到对?Cookie Q写?Session Q?</p> <p style="margin: 0cm 0cm 0pt">Login.jsp- d用页面; </p> <p style="margin: 0cm 0cm 0pt">LoginSubmit.java- 记录d信息Qƈ写入 Session Q?</p> <p style="margin: 0cm 0cm 0pt">LoginOk.jsp- d Session Qƈ昄?</p> <p style="margin: 0cm 0cm 0pt"><strong>?Cookie </strong><strong>的方?</strong>Q?</p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">Cookie[] cookies = request.getCookies();</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><strong><span style="font-size: 10pt; color: #7f0055">if</span> </strong><span style="font-size: 10pt; color: black">(cookies != </span><strong><span style="font-size: 10pt; color: #7f0055">null</span> </strong><span style="font-size: 10pt; color: black">) {</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">    </span><strong><span style="font-size: 10pt; color: #7f0055">for</span> </strong><span style="font-size: 10pt; color: black">(</span> <strong><span style="font-size: 10pt; color: #7f0055">int</span> </strong><span style="font-size: 10pt; color: black">i=0; i<cookies.</span> <span style="font-size: 10pt; color: #0000c0">length</span> <span style="font-size: 10pt; color: black">; i++) {</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">       Cookie cookie = cookies[i];</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">       </span><strong><span style="font-size: 10pt; color: #7f0055">if</span> </strong><span style="font-size: 10pt; color: black">(cookie.getName().equals(</span> <span style="font-size: 10pt; color: #2a00ff">"userInfo"</span> <span style="font-size: 10pt; color: black">)) {</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">           String value = cookie.getValue();</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">           String[] info = value.split(</span> <span style="font-size: 10pt; color: #2a00ff">"_"</span> <span style="font-size: 10pt; color: black">);</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">           UserForm userForm = </span><strong><span style="font-size: 10pt; color: #7f0055">new</span> </strong><span style="font-size: 10pt; color: black">UserForm();</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">           userForm.setUserName(info[0]);</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">           userForm.setUserPassword(info[1]);</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">           request.getSession().setAttribute(</span> <span style="font-size: 10pt; color: #2a00ff">"userForm"</span> <span style="font-size: 10pt; color: black">, userForm);</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">           </span><strong><span style="font-size: 10pt; color: #7f0055">return</span> </strong><span style="font-size: 10pt; color: black">mapping.findForward(</span> <span style="font-size: 10pt; color: #2a00ff">"ok"</span> <span style="font-size: 10pt; color: black">);</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">       }</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">    }</span> </font></p> <p style="margin: 0cm 0cm 0pt"><font color="#ffff99"><span style="font-size: 10pt; color: black">}</span> </font></p> <p style="margin: 0cm 0cm 0pt"><strong>?Cookie </strong><strong>的方法: </strong></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">Cookie c = </span><strong><span style="font-size: 10pt; color: #7f0055">new</span> </strong><span style="font-size: 10pt; color: black">Cookie(</span> <span style="font-size: 10pt; color: #2a00ff">"userInfo"</span> <span style="font-size: 10pt; color: black">,userForm.getUserName()+</span> <span style="font-size: 10pt; color: #2a00ff">"_"</span> <span style="font-size: 10pt; color: black">+userForm.getUserPassword());</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">c.setComment(</span> <span style="font-size: 10pt; color: #2a00ff">"A test cookie"</span> <span style="font-size: 10pt; color: black">);</span> </font></p> <p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#ffff99"><span style="font-size: 10pt; color: black">c.setMaxAge(120);</span> </font></p> <p style="margin: 0cm 0cm 0pt"><font color="#ffff99"><span style="font-size: 10pt; color: black">response.addCookie(c);</span> </font></p> <img src ="http://www.aygfsteel.com/wx886104/aggbug/245875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wx886104/" target="_blank">勒紧皮带向前?/a> 2008-12-12 10:57 <a href="http://www.aygfsteel.com/wx886104/archive/2008/12/12/245875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts--关于ACTION的映\径心?/title><link>http://www.aygfsteel.com/wx886104/archive/2008/12/11/245641.html</link><dc:creator>勒紧皮带向前?/dc:creator><author>勒紧皮带向前?/author><pubDate>Thu, 11 Dec 2008 03:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/wx886104/archive/2008/12/11/245641.html</guid><wfw:comment>http://www.aygfsteel.com/wx886104/comments/245641.html</wfw:comment><comments>http://www.aygfsteel.com/wx886104/archive/2008/12/11/245641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wx886104/comments/commentRss/245641.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wx886104/services/trackbacks/245641.html</trackback:ping><description><![CDATA[在采用struts框架目中,我们通常模块分c,攑֜模块的文件夹中。这样在面中访问时需加上文g目录名\径方可。但是我们可以通过在struts-config中配|Action时加上一个虚拟的目录名,使虚拟的目录名和模块的文件目录名同名Q通过讉KAction时就可自动进入该目录下,q样讉K时就不需再文件目录\径了?br /> 例:一个文件管理系l中有用L理模块,其攑օ指定的模块文件夹下,如图Q?br /> <img height="73" alt="" src="http://www.aygfsteel.com/images/blogjava_net/wx886104/1.jpg" width="175" border="0" /><br /> 在struts-config.xml文g中配|Action的pathQ如图:<br /> <img height="135" alt="" src="http://www.aygfsteel.com/images/blogjava_net/wx886104/2.jpg" width="652" border="0" /><br /> 在页面访问时Q设|连接如Q?lt;a href="user/list.do" title="L击访问用L理系l?>用户理pȝ</a><br /> 当点dQ在地址栏中昄的地址如图Q?br /> <img height="42" alt="" src="http://www.aygfsteel.com/images/blogjava_net/wx886104/3.jpg" width="424" border="0" /><br /> q样p入user目录下。再在访问改目录下的文gӞ׃需加什么目录名了?br /> <img src ="http://www.aygfsteel.com/wx886104/aggbug/245641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wx886104/" target="_blank">勒紧皮带向前?/a> 2008-12-11 11:09 <a href="http://www.aygfsteel.com/wx886104/archive/2008/12/11/245641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转蝲)struts上传下蝲http://www.aygfsteel.com/wx886104/archive/2008/09/25/231112.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Thu, 25 Sep 2008 07:12:00 GMThttp://www.aygfsteel.com/wx886104/archive/2008/09/25/231112.htmlhttp://www.aygfsteel.com/wx886104/comments/231112.htmlhttp://www.aygfsteel.com/wx886104/archive/2008/09/25/231112.html#Feedback0http://www.aygfsteel.com/wx886104/comments/commentRss/231112.htmlhttp://www.aygfsteel.com/wx886104/services/trackbacks/231112.html最q要做上传下载,所以又把它d了,熟悉了一把,做了一下字节{换的调整及上传类型的限制Q当然还有上传\径的限制。不q一直在考虑的问题是怎样扑ֈ减少服务器压力的具体ҎQ本列子贴出来是希望能给某些新手一些帮助,同时也希望各路大侠批评指点小弟的许多不?/span>

 

首先建立一个FileAction

package com.action;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import com.actionForm.FileActionForm;
import org.apache.struts.actions.DispatchAction;
import java.util.Date;
import java.text.*;
import org.apache.struts.upload.FormFile;
import java.io.*;
import java.net.URLEncoder;
import com.dao.*;

public class FileAction extends DispatchAction {

    private JDBConnection connection =new JDBConnection();
//以下Ҏ实现文g的上?/span>
    public ActionForward upLoadFile(ActionMapping mapping, ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response) throws
            Exception {
     ActionForward forward=null;
        Date date = new Date();
        FileActionForm fileActionForm = (FileActionForm) form;
        //FormFile用于指定存取文g的类?br />         FormFile file = fileActionForm.getFile(); //获取当前的文?/span>
      // 获得pȝ的绝对\?/span>  String dir = servlet.getServletContext().getRealPath("/image");
        //我上传的文g没有攑֜服务器上。而是存在D:D:\\loadfile\\temp\\
        String dir="D:\\loadfile\\temp\\";
        int i = 0;
  String type = file.getFileName();
  while(i!=-1){
   //扑ֈ上传文g的类型的位置Q这个地方的?.'
   i = type.indexOf(".");
  /* System.out.println(i);*/
   /*截取上传文g的后~?此时得到了文件的cd*/
   type = type.substring(i+1);
  }
  // 限制上传cd为jpg,txt,rar;
  if (!type.equals("jpg") && !type.equals("txt")&& !type.equals("bmp"))
   
  {//当上传的cd不ؓ上述cdӞ跌{到错误页面?/span>
    forward=mapping.findForward("error");
  }
  else
  {  
//    上传时间加入文件名Q这个地方的是毫U数Q?nbsp;  
     String times = String.valueOf(date.getTime());
    //l合?time.type
         String  fname = times + "." + type;
       //InInputStream是用以从特定的资源读取字节的Ҏ?br />           InputStream streamIn = file.getInputStream();    //创徏d用户上传文g的对?br />           //得到是字节数Q即byte,我们可以直接用file.getFileSize(),也可以在创徏d对象时用streamIn.available();
         // int ok=streamIn.available();          
          int ok=file.getFileSize();
          String strFee = null;
          //q个地方是处理上传的为M单位计算Ӟ下一个是以kb,在下一个是byte;
         
          if(ok>=1024*1024)
          {
           float ok1=(((float)ok)/1024f/1024f); 
           DecimalFormat myformat1 = new DecimalFormat("0.00");        
          strFee = myformat1.format(ok1)+"M";
                 System.out.println(strFee+"M");
          }
          else if(ok>1024 && ok<=1024*1024)
          {
             double  ok2=((double)ok)/1024;
             DecimalFormat myformat2=new DecimalFormat("0.00");
            strFee = myformat2.format(ok2)+"kb";
                 System.out.println(strFee+"kb");
          }
          else if(ok<1024)
          {
           System.out.println("aaaaaaaaa");
           strFee=String.valueOf(ok)+"byte";
           System.out.println(strFee);
          
          }
          System.out.println( streamIn.available()+"文g大小byte");
          //q个是io包下的上传文件类
          File uploadFile = new File(dir);   //指定上传文g的位|?br />           if (!uploadFile.exists() || uploadFile == null) {  //判断指定路径dir是否存在Q不存在则创\?br />               uploadFile.mkdirs();
          }
          //上传的\?文g?br />           String path = uploadFile.getPath() + "\\" + fname;
       //OutputStream用于向某个目标写入字节的抽象c,q个地方写入目标是pathQ通过输出FileOutputStreamd
          OutputStream streamOut = new FileOutputStream(path);
          int bytesRead = 0;
          byte[] buffer = new byte[8192];
          //数据读入byte数组的一部分Q其中读入字节数的最大值是8192Q读入的字节存储到Qbuffer[0]到buffer[0+8190-1]的部分中
          //streamIn.readҎq回的是实际d字节数目.如果d末尾则返?1.如果bytesReadq回?则表C没有读取Q何字节?br />
          while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {
           //写入buffer数组的一部分Q从buf[0]开始写入ƈ写入bytesRead个字节,q个writeҎ发生阻塞直臛_节写入完成?br />               streamOut.write(buffer, 0, bytesRead);
          }
        //  关闭输出输入?销毁File?br />           streamOut.close();
          streamIn.close();
          file.destroy();    
          String paths=path;
          System.out.println(paths);
         String fileName = Chinese.toChinese(fileActionForm.getFileName()); //获取文g的名U?/span>
        //String fileSize = String.valueOf(file.getFileSize());
         String fileDate = DateFormat.getDateInstance().format(date);
         String sql = "insert into tb_file values('" + fileName + "','" +
         strFee + "','" + fileDate + "','" + paths + "')";

         connection.executeUpdate(sql);
         connection.closeConnection();
         forward=mapping.findForward("upLoadFileResult");
  }
        return forward;
    }
    //实现文g的下?br />     public ActionForward downFile(ActionMapping mapping, ActionForm form,
                                  HttpServletRequest request,
                                  HttpServletResponse response) throws
            Exception {
        String path = request.getParameter("path");
        System.out.println(path+"111");
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        OutputStream fos = null;
        InputStream fis = null;
       
      //如果是从服务器上取就用这个获得系l的l对路径Ҏ?nbsp; String filepath = servlet.getServletContext().getRealPath("/" + path);
        String  filepath=path;
        System.out.println("文g路径"+filepath);
        File uploadFile = new File(filepath);
        fis = new FileInputStream(uploadFile);
        bis = new BufferedInputStream(fis);
        fos = response.getOutputStream();
        bos = new BufferedOutputStream(fos);
        //q个就是弹Z载对话框的关键代?/span>
        response.setHeader("Content-disposition",
                           "attachment;filename=" +
                           URLEncoder.encode(path, "utf-8"));
        int bytesRead = 0;
        //q个地方的同上传的一栗我׃多说了,都是用输入流q行先读Q然后用输出去写,唯一不同的是我用的是~冲输入输出?br />         byte[] buffer = new byte[8192];
        while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
            bos.write(buffer, 0, bytesRead);
        }
        bos.flush();
        fis.close();
        bis.close();
        fos.close();
        bos.close();
        return null;
    }

}

FileActionForm

     

package com.actionForm;

import org.apache.struts.action.*;
import org.apache.struts.upload.*;

public class FileActionForm extends ActionForm {
    private String fileName;//上传文g的名U?br />     private String fileSize;//上传文g的大?br />     private String filePath;//上传文g到服务器的\?br />     private String fileDate;//上传文g的日?br />     private FormFile file;//上传文g

    public String getFileName() {
        return fileName;
    }

    public FormFile getFile() {
        return file;
    }

    public String getFileSize() {
        return fileSize;
    }

    public String getFilePath() {
        return filePath;
    }

    public String getFileDate() {
        return fileDate;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public void setFile(FormFile file) {
        this.file = file;
    }

    public void setFileSize(String fileSize) {
        this.fileSize = fileSize;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public void setFileDate(String fileDate) {
        this.fileDate = fileDate;
    }

}

index.jsp  此位|的form是javabeen的对象,q个javabeen中存取的囄的相关信?/span>

<table width="264" height="81" border="0" align="center" cellpadding="0" cellspacing="0">
                <tr>
                  <td width="115"  rowspan="4" align="center"><img src="<%=form.getFilePath()%>" width="100" height="100"></td>
                  <td width="133" align="center">囄名称Q?lt;%=form.getFileName()%></td>
                </tr>
                <tr align="center">
                  <td>囄大小Q?lt;%=form.getFileSize()%></td>
                </tr>
                <tr align="center">
                  <td>上传日期:<%=form.getFileDate()%></td>
                </tr>
                <tr>
                  <td align="center"><a href="fileAction.do?method=downFile&path=<%=form.getFilePath()%>" ><img src="priture/bottond.jpg"></a>


                  </td>
                </tr>
            </table>

<html:form action="fileAction.do?method=upLoadFile" enctype="multipart/form-data" onsubmit="return Mycheck()">
        <table height="52" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr align="center">
            <td width="60" height="26">囄名称:</td>
            <td width="160"> <html:text property="fileName"/> </td>
            <td width="60">囄路径:</td>
            <td width="198"> <html:file property="file"/> </td>
          </tr>
          <tr align="right">
            <td height="26" colspan="4"> <html:submit>上传</html:submit> </td>
          </tr>
        </table>
  </html:form>

struts-config.xml  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "

<struts-config>
  <form-beans>
    <form-bean name="fileActionForm" type="com.actionForm.FileActionForm" />
  </form-beans>
  <action-mappings>
    <action name="fileActionForm" parameter="method" path="/fileAction" scope="request" type="com.action.FileAction" validate="true">
        <forward name="upLoadFileResult" path="/result.jsp"/>
        <forward name="error" path="/fail.jsp"></forward>
    </action>
  </action-mappings>
  <message-resources parameter="ApplicationResources" />
</struts-config>



转自javaEye http://www.javaeye.com/topic/219585



]]>
log4j.properties文g模板http://www.aygfsteel.com/wx886104/archive/2008/09/16/229118.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Tue, 16 Sep 2008 04:01:00 GMThttp://www.aygfsteel.com/wx886104/archive/2008/09/16/229118.htmlhttp://www.aygfsteel.com/wx886104/comments/229118.htmlhttp://www.aygfsteel.com/wx886104/archive/2008/09/16/229118.html#Feedback0http://www.aygfsteel.com/wx886104/comments/commentRss/229118.htmlhttp://www.aygfsteel.com/wx886104/services/trackbacks/229118.html##Log4J的配|之单它遍及于来多的应用中?br />
##Log4J配置文g实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签{全套功能。择其一二用就够用了?br />
##此文Ӟlog4j.propertiesQ内Ҏ自网l,非本文作者liigo原创?br /> log4j.rootLogger 
= DEBUG, CONSOLE,A1
log4j.addivity.org.apache 
= true  

# 应用于控制台 
log4j.appender.CONSOLE 
= org.apache.log4j.ConsoleAppender 
log4j.appender.Threshold 
= DEBUG 
log4j.appender.CONSOLE.Target 
= System.out 
log4j.appender.CONSOLE.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern 
= [framework]  % d  -   % c  -%- 4r [ % t]  %- 5p  % c  % x  -   % m % n 
#log4j.appender.CONSOLE.layout.ConversionPattern 
= [start] % d  {DATE} [DATE] % n % p[PRIORITY] % n % x[NDC] % n % t[THREAD] n % c[CATEGORY] % n % m[MESSAGE] % n % n 

#应用于文?br /> log4j.appender.FILE 
= org.apache.log4j.FileAppender 
log4j.appender.FILE.File 
= file.log 
log4j.appender.FILE.Append 
= false  
log4j.appender.FILE.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.ConversionPattern 
= [framework]  % d  -   % c  -%- 4r [ % t]  %- 5p  % c  % x  -   % m % n 
# Use  
this  layout  for  LogFactor  5  analysis 

# 应用于文件回?nbsp;
log4j.appender.ROLLING_FILE 
= org.apache.log4j.RollingFileAppender 
log4j.appender.ROLLING_FILE.Threshold 
= ERROR 
log4j.appender.ROLLING_FILE.File 
= rolling.log 
log4j.appender.ROLLING_FILE.Append 
= true  
log4j.appender.ROLLING_FILE.MaxFileSize 
= 10KB 
log4j.appender.ROLLING_FILE.MaxBackupIndex 
= 1  
log4j.appender.ROLLING_FILE.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.ROLLING_FILE.layout.ConversionPattern 
= [framework]  % d  -   % c  -%- 4r [ % t]  %- 5p  % c  % x  -   % m % n 

#应用于socket 
log4j.appender.SOCKET 
= org.apache.log4j.RollingFileAppender 
log4j.appender.SOCKET.RemoteHost 
= localhost 
log4j.appender.SOCKET.Port 
= 5001  
log4j.appender.SOCKET.LocationInfo 
= true  
# Set up  
for  Log Facter  5  
log4j.appender.SOCKET.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.SOCET.layout.ConversionPattern 
= [start] % d  {DATE} [DATE] % n % p[PRIORITY] % n % x[NDC] % n % t[THREAD] % n % c[CATEGORY] % n % m[MESSAGE] % n % n 

# Log Factor  
5  Appender 
log4j.appender.LF5_APPENDER 
= org.apache.log4j.lf5.LF5Appender 
log4j.appender.LF5_APPENDER.MaxNumberOfRecords 
= 2000  

# 发送日志给邮g 
log4j.appender.MAIL 
= org.apache.log4j.net.SMTPAppender 
log4j.appender.MAIL.Threshold 
= FATA
log4j.appender.MAIL.BufferSize 
= 10  
log4j.appender.MAIL.From 
= web@www.wuset.com
log4j.appender.MAIL.SMTPHost 
= www.wusetu.com 
log4j.appender.MAIL.Subject 
= Log4J Message 
log4j.appender.MAIL.To 
= web@www.wusetu.com
log4j.appender.MAIL.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.MAIL.layout.ConversionPattern 
= [framework]  % d  -   % c  -%- 4r [ % t]  %- 5p  % c  % x  -   % m % n 


# 用于数据?nbsp;
log4j.appender.DATABASE 
= org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DATABASE.URL 
= jdbc:mysql: // localhost:3306/test  
 log4j.appender.DATABASE.driver = com.mysql.jdbc.Driver 
log4j.appender.DATABASE.user 
= root 
log4j.appender.DATABASE.password 
=  
log4j.appender.DATABASE.sql 
= INSERT INTO LOG4J (Message) VALUES ( ' [framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n ' ) 
log4j.appender.DATABASE.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.DATABASE.layout.ConversionPattern 
= [framework]  % d  -   % c  -%- 4r [ % t]  %- 5p  % c  % x  -   % m % n 
log4j.appender.A1 
= org.apache.log4j.DailyRollingFileAppender 
log4j.appender.A1.File 
= SampleMessages.log4j 
log4j.appender.A1.DatePattern 
= yyyyMMdd - HH ' .log4j '  
log4j.appender.A1.layout 
= org.apache.log4j.xml.XMLLayout 

#自定义Appender 
log4j.appender.im  
=  net.cybercorlin.util.logger.appender.IMAppender 
log4j.appender.im.host  
=  mail.cybercorlin.net 
log4j.appender.im.username  
=  username 
log4j.appender.im.password  
=  password 
log4j.appender.im.recipient  
=  corlin@cybercorlin.net
log4j.appender.im.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.im.layout.ConversionPattern  
= [framework]  % d  -   % c  -%- 4r [ % t]  %- 5p  % c  % x  -   % m % n

# l束 


]]>
struts的验证框架中的arg参数http://www.aygfsteel.com/wx886104/archive/2008/09/05/227263.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Fri, 05 Sep 2008 08:45:00 GMThttp://www.aygfsteel.com/wx886104/archive/2008/09/05/227263.htmlhttp://www.aygfsteel.com/wx886104/comments/227263.htmlhttp://www.aygfsteel.com/wx886104/archive/2008/09/05/227263.html#Feedback0http://www.aygfsteel.com/wx886104/comments/commentRss/227263.htmlhttp://www.aygfsteel.com/wx886104/services/trackbacks/227263.html 例如Q?br />
 1 <field property="phone" depends="required,mask,minlength,maxlength">
 2                 <arg0 key="phne" resource="false"/>
 3                 <arg1 name="minlength" key="${minlength}" resource="fasle"/>
 4                 <arg1 name="maxlength" key="${maxlength}" resource="fasle"/>
 5                 <var>
 6                     <var-name>mask</var-name>
 7                     <var-value>${phone}</var-value>
 8                 </var>
 9                 <var>
10                     <var-name>minlength</var-name>
11                     <var-value>8</var-value>
12                 </var>
13                 <var>
14                     <var-name>maxlength</var-name>
15                     <var-value>8</var-value>
16                 </var>
17             </field>




]]>
使用struts?DispatchAction的一点细?/title><link>http://www.aygfsteel.com/wx886104/archive/2008/09/05/227156.html</link><dc:creator>勒紧皮带向前?/dc:creator><author>勒紧皮带向前?/author><pubDate>Fri, 05 Sep 2008 03:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/wx886104/archive/2008/09/05/227156.html</guid><wfw:comment>http://www.aygfsteel.com/wx886104/comments/227156.html</wfw:comment><comments>http://www.aygfsteel.com/wx886104/archive/2008/09/05/227156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wx886104/comments/commentRss/227156.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wx886104/services/trackbacks/227156.html</trackback:ping><description><![CDATA[今天在学习用org.apache.struts.actions.DispatchAction<br /> 发现应ؓ使用myeclipse(me)来徏立,因ؓme会默认的建立executeҎQ必dexecute删去Q否则自定的Ҏ不会被调用?br /> <img src ="http://www.aygfsteel.com/wx886104/aggbug/227156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wx886104/" target="_blank">勒紧皮带向前?/a> 2008-09-05 11:00 <a href="http://www.aygfsteel.com/wx886104/archive/2008/09/05/227156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title><logic:iterate>用法详解 <?gt;http://www.aygfsteel.com/wx886104/archive/2008/09/02/226428.html勒紧皮带向前?/dc:creator>勒紧皮带向前?/author>Tue, 02 Sep 2008 08:44:00 GMThttp://www.aygfsteel.com/wx886104/archive/2008/09/02/226428.htmlhttp://www.aygfsteel.com/wx886104/comments/226428.htmlhttp://www.aygfsteel.com/wx886104/archive/2008/09/02/226428.html#Feedback0http://www.aygfsteel.com/wx886104/comments/commentRss/226428.htmlhttp://www.aygfsteel.com/wx886104/services/trackbacks/226428.htmlIterate主要用来处理在页面上输出集合c,集合一般来说是下列之一Q?br /> 1?nbsp;java对象的数l?br />
2?nbsp;ArrayList、Vector、HashMap{?br />
具体用法请参考struts文档Q这里不作详l介l?br />
现在定义一个classQUser.java 把它~译成User.class

package example;

import java.io.Serializable;
public final class User implements Serializable {
private String name = null;
private String password = null;

public String getName () {
return (this.name);
}

public void setName(String name) {
this.name = name;
}

public String getPassword () {
return (this. password);
}

public void setPassword (String password) {
this. password = password;
}

}

然后在一个struts webapplication中创Z个jspQ例如iterate.jsp

<%@ page language=”java” %>
<%@ page import=”example.*%>
<%@ taglib uri=/WEB-INF/struts-bean.tld” prefix=”bean” %>
<%@ taglib uri=/WEB-INF/struts-logic.tld” prefix=”logic” %>

<%
java.util.ArrayList list 
= new java.util.ArrayList();
User usera
=new User();
usera.setName(”white”);
usera.setPassword(”abcd”);
list.add(usera);
User userb
=new User();
userb.setName(”mary”);
userb.setPassword(”hijk”);
list.add(userb);
session.setAttribute(”list”, list);

%>

<html><body><table width=”100%”>

<logic:iterate id=”a” name=”list” type=” example.User “>

<tr><td width=”50%”>

name: 
<bean:write name=”a” property=”name”/>

<td/><td width=”50%”>

password: 
<bean:write name=”a” property=”password”/>

</td></tr>

</logic:iterate>

</table></body></html>
User.class, iterate.jsp攑ֈ相应的目录,q行iterate.jsp你就可以看到iterate的效果了

iterate标记
id 脚本变量的名Uͼ它保存着集合中当前元素的句柄?br /> name 代表了你需要叠代的集合Q来自session或者request的属性?br /> type 是其中的集合cd素的cd

bean的write标记是用来将属性输出的Qname用来匚witerate的idQproperty用来匚w相应cȝ属?br />
<logic:iterate>用法详解2

2007-04-04 20:34

<login:iterate>标记用于在页面中创徏一个@?以此来遍历如数组、Collection、Mapq样的对象。该标记的功能强大,在Struts应用的页面中l常使用到?br /> 1、对数组q行循环遍历
使用
<logic:iterate>标记可以用于遍历数组Q以下是一D늤例代码:

 

E序代码 E序代码

<%
String[] testArray={”str1″,”str2″,”str3″};
pageContext.setAttribute(”test”,testArray);
%>
<logic:iterate id=”show” name=”test”>
<bean:write name=”show”/>
</logic:iterate>
在上面的代码中,首先定义了一个字W串数组Qƈ为其初始化。接着Q将该数l存入pageContext对象中,命名为test1。然后?/span><logic:iterate>标记的name属性指定了该数l,q用id来引用它Q同时?/span><bean:write>标记来将其显C出来。其l果为:
str1
str2
str3

另外Q还可以通过length属性来指定输出元素的个数。如下面的代码:

 

E序代码 E序代码

<logic:iterate id=”show” name=”test” length=”2″ offset=”1″>
<bean:write name=”show”/>
</logic:iterate>
其中length属性指定了输出元素的个敎ͼoffset属性指定了从第几个元素开始输出,如此处ؓ1Q则表示从第二个元素开始输出。所以该代码的运行结果应当输出:
str2
str3

另外Q该标记q有一个indexId属性,它指定一个变量存攑ֽ前集合中正被讉K的元素的序号Q如Q?br />
 

E序代码 E序代码

<logic:iterate id=”show” name=”test” length=”2″ offset=”1″ indexId=”number”>
<bean:write name=”number”/>:<bean:write name=”show”/>
</logic:iterate>
其显C结果ؓQ?br /> 1:str2
2:str3

2、对HashMapq行循环遍历

 

E序代码 E序代码

<%
HashMap countries
=new HashMap();
countries.put(”country1″,”中国”);
countries.put(”country2″,”国”);
countries.put(”country3″,”英国”);
countries.put(”country4″,”法国”);
countries.put(”country5″,”德国”);
pageContext.setAttribute(”countries”,countries);
%>
<logic:iterate id=”country” name=”countries”>
<bean:write name=”country” property=”key”/>:
<bean:write name=”country” property=”value”/>
</logic:iterate>
在bean:write中通过property的key和value分别获得HaspMap对象的键和倹{其昄l果为:
country5:德国
country3:英国
country2:国
country4:法国
country1:中国
q果可看出Q它q未按添加的序其昄出来。这是因为HaspMap是无序存攄?br />
3、嵌套遍?br />
 

E序代码 E序代码

<%
String[] colors={”red”,”green”,”blue”};
String[] countries1={”中国”,”国”,”法国”};
String[] persons={”乔丹”,”布什”,”克林?#8221;};
ArrayList list2
=new ArrayList();
list2.add(colors);
list2.add(countries1);
list2.add(persons);
pageContext.setAttribute(”list2″,list2);
%>
<logic:iterate id=”first” name=”list2″ indexId=”numberfirst”>
<bean:write name=”numberfirst”/>
<logic:iterate id=”second” name=”first”>
<bean:write name=”second”/>
</logic:iterate>
<br>
</logic:iterate>
q行效果Q?br /> 0 red green blue
1 中国 国 法国
2 乔丹 布什 克林?br />

<logic:iterate id="myBean" indexId="ind" name="循环JavaBean的对象名U?>

<bean:write name="myBean" property="Bean的属?>

  <!--循环Map-->
   <logic:iterate id="myHashMap" indexId="mapInd" name="myBean" property="hashMap名称">
         <!--输出hashMap的键,不需要可以不用这?->
         <bean:write name="myHashMap" property="key">

         <!--输出hashMap的?如果值是个数l或者又一个MAP你可以再对他循环-->
         <bean:write name="myHashMap" property="value">
   </logic:iterate>

<logic:iterate>



转自 听雪?http://www.tingxuelou.com/index.php/archives/517



]]>
StrutsU籍之第2D:W?.10?qo文本输入Q{Q?/title><link>http://www.aygfsteel.com/wx886104/archive/2008/08/26/224457.html</link><dc:creator>勒紧皮带向前?/dc:creator><author>勒紧皮带向前?/author><pubDate>Tue, 26 Aug 2008 05:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/wx886104/archive/2008/08/26/224457.html</guid><wfw:comment>http://www.aygfsteel.com/wx886104/comments/224457.html</wfw:comment><comments>http://www.aygfsteel.com/wx886104/archive/2008/08/26/224457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wx886104/comments/commentRss/224457.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wx886104/services/trackbacks/224457.html</trackback:ping><description><![CDATA[转自 http://www.aygfsteel.com/SteelHand/archive/2005/07/01/6974.html<br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">W?.10? qo文本输入<br /> 问题<br /> <br /> 你想要渲染包含HTML标记的数据,q且希望该数据被览器当作HTML标记解释和处理?br /> 动作?br /> <br /> 很简单,可以使用Q?br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">bean:write </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="myForm"</span><span style="color: #ff0000;"> property</span><span style="color: #0000ff;">="freeText"</span><span style="color: #ff0000;"> filtered</span><span style="color: #0000ff;">="false"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <br />  <br /> <br /> 在用JSTLӞ你也可以使用未过滤的|<br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">c:out </span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">="${myForm.freeText}"</span><span style="color: #ff0000;"> escapeXml</span><span style="color: #0000ff;">="false"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <br />  <br /> 动作变化<br /> <br /> 在你使用Struts bean:write 标签来生文本时Q默认情况下M对HTML处理敏感的字W都要被它们的对{实体代ѝ例如,大于号字W?>) 被替代?/span><span style="color: #ff0000;">&gt;</span><span style="color: #000000;">字符实体。这U特征称为是响应qoQ?nbsp;response filteringQ,默认情况下是Ȁzȝ。在大多数情况下Q过滤正是希望的行ؓQ因为未l过滤的文本可能被浏览器误解释。Table 3-4 列出了被bean:write标签qo的字W和它们的对应实体?br /> Table 3-4. 被过滤的字符<br /> <br /> 字符名称<br />     <br /> <br /> 字符?br />     <br /> <br /> 替代实体<br /> <br /> 大于<br />     <br /> <br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;"> <br />     <br /> <br /> &lt</span><span style="color: #ff0000;">;<br /> <br /> 于<br />     <br /> <br /> </span><span style="color: #0000ff;">></span><span style="color: #000000;"> <br />     <br /> <br /> </span><span style="color: #ff0000;">&gt;</span><span style="color: #000000;"><br /> <br /> &W号<br />     <br /> <br /> &<br />     <br /> <br /> </span><span style="color: #ff0000;">&amp;</span><span style="color: #000000;"><br /> <br /> 双引?br />     <br /> <br /> "<br />     <br /> <br /> </span><span style="color: #ff0000;">&quot;</span><span style="color: #000000;"><br /> <br /> 反斜?br />     <br /> <br /> \<br />     <br /> <br /> '<br /> <br />  <br /> <br /> 但是有时候,你希望被渲染的文本中包括HTML 标签。假设你有一个在U日志应用,允许用户输入要昄在一个页面中的文本。允怋用HTML 标签得用户可以那些可以格式化文本的标记。文本中可能包含链接,不同的字体,以及囑փ{等。在其他情Ş下,你的应用可能可能q会从其他来源,比如另一个URLQ一个XML文gQ一个Web Service或者数据库中,获得HTML模板文本?br /> <br /> 通过bean:write标签的filtered属性设|ؓfalseQ你可以告诉Struts标签不要使用相应的实体替?nbsp;tag not to Ҏ字符。首先,我们来看一下过滤是如何工作的。假设一个用户在表单中输入了下面的文本:<br /> Apache Struts Web Framework </span><span style="color: #0000ff;"><</span><span style="color: #800000;">b</span><span style="color: #0000ff;">></span><span style="color: #000000;">rocks</span><span style="color: #0000ff;"></</span><span style="color: #800000;">b</span><span style="color: #0000ff;">></span><span style="color: #000000;">!<br /> <br />  <br /> <br /> 现在q个文本被bean:write标签来渲染显C。当filtered 属性设施ؓtrueӞҎ字符被其对{物替换Q这h本看h׃是:<br /> Apache Struts Web Framework </span><span style="color: #ff0000;">&lt;</span><span style="color: #000000;">b</span><span style="color: #ff0000;">&gt;</span><span style="color: #000000;">rocks</span><span style="color: #ff0000;">&lt;</span><span style="color: #000000;">/b</span><span style="color: #ff0000;">&gt;</span><span style="color: #000000;">!<br /> <br /> q很有可能不是用h惌的。他惌的是"Apache Struts Web Framework rocks!"。但是,因ؓ意图是想要允许用戯入装饰文本的HTML标签Q那么将filtered属性设|ؓfalse ׃得到正确的渲染:<br /> Apache Struts Web Framework </span><span style="color: #0000ff;"><</span><span style="color: #800000;">b</span><span style="color: #0000ff;">></span><span style="color: #000000;">rocks</span><span style="color: #0000ff;"></</span><span style="color: #800000;">b</span><span style="color: #0000ff;">></span><span style="color: #000000;">!<br /> <br />  <br /> <br /> 览器将认识q个标签Qƈ且按其所愿正的应用HTML 标记?br /> <br /> q在渲染一个Web面时式一个有用的机制。但是,在用这个方法时必须_心。如果数据是没有qo的,那么可能会危及渲染后的 HTML面的布局Q整个页面可能会看v来遭到破坏。例如,假定下面的文本被输入Q?br /> Apache Struts Web Framework </span><span style="color: #0000ff;"><</span><span style="color: #800000;">b</span><span style="color: #0000ff;">></span><span style="color: #000000;">rocks</span><span style="color: #0000ff;"><</span><span style="color: #800000;">b</span><span style="color: #0000ff;">></span><span style="color: #000000;">!<br /> <br />  <br /> <br /> 咋看hQ这没什么问题。但是,注意到b元素的后面一个关闭标{斜杠~失了。这个错误很Ҏ发生Q而且q可能会使得面中后面的所有文本都是粗体?br /> <br /> 不幸的是Q要避免q类错误是很困难的。最好还是试囄保输入的数据都是正确有效的HTML。还有个选择是通过XML 解析器来处理输出。它会检诸如标C匚w之类的问题。你q可以通过一些能够试囄正问题的解析器来完成Q比如Jtidy。最后,如果数据是来自于非受控的来源Q你可以选择完全不允许HTML。如果你q想使用一些文本装饰功能的话,q可以考虑使用WikiText 或者UBB Code之类的格式表C来替代?br /> 相关动作<br /> <br /> JTidy 提供了一个命令行接口和Java API 来解析和整理HTML。关于JTidy 的细节请讉Khttp://jtidy.sourceforge.net?br /> <br /> UBBCode 是PHP本n支持的一U标记格式。也可以在Java中处理UBBCode。一个解析UBBCode 的PHP函数Q有人在Java中重写了Q地址可见Qhttp://www.firegemsoftware.com/other/tutorials/ubb.php.</span></div> <br /> <img src ="http://www.aygfsteel.com/wx886104/aggbug/224457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wx886104/" target="_blank">勒紧皮带向前?/a> 2008-08-26 13:03 <a href="http://www.aygfsteel.com/wx886104/archive/2008/08/26/224457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">²</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">书</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">峣</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">ǰ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">첼</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">֣</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ρɽ</a>| <a href="http://" target="_blank">綫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">º</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">׿</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ӽ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ǹ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӫ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>