??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲天堂一区二区,亚洲视频精品在线,国产v亚洲v天堂无码网站http://m.tkk7.com/jimphei/archive/2009/11/23/303302.htmljimpheijimpheiMon, 23 Nov 2009 02:53:00 GMThttp://m.tkk7.com/jimphei/archive/2009/11/23/303302.htmlhttp://m.tkk7.com/jimphei/comments/303302.htmlhttp://m.tkk7.com/jimphei/archive/2009/11/23/303302.html#Feedback0http://m.tkk7.com/jimphei/comments/commentRss/303302.htmlhttp://m.tkk7.com/jimphei/services/trackbacks/303302.html引用自:http://blog.csdn.net/axzywan/archive/2008/07/12/2643921.aspx

取Session中的?/p>

<c:out value="${sessionScope.user.userId}"></c:out><br>  

<c:out value="${user.userLoginName}"></c:out><br>    

<s:property value="#session.user.userId"/><br>  

${session.user.userId}<br> 

${sessionScope.user.userId}<br>

OGNL

OGNL 是Object Graph Navigation Language 的简Uͼ详细相关的信息可以参考:http://www.ognl.org 。这里我们只涉及Struts2 框架中对OGNL 的基本支持?

 

OGNL 是一个对象,属性的查询语言。在OGNL 中有一个类型ؓMap 的Context Q称Z下文Q,在这个上下文中有一个根元素Qroot Q,Ҏ元素的属性的讉K可以直接使用属性名字,但是对于其他非根元素属性的讉K必须加上ҎW号# ?

 

在Struts2 中上下文为ActionContext Q根元素位Value Stack Q值堆栈,值堆栈代表了一族对象而不是一个对象,其中Action cȝ实例也属于值堆栈的一个)。ActionContext 中的内容如下图:

              |

              |--application

              |

              |--session

context map---|

               |--value stack(root)

              |

              |--request

              |

              |--parameters

              |

              |--attr (searches page, request, session, then application scopes)

              |

因ؓAction 实例被放在Value Stack 中,而Value Stack 又是根元素(root Q中的一个,所以对Action 中的属性的讉K可以不用标? Q而对其他的访问都必须使用# 标记?

 

引用Action 的属?

<s:property value="postalCode"/>

ActionContext 中的其他非根Qroot Q元素的属性可以按照如下的方式讉KQ?

<s:property value="#session.mySessionPropKey"/> or

<s:property value="#session["mySessionPropKey"]"/> or

<s:property value="#request["mySessionPropKey"]/>

 

Action cd以用ActionContext 中的静态方法来讉KActionContext ?

ActionContext.getContext().getSession().put("mySessionPropKey", mySessionObject);

 

OGNL 与Collection QLists QMaps QSets Q?

 

生成List 的语法ؓ: {e1,e2,e3}.

<s:select label="label" name="name"

list="{'name1','name2','name3'}" value="%{'name2'}" />

上面的代码生成了一个HTML Select 对象Q可选的内容为: name1 Qname2 Qname3 Q默认gؓQname2 ?

 

生成Map 的语法ؓQ?{key1:value1,key2:value2}.

<s:select label="label" name="name"

list="#{'foo':'foovalue', 'bar':'barvalue'}" />

上面的代码生成了一个HTML Select 对象,foo 名字表示的内容ؓQfoovalue Qbar 名字表示的内容ؓQbarvalue ?

 

判断一个对象是否在List 内存在:

<s:if test="'foo' in {'foo','bar'}">

   muhahaha

</s:if>

<s:else>

   boo

</s:else>

 

<s:if test="'foo' not in {'foo','bar'}">

   muhahaha

</s:if>

<s:else>

   boo

</s:else>

 

取得一个List 的一部分Q?

?   –   所有满选择逻辑的对?

^   -    W一个满选择逻辑的对?

$   -    最后一个满选择逻辑的对?

例如Q?

person.relatives.{? #this.gender == 'male'}

上述代码取得q个人(person Q所有的h(this.gender==male Q的亲戚(relatives)

 

 

Lambda 表达?

 

OGNL 支持单的Lambda 表达式语法,使用q些语法可以建立单的lambda 函数?

 

例如Q?

Fibonacci:

if n==0 return 0;

elseif n==1 return 1;

else return fib(n-2)+fib(n-1);

fib(0) = 0

fib(1) = 1

fib(11) = 89

 

OGNL 的Lambda 表达式如何工作呢Q?

Lambda 表达式必L在方括号内部Q?this 表示表达式的参数。例如:

<s:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" />

 

#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)] 定义了一个Lambda 表达式,

#fib(11) 调用了这个表辑ּ?

 

所以上qC码的输出为:89

 

在JSP2.1 ? 被用作了JSP EL Q表辑ּ语言Q的Ҏ记好Q所以对OGNL 的用可能导致问题,

一个简单的Ҏ是禁用JSP2.1 的EL Ҏ,q需要修改web.xml 文gQ?

<jsp-config>

    <jsp-property-group>

      <url-pattern>*.jsp</url-pattern>

      <el-ignored>true</el-ignored>

    </jsp-property-group>

</jsp-config>

关于EL表达式语a的简单ȝ
 

基本语法

一、EL?br />   1.语法l构
    ${expression}
  2.[]?q算W?br />     EL 提供.和[]两种q算W来存取数据?br />     当要存取的属性名UC包含一些特D字W,??{ƈ非字母或数字的符P׃定要使用 []。例如:
        ${user.My-Name}应当改ؓ${user["My-Name"] }
    如果要动态取值时Q就可以用[]来做Q?无法做到动态取倹{例如:
        ${sessionScope.user[data]}中data 是一个变?br />   3.变量
    EL存取变量数据的方法很单,例如Q?{username}。它的意思是取出某一范围中名UCؓusername的变量?br />     因ؓ我们q没有指定哪一个范围的usernameQ所以它会依序从Page、Request、Session、Application范围查找?br />     假如途中扑ֈusernameQ就直接回传Q不再l找下去Q但是假如全部的范围都没有找到时Q就回传null?br />     属性范围在EL中的名称
        Page         PageScope
        Request         RequestScope
        Session         SessionScope
        Application     ApplicationScope
       
二、EL隐含对象
  1.与范围有关的隐含对象
  与范围有关的EL 隐含对象包含以下四个QpageScope、requestScope、sessionScope 和applicationScopeQ?br />   它们基本上就和JSP的pageContext、request、session和application一P
  在EL中,q四个隐含对象只能用来取得范围属性|即getAttribute(String name)Q却不能取得其他相关信息?br />  
  例如Q我们要取得session中储存一个属性username的|可以利用下列ҎQ?br />     session.getAttribute("username") 取得username的|
  在EL中则使用下列Ҏ
    ${sessionScope.username}

  2.与输入有关的隐含对象
  与输入有关的隐含对象有两个:param和paramValuesQ它们是EL中比较特别的隐含对象?br />  
  例如我们要取得用Lh参数Ӟ可以利用下列ҎQ?br />     request.getParameter(String name)
    request.getParameterValues(String name)
  在EL中则可以使用param和paramValues两者来取得数据?br />     ${param.name}
    ${paramValues.name}

  3.其他隐含对象
 
  cookie
  JSTLq没有提供设定cookie的动作,
  例:要取得cookie中有一个设定名UCؓuserCountry的|可以使用${cookie.userCountry}来取得它?/p>

  header和headerValues
  header 储存用户览器和服务端用来沟通的数据
  例:要取得用h览器的版本,可以使用${header["User-Agent"]}?br />   另外在鲜机会下Q有可能同一标头名称拥有不同的|此时必须改ؓ使用headerValues 来取得这些倹{?/p>

  initParam
  initParam取得讑֮web站点的环境参?Context)
  例:一般的ҎString userid = (String)application.getInitParameter("userid");
    可以使用 ${initParam.userid}来取得名UCؓuserid

  pageContext
  pageContext取得其他有关用户要求或页面的详细信息?br />     ${pageContext.request.queryString}         取得h的参数字W串
    ${pageContext.request.requestURL}         取得h的URLQ但不包括请求之参数字符?br />     ${pageContext.request.contextPath}         服务的web application 的名U?br />     ${pageContext.request.method}           取得HTTP 的方?GET、POST)
    ${pageContext.request.protocol}         取得使用的协?HTTP/1.1、HTTP/1.0)
    ${pageContext.request.remoteUser}         取得用户名称
    ${pageContext.request.remoteAddr }         取得用户的IP 地址
    ${pageContext.session.new}             判断session 是否为新?br />     ${pageContext.session.id}               取得session 的ID
    ${pageContext.servletContext.serverInfo}   取得L端的服务信息

三、ELq算W?br />   1.术q算W有五个Q?????或div?或mod
  2.关系q算W有六个Q?=或eq?=或ne?lt;或lt?gt;或gt?lt;=或le?gt;=或ge
  3.逻辑q算W有三个Q?amp;&或and、||或or?或not
  4.其它q算W有三个QEmptyq算W、条件运符?)q算W?br />     例:${empty param.name}?{A?B:C}?{A*(B+C)}
 
四、EL函数(functions)?br />   语法Qns:function( arg1, arg2, arg3 …. argN)
  其中ns为前|名U?prefix)Q它必须和taglib 指o的前|名UC|?/p>

Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?/p>

补充Q?/p>

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt " %>

FOREACH:

<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
……
</c:forEach>


OUT:

<c:out value="${logininfo.username}"/>
c:out>value 中的内容输出到当前位|,q里也就是把logininfo 对象?br /> username属性D出到面当前位置?br /> ${……}是JSP2.0 中的Expression LanguageQELQ的语法。它定义了一个表辑ּQ?br /> 其中的表辑ּ可以是一个常量(如上Q,也可以是一个具体的表达语句Q如forEach循环体中
的情况)。典型案例如下:
Ø ${logininfo.username}
q表明引用logininfo 对象的username 属性。我们可以通过“.”操作W引
用对象的属性,也可以用“[]”引用对象属性,?{logininfo[username]}
?{logininfo.username}辑ֈ了同L效果?br /> “[]”引用方式的意义在于,如果属性名中出CҎ字符Q如“.”或?#8220;-”Q?br /> 此时必M?#8220;[]”获取属性g避免语法上的冲突Q系l开发时应尽量避?br /> q一现象的出玎ͼ?br /> 与之{同的JSP Script大致如下Q?br /> LoginInfo logininfo =
(LoginInfo)session.getAttribute(“logininfo”);
String username = logininfo.getUsername();
可以看到QEL大大节省了编码量?br /> q里引出的另外一个问题就是,EL 从哪里扑ֈlogininfo 对象Q对?br /> ${logininfo.username}q样的表辑ּ而言Q首先会从当前页面中L之前?br /> 否定义了变量logininfoQ如果没有找到则依次到Request、Session?br /> Application 范围内寻找,直到扑ֈ为止。如果直到最后依然没有找到匹配的
变量Q则q回null.
如果我们需要指定变量的L范围Q可以在EL表达式中指定搜寻范围Q?br /> ${pageScope.logininfo.username}
${requestScope.logininfo.username}
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
在Spring 中,所有逻辑处理单元q回的结果数据,都将作ؓAttribute 被放
|到HttpServletRequest 对象中返回(具体实现可参见Spring 源码?br /> org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributesҎ的实C码)Q也是说Spring
MVC 中,l果数据对象默认都是requestScope。因此,在Spring MVC 中,
以下dҎ应慎用:
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
Ø ${1Q?}
l果辑ּ计算l果Q即整数??br /> Ø ${i>1}
如果变量值i>1的话Q将q回boolcdtrue。与上例比较Q可以发现EL会自
动根据表辑ּ计算l果q回不同的数据类型?br /> 表达式的写法与java代码中的表达式编写方式大致相同?/p>

IF / CHOOSE:

<c:if test="${var.index % 2 == 0}">
*
</c:if>
判定条g一般ؓ一个EL表达式?br /> <c:if>q没有提供else子句Q用的时候可能有些不便,此时我们可以通过<c:choose>
tag来达到类似的目的Q?br /> <c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
!
</c:otherwise>
</c:choose>
cMJava 中的switch 语句Q?lt;c:choose>提供了复杂判定条件下的简化处理手法。其
?lt;c:when>子句cMcase子句Q可以出现多ơ。上面的代码Q在奇数行时输出“*”P
而偶数行时输?#8220;!”?br /> Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?/p>

再补充:

 1    EL表达式用${}表示,可用在所有的HTML和JSP标签?作用是代替JSP面中复杂的JAVA代码.

        2   EL表达式可操作帔R 变量 和隐式对? 最常用?隐式对象?{param}?{paramValues}. ${param}表示q回h参数中单个字W串的? ${paramValues}表示q回h参数的一l?pageScope表示面范围的变?requestScope表示h对象的变? sessionScope表示会话范围内的变量.applicationScope表示应用范围的变?

        3   <%@  page isELIgnored="true"%> 表示是否用EL语言,TRUE表示止.FALSE表示不禁?JSP2.0中默认的启用EL语言.

        4   EL语言可显C?逻辑表达式如${true and false}l果是false    关系表达式如${5>6} l果是false     术表达式如 ${5+5} l果?0

        5   EL中的变量搜烦范围?page request session application   点运符(.)?[ ]"都是表示获取变量的?区别是[ ]可以昄非词cȝ变量


本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/stonec/archive/2009/10/09/4647394.aspx



jimphei 2009-11-23 10:53 发表评论
]]>
关于sitemeshhttp://m.tkk7.com/jimphei/archive/2009/11/22/303192.htmljimpheijimpheiSun, 22 Nov 2009 01:55:00 GMThttp://m.tkk7.com/jimphei/archive/2009/11/22/303192.htmlhttp://m.tkk7.com/jimphei/comments/303192.htmlhttp://m.tkk7.com/jimphei/archive/2009/11/22/303192.html#Feedback0http://m.tkk7.com/jimphei/comments/commentRss/303192.htmlhttp://m.tkk7.com/jimphei/services/trackbacks/303192.html  sitemesh应用Decorator模式Q用filter截取request和response,把页面组件head,content,bannerl合Z个完整的视图。通常我们都是用include标签在每个jsp面中来不断的包含各Uheader, stylesheet, scripts and footerQ现在,在sitemesh的帮助下Q我们可以开心的删掉他们了。如下图Q你惌杄辑ֈ复合视图模式Q那末看完本文吧?/font>

一、在WEB-INF/web.xml中copy以下filter的定?

<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<filter>
  <filter-name>sitemesh</filter-name>
     <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
  </filter>

  <filter-mapping>
     <filter-name>sitemesh</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

二、copy所需sitemesh-2.3.jar到WEB-INF\lib下?/span>Q这里可以下?a target="_blank">http://www.opensymphony.com/sitemesh/Q?br />
三?
建立WEB-INF/decorators.xml描述各装饰器面?/font>

<decorators defaultdir="/decorators">
                               <decorator name="main" page="main.jsp">
                                   <pattern>*</pattern>
                               </decorator>
                        </decorators>

  上面配置文g指定了装饰器面所在的路径Qƈ指定了一个名为main的装饰器Q该装饰器默认装饰web应用根\径下的所有页面?br />
四?
建立装饰器页?/decorators/main.jsp

  • <%@ page contentType="text/html; charset=GBK"%>
    <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%> <html>
          <head>
              <title><decorator:title default="装饰器页?.." /></title>
              <decorator:head />
          </head>
         <body>
            sitemesh的例?lt;hr>
            <decorator:body />
            <hr>chen56@msn.com
        </body>
    </html>
     

    五?font size="2">建立一个的被装饰页?/index.jsp(内容面)

  • <%@ page contentType="text/html; charset=GBK"%>
                            <html>
                                 <head>
                                   <title>Agent Test</title>
                                 </head>
                                 <body>
                                   <p>本页只有一句,是本句.</p>
                                 </body>
                            </html>

      最后访问index.jspQ将生成如下面Q?/font>

          而且Q所有的面也会如同index.jsp一P被sitemesh的filter使用装饰模式修改成如上图般模P却不用再使用include标签?/font>



    1. 装饰?nbsp;    decorator概念
          Z建立可复用的web应用E序,一个通用的方法是建立一个分层系l,如同下面一个普通的web应用Q?/font>
      • 前端:JSP和ServletsQ或jakarta的velocity 。。?
      • 控制层框?Controller Q?(Struts/Webwork)
      • 业务逻辑 Business Q主要业务逻辑
      • 持久化框?Qhibernate/jdo

          可糟p的是前端的面逻辑很难被复用,当你在每一个页面中用数之不的include来复用公qheader, stylesheet, scriptsQfooterӞ一个问题出C-重复的代码,每个面必须用copy来复用页面结构,而当你需要创意性的改变面l构ӞNq上了你?/font>

           sitemesh通过filter截取request和responseQƈl原始的面加入一定的装饰(可能为header,footer...)Q然后把l果q回l客LQƈ且被装饰的原始页面ƈ不知道sitemesh的装饎ͼq也pCp的目的?/font>

           据说卛_新出台的Portlet规范会帮助我们标准的实现比这些更多更cool的想法,但可怜的我还不懂它到底是一个什末东东,有兴的人可以研I?br /> jetspeedQ或JSR (Java Specification Request) 168,但我想sitemesh如此单,我们不妨先用着?/font>

       

      让我们看看怎样配置环境
          除了要copy到WEB-INF/lib中的sitemesh.jar外,q有2个文件要建立到WEB-INF/Q?/font>
      • sitemesh.xml (可?  
      • decorators.xml

      sitemesh.xml 可以讄2U信?

      Page Parsers Q负责读取stream的数据到一个Page对象中以被SiteMesh解析和操作?不太常用Q默认即?

      Decorator Mappers : 不同的装饰器U类Q我发现2U比较有用都列在下面。一U通用的mapper,可以指定装饰器的配置文g名,另一U可打印的装饰器Q可以允怽当用http://localhost/aaa/a.html?printable=true方式讉K时给出原始页面以供打?免得把header,footer{的花哨的图片也搭上)

      (但一般不用徏立它Q默认设|够了Qcom/opensymphony/module/sitemesh/factory/sitemesh-default.xmlQ:

      范例Q?/strong>

      <sitemesh>
           <page-parsers>
             <parser default="true" class="com.opensymphony.module.sitemesh.parser.DefaultPageParser" />
             <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
             <parser content-type="text/html;charset=ISO-8859-1" class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
           </page-parsers>

           <decorator-mappers>
             <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
               <param name="config" value="/WEB-INF/decorators.xml" />
             </mapper>
               <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
                  <param name="decorator" value="printable" />
                  <param name="parameter.name" value="printable" />
                          <param name="parameter.value" value="true" />
               </mapper>
      </decorator-mappers>
      </sitemesh>

      decorators.xml Q定义构成复合视囄所有页面构件的描述(主要l构面Qheader,footer...)Q如下例Q?/font>

      <decorators defaultdir="/decorators">
           <decorator name="main" page="main.jsp">
             <pattern>*</pattern>
           </decorator>
           <decorator name="printable" page="printable.jsp" role="customer" webapp="aaa" />
      </decorators>
      • defaultdir: 包含装饰器页面的目录
      • page : 面文g?/font>
      • name : 别名
      • role : 角色Q用于安?/font>
      • webapp : 可以另外指定此文件存攄?/font>
      • Patterns : 匚w的\径,可以?,那些被访问的面需要被装饰?/font>

       

      最重要的是写出装饰器本w?也就是那些要复用面Q和l构面)?/font>
          其实Q重要的工作是制作装饰器页面本w?也就是包含结构和规则的页?Q然后把他们描述到decorators.xml中?/font>

          让我们来先看一看最单的用法Q其实最常用也最单的用法是我们的hello例子Q面对如此众多的技术,我想只要辑ֈ功能点到为止卛_Q没必要ȝI太?除非您有更深的需??/font>

      <%@ page contentType="text/html; charset=GBK"%>
                                  <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
                                  <html>
                                       <head>
                                         <title><decorator:title default="装饰器页?.." /></title>
                                         <decorator:head />
                                       </head>
                                       <body>
                                         sitemesh的例?lt;hr>
                                         <decorator:body />
                                         <hr>chen56@msn.com
                                       </body>
                                  </html>
                                  

      我们在装饰器面只用?个标{:

      <decorator:title default="装饰器页?.." />       Q?把请求的原始面的title内容插入?lt;title></title>中间?/font>

      <decorator:body /> Q?把请求的原始面的body内的全部内容插入到相应位|?/font>

      然后我们在decorator.xml中加入以下描q即可:

      <decorator name="main" page="main.jsp">
             <pattern>*</pattern>
      </decorator>

      q样Q请求的所有页面都会被重新处理Qƈ按照main.jsp的格式重新展现在你面前?/font>

       

      让我们看看更多的用法?抄袭sitemesh文档)
      以下列着全部标签Q?/font>
      Decorator Tags Page Tags
      被用于徏立装饰器面. 被用于从原始内容面讉K装饰?
      <decorator:head />
      <decorator:body />
      <decorator:title />
      <decorator:getProperty />
      <decorator:usePage />
      <page:applyDecorator />
      <page:param
       

      <decorator:head />

      插入原始面(被包装页?的head标签中的内容(不包括head标签本n)?/font>

      <decorator:body />

      插入原始面(被包装页?的body标签中的内容?/font>

      <decorator:title [ default="..." ] />

      插入原始面(被包装页?的title标签中的内容Q还可以d一个缺省倹{?/font>

      例:

      /decorator/main.jsp?Q装饰器面Q? <title><decorator:title default="却省title-hello"     /> - 附加标题</title>

      /aaa.jsp?(原始面)Q?lt;title>aaa面</title>

      讉K/aaa.jsp的结果:<title>aaa面 - 附加标题</title>

      <decorator:getProperty property="..." [ default="..." ] [ writeEntireProperty="..." ]/>

      在标{֤插入原始面(被包装页?的原有的标签的属?/font>中的内容Q还可以d一个缺省倹{?/font>

      sitemesh文档中的例子很好理解Q?/font>
      The decorator:
      The undecorated page:
      The decorated page: <body bgcolor="white" onload="document.someform.somefield.focus();">

      注意Q?/strong>writeEntireProperty="true"会在插入内容前加入一个空根{?/font>

      <decorator:usePage id="..." />
      象jsp面中的<jsp:useBean>标签一P可以使用被包装ؓ一个Page对象的页面?(懒的?

      例:可用<decorator:usePage id="page" /> Q?/strong><%=<page:applyDecorator name="..." [ page="..." title="..." ] >
      <page:param name="..."> ... </page:param>
      <page:param name="..."> ... </page:param>
      </page:applyDecorator>

      应用包装器到指定的页面上Q一般用于被包装面中主动应用包装器。这个标{有点不好理解,我们来看一个例子:

      包装器页?/decorators/panel.jspQ?lt;p><decorator:title /></p>     ... <p><decorator:body /></p>
           q且在decorators.xml中有<decorator name="panel" page="panel.jsp"/>

      一个公共页面,卛_被panel包装Q?public/date.jsp:  
           ... <%=new java.util.Date()%>     ...<decorator:getProperty property="myEmail" />

      被包装页?/page.jsp Q?
           <title>page的应?lt;/title>
           .....  

           <page:applyDecorator name="panel" page="/_public/date.jsp" >
             <page:param name="myEmail"> chen_p@neusoft.com </page:param>
           </page:applyDecorator>

      最后会是什末结果呢Q除?page.jsp会被默认的包装页面包装上header,footer外,page.jsp面中还内嵌了date.jsp面Qƈ且此date.jsp面q会被panel.jsp包装Z个title加body的有2D늚面Q第1D|date.jsp的titleQ第2D|date.jsp的body内容?/font>

      另外Q?a name="page:applyDecorator">page:applyDecorator中包含的page:param标签所声明的属性D可以在包装页面中?/font>decorator:getProperty标签讉K到?


      可打印的界面装饰
           前面说过?U可打印的装饰器Q可以允怽当用http://localhost/aaa/a.html?printable=true方式讉KӞ应用其他的装饰器(自己指定)Q给出原始页面以供打?免得把header,footer{的花哨的图片也搭上)?/font>

      让我们来看一看怎样实现他:

      1.首先在WEB-INFO/sitemesh.xml中设|:
           <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
             <param name="decorator" value="printable" />
             <param name="parameter.name" value="printable" />
             <param name="parameter.value" value="true" />
           </mapper>
      q样可以通过?printable=true来用名为printable的装饰器Q而不是用原来的装饰器?/font>

      2.在WEB-INFO/decorators.xml中定义相应的printable装饰?br />      <decorator name="printable" page="printable.jsp"/>

      3.最后编写printable装饰?decorators/printable.jsp

      <%@ taglib uri="sitemesh-decorator" prefix="decorator" %>
      <html>
      <head>
           <title><decorator:title /></title>
           <decorator:head />
      </head>
      <body>

           <h1><decorator:title /></h1>
           <p align="right"><i>(printable version)</i></p>

           <decorator:body />

      </body>
      </html>

      q样可以让一个原始页面通过?printable=true开x切换不同的装饰器面?/font>

       

      中文问题
      ׃sitemesh内部所使用的缺省字W集为iso-8859-1Q直接用会产生qQ我们可以通过以下ҎU正之:
      • Ҏ1Q可以在您所用的application server的配|文件中找一找,有没有设|encoding?code>charset的项目,然后设成gbk或gb2312卛_
      • Ҏ2Q这也是我们一直用的Ҏ?br /> 1.在每一个jsp里讄: <%@ page contentType="text/html; charset=gbk"%> 来告诉server你所要求的字W集?br /> 2.在每个jsp늚head中定义:<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=gbk"> 来告诉浏览器你所用的字符集?/font>
      ȝQ用sitemesh最通常的途径Q?/font>

      1.配置好环境,

      2.在WEB-INFO/decroators.xml中描qC徏立的包装器?/font>

      3.开发在decroators.xml中描q的包装器,最好存攑֜/_decorators目录?/font>

      4.ok Q可以看看辛勤的成果?:)



      jimphei 2009-11-22 09:55 发表评论
      ]]>
      velocity的默认加载\径修?/title><link>http://m.tkk7.com/jimphei/archive/2009/11/10/301837.html</link><dc:creator>jimphei</dc:creator><author>jimphei</author><pubDate>Tue, 10 Nov 2009 07:15:00 GMT</pubDate><guid>http://m.tkk7.com/jimphei/archive/2009/11/10/301837.html</guid><wfw:comment>http://m.tkk7.com/jimphei/comments/301837.html</wfw:comment><comments>http://m.tkk7.com/jimphei/archive/2009/11/10/301837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/jimphei/comments/commentRss/301837.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/jimphei/services/trackbacks/301837.html</trackback:ping><description><![CDATA[<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"><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.yaday.test;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.io.StringWriter;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Properties;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.velocity.Template;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.velocity.VelocityContext;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.velocity.app.Velocity;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.velocity.app.VelocityEngine;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.junit.Test;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img id="Codehighlighter1_303_996_Open_Image" onclick="this.style.display='none'; Codehighlighter1_303_996_Open_Text.style.display='none'; Codehighlighter1_303_996_Closed_Image.style.display='inline'; Codehighlighter1_303_996_Closed_Text.style.display='inline';" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_303_996_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_303_996_Closed_Text.style.display='none'; Codehighlighter1_303_996_Open_Image.style.display='inline'; Codehighlighter1_303_996_Open_Text.style.display='inline';" src="http://m.tkk7.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"> VelocityTest </span><span id="Codehighlighter1_303_996_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://m.tkk7.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_303_996_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_338_994_Open_Image" onclick="this.style.display='none'; Codehighlighter1_338_994_Open_Text.style.display='none'; Codehighlighter1_338_994_Closed_Image.style.display='inline'; Codehighlighter1_338_994_Closed_Text.style.display='inline';" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_338_994_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_338_994_Closed_Text.style.display='none'; Codehighlighter1_338_994_Open_Image.style.display='inline'; Codehighlighter1_338_994_Open_Text.style.display='inline';" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />    @Test </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> testVelocity()</span><span id="Codehighlighter1_338_994_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://m.tkk7.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_338_994_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_346_903_Open_Image" onclick="this.style.display='none'; Codehighlighter1_346_903_Open_Text.style.display='none'; Codehighlighter1_346_903_Closed_Image.style.display='inline'; Codehighlighter1_346_903_Closed_Text.style.display='inline';" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_346_903_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_346_903_Closed_Text.style.display='none'; Codehighlighter1_346_903_Open_Image.style.display='inline'; Codehighlighter1_346_903_Open_Text.style.display='inline';" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_346_903_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://m.tkk7.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_346_903_Open_Text"><span style="color: #000000">{<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            VelocityEngine ve </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> VelocityEngine();<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            ve.setProperty(</span><span style="color: #000000">"</span><span style="color: #000000">resource.loader</span><span style="color: #000000">"</span><span style="color: #000000"> , </span><span style="color: #000000">"</span><span style="color: #000000">class</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            ve.setProperty(</span><span style="color: #000000">"</span><span style="color: #000000">class.resource.loader.class</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            ve.init();<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            Template template</span><span style="color: #000000">=</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            template</span><span style="color: #000000">=</span><span style="color: #000000">ve.getTemplate(</span><span style="color: #000000">"</span><span style="color: #000000">velocity/first.vm</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            VelocityContext context</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000"> VelocityContext();<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            context.put(</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">new</span><span style="color: #000000"> String(</span><span style="color: #000000">"</span><span style="color: #000000">jimphei</span><span style="color: #000000">"</span><span style="color: #000000">));<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            <br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />        <br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            <br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            StringWriter sw</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000"> StringWriter();<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            template.merge(context, sw);<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            System.out.println(sw.toString());<br /> <img id="Codehighlighter1_925_991_Open_Image" onclick="this.style.display='none'; Codehighlighter1_925_991_Open_Text.style.display='none'; Codehighlighter1_925_991_Closed_Image.style.display='inline'; Codehighlighter1_925_991_Closed_Text.style.display='inline';" src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_925_991_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_925_991_Closed_Text.style.display='none'; Codehighlighter1_925_991_Open_Image.style.display='inline'; Codehighlighter1_925_991_Open_Text.style.display='inline';" src="http://m.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (Exception e) </span><span id="Codehighlighter1_925_991_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://m.tkk7.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_925_991_Open_Text"><span style="color: #000000">{<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" />            </span><span style="color: #008000">//</span><span style="color: #008000"> TODO Auto-generated catch block</span><span style="color: #008000"><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="color: #000000">            e.printStackTrace();<br /> <img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />        }</span></span><span style="color: #000000"><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />    }</span></span><span style="color: #000000"><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="color: #000000"><br /> <img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <img src ="http://m.tkk7.com/jimphei/aggbug/301837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/jimphei/" target="_blank">jimphei</a> 2009-11-10 15:15 <a href="http://m.tkk7.com/jimphei/archive/2009/11/10/301837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装Apache+PHP在Windows+IIS?/title><link>http://m.tkk7.com/jimphei/archive/2009/11/04/301016.html</link><dc:creator>jimphei</dc:creator><author>jimphei</author><pubDate>Wed, 04 Nov 2009 02:24:00 GMT</pubDate><guid>http://m.tkk7.com/jimphei/archive/2009/11/04/301016.html</guid><wfw:comment>http://m.tkk7.com/jimphei/comments/301016.html</wfw:comment><comments>http://m.tkk7.com/jimphei/archive/2009/11/04/301016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/jimphei/comments/commentRss/301016.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/jimphei/services/trackbacks/301016.html</trackback:ping><description><![CDATA[<p>Linux+Apache+PHP+MySQL是一个低成本效率高而又E_的WEB ServerQ但是我们绝大部分开发都是在Windows环境下完成开发,然后UL到Linux或者Unix下。现在依据个Z验来说明一下Windows XPQIIS下安装Apache2QPHP 5。没有IIS安装更加简单,除去IIS相关步骤可以了?/p> <h3>一、关闭IISQ如果不关闭IIS安装Apache会出错?a title="apache整合tomcat配置" href="/Files/jimphei/apachetomcat.rar">apache整合tomcat配置</a></h3> <p>关闭IIS有两U方法,L一U都可以Q?/p> <ol> <li>控制面板Q-性能和维护-Q管理工PQ服务中Q关闭IIS Admin服务?br /> <img alt="控制面板Q-性能和维护-Q管理工PQ服务中Q关闭IIS Admin服务" src="http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-1.gif" /> <li>在开始-Q运行中直接输入如下代码Q或者先输入cmdQ在弹出的窗口中输入也行<code>net stop iisadmin</code>上述命o关闭了iis相关的所有服务器Q比如web sites 、smtp{?code>net stop iisadmin /y<span>避免输入上面那个命o后需要在输入y</span></code>如果用net stop w3svc只是关闭一个站?w服务器,但是如果是多个web站点׃行?</li> </ol> <p>如果开启IIS可以在控刉板中扑ֈinteret信息服务打开|站服务的方法,也可以用命名Qnet start w3svc都可以。注意如果直接在服务中打开IIS Admin服务或者运动net start iisadminQ是可以打开IIS Admin服务Q但?w服务没有打开Q所以依旧需要用上面的方法打开3w服务Q因为在打开IIS Admin服务没有打开3w服务Q但是打开3w服务肯定打开了IIS Admin服务?/p> <h3>二、安装Apache2?/h3> <p>psQApache 2不能在Windows 95上运行;在Windows 98上勉够运行,但不能作为服务用。从4.3版本开始,PHP也不再支持Windows 95。所以,你的Windows操作pȝ必须是Windows NT?000或者XP?/p> <ol> <li>Apache可以?a >http://www.apache.org/dyn/closer.cgi/httpd/binaries/win32/</a>下蝲 <li>对于本机开发Network DomainQServerName都填入localhost可以了Q填入email地址卛_?br /> <img alt="安装apache旉要填入的信息" src="http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-2.gif" /> <li>上图中的单项选择Q对于初学者来_不管Apache的服务是否?0单口Q徏议都选第一个,q样q接把Apache注册为系l服务,E_方便。然后下一步选择Typical? <li>安装路径一般会默认为c:\Programme Files\Apache GroupҎc:\web或者其他符?.3格式的名Uͼq样以来以后每次输入Apache安装路径不用加引Pq且Apache安装时会自动生成Apache2文g夹,所以文件会安装到c:\web\apache2Q这样以后也可以把PHPQMySQL都安装到web下便于几U管理? <li>׃ApacheQIIS都默认WEB服务端口?0Q所以其中一个必M改其端口Q一般改?080<br /> 修改IIS端口直接在IIS理工具中就可以了。可以在控制面板中找Q或者在q行中输入inetmgr<br /> 修改Apache端口Q通过开始-所有程序-ApacheQConfigure Apache Server打开httpd.conf文gQ? <pre><code><span>扑ֈ</span> #Listen 12.34.56.78:80 <span>#是注释符?/span> Listen 80 <span>Ҏ</span> Listen 8080 <span>然后扑ֈ</span> ServerName localhost:80 <span>Ҏ</span> ServerName localhost:8080 <span>卛_</span></code></pre> <li>在浏览器中输入localhostQ如果修改了端口p入localhost:8080能够看到apache面Q就说明安装成功了?</li> </ol> <p>ps[2005.9.29].利用apache的proxy模块实现隐藏iis的端?/p> <ol> <li>按照上面的方法,apache使用默认端口80Q修改iis使用端口?080Q当然你也可以采用其他的合理端口? <li>修改apache的http.conf文gQ去掉下面两行代码前的注释符?Q启动代理模? <pre><code>LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so</code></pre> <li>在该文gd上如下两行代码,使输入http://localhost/iis/转向http://localhost:8080 <pre><code>ProxyPass /iis/ http://127.0.0.1:8080/ ProxyPassReverse /iis http://127.0.0.1:8080</code></pre> <p>q样可以在览器中输入localhost讉KapacheQ输入localhost/iis/讉Kiis了而隐藏了8080端口 </p> <li>另外Q可以通过讄虚拟L来访问apache或者iis <pre><code><VirtualHost *:80> ServerAdmin kavenyan@163.com DocumentRoot E:/www/dancewithnet ServerName www.dancewithnet.com ServerAlias dancewithnet.com DefaultLanguage zh-CN AddDefaultCharset UTF-8 </VirtualHost> <VirtualHost *:80> ServerAdmin kavenyan@163.com ServerName iis.dancewithnet.com DefaultLanguage zh-CN AddDefaultCharset GB2312 ProxyPass / http://127.0.0.1:8080/ <span>or http://服务器ip:8080/</span> ProxyPassReverse / http://127.0.0.1:8080/ <span>or http://服务器ip:8080/</span> </VirtualHost></code></pre> <p>q样可以用www.dancewithnet.com讉Kapache,iis.dancewithnet.com讉Kiss,而隐藏了8080端口</p> <h3>三、配|PHP环境</h3> <ol> <li>?a >www.php.net</a>上下载php5的zip安装包,其文g解压攑ֈc:\web\php5中即? <p>psQ?Apache 2可采?U方式来q行PHPE序Q通过一个CGI接口来运行(外部调用Php.exeQ,或者用PHP的DLL文g在Apache的内部运行。后一U方式的速度较快。所以,针对每个版本的PHPQ都会提?个Windows二进制发行包。较的?msi包,它会安装CGI可执行程序Php.exeQ但其中拿掉了通过Apache DLL来运行PHP脚本所需的模块。较大的.zip包则包含了所有这些东?/p> <li>最好是无论使用何种接口QCGI 或?SAPIQ都保 php5ts.dll 可用Q因此必d此文件放?Windows 路径中。最好的位置?Windows ?system 目录Q?windir%\SystemQ: <pre><code>c:\\winnt\\system32 for Windows NT/2000 或? c:\\winnt40\\system32 for Windows NT/2000 服务器版 c:\\windows\\system32 for Windows XP</code></pre> <p>psQ也有把php文g中所有的dll文g都拷?windir%\System中的Q那L配置和我介绍的方法稍微有点不同,但是我觉得那h较杂乱,׃再说明,有兴的朋友可以自己研究?/p> <li>接着实设定有效的PHP 配置文gQphp.ini。压~包中包括两?ini 文gQphp.ini-dist ?php.ini-recommended。徏议?php.ini-recommendedQ因为此文g寚w认设|作了性能和安全上的优化。将选择?ini 文g拯?PHP 能够扑ֈ的目录下q改名ؓ php.ini。PHP 默认?Windows 目录Q?WINDIR% ?%SYSTEMROOT% Q下搜烦 php.iniQ? <pre><code>c:\\winnt ?c:\\winnt40 for Windows NT/2000 服务器版 c:\windows for Windows XP </code></pre> <li>停止ApacheQ打开httpd.confq行~辑?br /> 如果是用CGI二进制文件的形式来用phpQ添入代码如下(注意代码间的I格Q: <p> </p> <pre><code>ScriptAlias /php/ "c:/web/php5/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php5/php.exe" </code></pre> <p>如果作ؓ模块Q推荐这U方式)Q添加代码如下: </p> <pre><code>LoadModule php5_module "c:/web/php5/php5apache2.dll" AddType application/x-httpd-php .php </code></pre> <li>保存httpd.confQ启动Apache </li> </ol> <h3>四、测试PHP</h3> <ol> <li>~写文gindex.php攑օC:\web\Apache2\htdocs中,代码如下Q?br /> <img alt="试PHP安装是否成功的代? src="http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-3.gif" /> <li>在浏览中输入http://localhost/index.php效果如下Q则说明安装成功Q?br /> <img alt="php安装成功出现的页? src="http://dancewithnet.com/wp-content/uploads/2007/03/apache-php-4.gif" /> </li> </ol> </li> </ol> <img src ="http://m.tkk7.com/jimphei/aggbug/301016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/jimphei/" target="_blank">jimphei</a> 2009-11-04 10:24 <a href="http://m.tkk7.com/jimphei/archive/2009/11/04/301016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Is there a server running on localhost:3306?http://m.tkk7.com/jimphei/archive/2009/11/03/300910.htmljimpheijimpheiTue, 03 Nov 2009 07:50:00 GMThttp://m.tkk7.com/jimphei/archive/2009/11/03/300910.htmlhttp://m.tkk7.com/jimphei/comments/300910.htmlhttp://m.tkk7.com/jimphei/archive/2009/11/03/300910.html#Feedback0http://m.tkk7.com/jimphei/comments/commentRss/300910.htmlhttp://m.tkk7.com/jimphei/services/trackbacks/300910.htmlq个是mysql版本不同的问?/p>

      jimphei 2009-11-03 15:50 发表评论
      ]]>
      我在W一个项目心得(家具企业|站Q?/title><link>http://m.tkk7.com/jimphei/archive/2009/11/03/300827.html</link><dc:creator>jimphei</dc:creator><author>jimphei</author><pubDate>Tue, 03 Nov 2009 01:35:00 GMT</pubDate><guid>http://m.tkk7.com/jimphei/archive/2009/11/03/300827.html</guid><wfw:comment>http://m.tkk7.com/jimphei/comments/300827.html</wfw:comment><comments>http://m.tkk7.com/jimphei/archive/2009/11/03/300827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/jimphei/comments/commentRss/300827.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/jimphei/services/trackbacks/300827.html</trackback:ping><description><![CDATA[1、后台ajax在应用(特别是提交中文时要用encodeURI(encodeURI(typename))提交Q然后后台用URLDecoder.decode(strtypename, "utf-8")取倹{?br /> 2、java-fckeditor在应用与配置?br /> 3、jquery的应用?br /> 4、二U目录与多目录的学习?br /> 5、验证码生成技术?br /> <img src ="http://m.tkk7.com/jimphei/aggbug/300827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/jimphei/" target="_blank">jimphei</a> 2009-11-03 09:35 <a href="http://m.tkk7.com/jimphei/archive/2009/11/03/300827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2+JQuery+JSON集成http://m.tkk7.com/jimphei/archive/2009/09/30/296999.htmljimpheijimpheiWed, 30 Sep 2009 04:52:00 GMThttp://m.tkk7.com/jimphei/archive/2009/09/30/296999.htmlhttp://m.tkk7.com/jimphei/comments/296999.htmlhttp://m.tkk7.com/jimphei/archive/2009/09/30/296999.html#Feedback0http://m.tkk7.com/jimphei/comments/commentRss/296999.htmlhttp://m.tkk7.com/jimphei/services/trackbacks/296999.htmlStruts2+JQuery+JSON集成


      l节部分我就不多讲了Q因为我也不会,p讲我是如何调试出来我的第一个JSON使用的吧

      采用的框架有QStruts2 ?JQuery ?JSON


      按着步骤来吧Q?/p>


       1.新徏一个Web工程


      导入包列表:

       


       目录l构如图Q?/p>

       


       2.建立实体cUser

      package model;


      public class User


      private String name;

      private int age;

       //省略相应的get和setҎ
       


       3.建立Action JsonAction

      public class JsonAction extends ActionSupport{

      private static final long serialVersionUID =

       7044325217725864312L;


      private User user;

      //用于记录q回l果

      private String result;


      //省略相应的get和setҎ


      @SuppressWarnings("static-access")


      public String execute() throws Exception {


      //要q回的user实体对象q行json处理

      JSONObject jo = JSONObject.fromObject(this.user);

      //打印一下,格式如下

      //{"name":"风达","age":23}

      System.out.println(jo);


      //调用json对象的toStringҎ转换为字W串然后赋值给result

      this.result = jo.toString();


      return this.SUCCESS;

      }


      }
       


       4.建立struts.xml文g

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE struts PUBLIC

          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

          "http://struts.apache.org/dtds/struts-2.0.dtd">


      <struts>

      <constant name="struts.i18n.encoding" value="UTF-8"></constant>

      <package name="ttttt" extends="json-default">

      <action name="jsonAction" class="action.JsonAction">

      <result type="json" >

      <!-- 因ؓ要将reslut的D回给客户端,所以这栯|?-->

      <!-- root的值对应要q回的值的属?-->

      <param name="root">

      result

      </param>

      </result>

      </action>

      </package>

      </struts>

       


       5.~写index.jsp文g

      <%@ page language="java" pageEncoding="UTF-8"%>

      <%@ taglib prefix="s" uri="/struts-tags"%>

      <%

      String path = request.getContextPath();

      String basePath = request.getScheme() + "://"

      + request.getServerName() + ":" + request.getServerPort()

      + path + "/";

      %>


      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

      <html>

      <head>

      <base href="<%=basePath%>">


      <title>My JSP 'index.jsp' starting page</title>

      <meta http-equiv="pragma" content="no-cache">

      <meta http-equiv="cache-control" content="no-cache">

      <meta http-equiv="expires" content="0">

      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

      <meta http-equiv="description" content="This is my page">


      <!-- basePath用来获取js文g的绝对\?-->

      <script type="text/javascript" src="<%=basePath%>js/jquery.js"></script>

      <script type="text/javascript" src="<%=basePath%>js/index.js"></script>

      <s:head theme="ajax" />

      </head>


      <body>

      <div id="result">

      </div>

      <s:form name="userForm" action="" method="post">

      <s:textfield label="用户? name="user.name" />

      <s:textfield label="q龄" name="user.age" />

      <button>

      提交

      </button>

      </s:form>


      </body>

      </html>

       


       6.在WebRoot目录下徏立js文gӞjquery.js文g攑ֈ文g夹下Q然后再建立文gindex.js


      $(document).ready(function() {


      // 直接把onclick事g写在了JS?/p>

      $("button").click(function() {

      // 序列化表单的?/p>

      var params = $("input").serialize();


      $.ajax({


      // 后台处理E序

      url : "jsonAction.action",


      // 数据发送方?/p>

      type : "post",


      // 接受数据格式

      dataType : "json",


      // 要传递的数据

      data : params,


      // 回传函数

      success : update_page


      });

      });


      });

      function update_page(result) {

      var json = eval( "("+result+")" );

      var str = "姓名:" + json.name + "<br />"; str += "q龄:"

      + json.age + "<br />";

      $("#result").html(str);


      }
       


       7.q行前效?

       

      要的是效果,布局׃整了

       


      q行后效果:

       

       


      |上相关的信息太了Q很多Struts2+JQuery+JSON的教E,点开链接之后都是那几文章{了又转,遇到问题真的很想扑ֈ有用的信息,或许是我太笨了,找不刎ͼ或许是|上相关的信息就很少。这个实例很单是不是Q但是ؓ了调试出q个E序Q我费了一天的旉?/p>


      上面的实例成功了Q但是问题又出来?/p>

      视图cd仅仅讄了json

      那么输入校验出错的时候怎么昄Q?/p>


      本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/fengda2870/archive/2009/04/06/4052527.aspx



      jimphei 2009-09-30 12:52 发表评论
      ]]>
      struts的分?/title><link>http://m.tkk7.com/jimphei/archive/2009/09/22/296002.html</link><dc:creator>jimphei</dc:creator><author>jimphei</author><pubDate>Tue, 22 Sep 2009 04:03:00 GMT</pubDate><guid>http://m.tkk7.com/jimphei/archive/2009/09/22/296002.html</guid><wfw:comment>http://m.tkk7.com/jimphei/comments/296002.html</wfw:comment><comments>http://m.tkk7.com/jimphei/archive/2009/09/22/296002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/jimphei/comments/commentRss/296002.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/jimphei/services/trackbacks/296002.html</trackback:ping><description><![CDATA[<div class="6611161" id="related_topics" style="position: relative" _madepositioned="true">相关文章: <span id="1161116" class="close"><a title="关闭" onclick="$('related_topics').hide();return false;" > </a></span> <ul> <li><a title="一U传递分参数的Ҏ" target="_blank">一U传递分参数的Ҏ</a> <li><a title="show下我的分늱" target="_blank">show下我的分늱</a> <li><a title="Ibatis动态查询例?#?以及iterate{的用法)" target="_blank">Ibatis动态查询例?#?以及iterate{的用法)</a> </li> </ul> <br /> <span>推荐圈子: <a target="_blank">GT-Grid</a></span> <br /> <a target="_blank">更多相关推荐</a> </div> <script type="text/javascript"> new Draggable("related_topics"); </script>今天看到某h写的分页c,l果发现批h家的Z,没有必要Q好的东西吸收学习,感觉不实用可以不用,何必发帖子挖苦h家。我前段旉也自p计了一个分늚ҎQ绝Ҏ自己惛_的,如果|上有一LQ说明大安思考了Q有可取度,提供l大家参考?<br /> 首先写了一个分늚c,其实只有主要属性的setter和getterҎ <br /> /** <br /> * 分页c?<br /> * @author qinglin876 <br /> * <br /> */ <br /> public class Pagination { <br /> private int start; <br /> //一ơ取得的数量 <br /> private int size; <br /> //要取得页?<br /> private int currentPage = 1; <br /> //ȝ记录| <br /> private int totalPage = 0; <br /> //ȝ记录条数 <br /> private int totalRecord; <br /> public int getTotalRecord() { <br /> return totalRecord; <br /> } <br /> public void setTotalRecord(int totalRecord) { <br /> this.totalRecord = totalRecord; <br /> } <br /> public Pagination(){ <br /> <br /> } <br /> public Pagination(int size){ <br /> this.size = size; <br /> } <br /> public int getSize() { <br /> return size; <br /> } <br /> public void setSize(int size) { <br /> this.size = size; <br /> } <br /> public int getStart() { <br /> return start; <br /> } <br /> public void setStart(int start) { <br /> this.start = start; <br /> } <br /> public int getCurrentPage() { <br /> return currentPage; <br /> } <br /> public void setCurrentPage(int currentPage) { <br /> this.currentPage = currentPage; <br /> } <br /> public int getTotalPage() { <br /> return totalPage; <br /> } <br /> public void setTotalPage(int totalPage) { <br /> this.totalPage = totalPage; <br /> } <br /> <br /> } <br /> <br /> 另外pagination.jsp由paginationcd?<br /> <br /> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <br /> <br /> <%@ taglib prefix="s" uri="/struts-tags"%> <br /> <SCRIPT type="text/javascript"> <br /> <br />       function trim(str){ <br /> return str.replace(/(^\s*)|(\s*$)/g, ""); <br /> } <br /> <br /> function selectPage(input){ <br /> <br /> var value = trim(input.value); <br /> if(value == ""){ <br /> return; <br /> } <br /> <br /> if(/\d+/.test(value)){ <br /> <br /> input.form.submit(); <br /> return; <br /> } <br /> alert("误入正的|"); <br /> input.focus(); <br /> <br /> } <br />     <br /> </SCRIPT> <br /> <div class="pagech"> <br /> <br /> <s:if test="pagination.totalPage != 0"> <br /> <s:url action="%{#request.url}" id="first"> <br /> <s:param name="pagination.currentPage" value="1"></s:param> <br /> </s:url> <br /> <s:url action="%{#request.url}" id="next"  > <br /> <s:param name="pagination.currentPage" <br /> value="pagination.currentPage+1"> <br /> </s:param> <br /> </s:url> <br /> <s:url action="%{#request.url}" id="prior" > <br /> <s:param name="pagination.currentPage" <br /> value="pagination.currentPage-1"></s:param> <br /> </s:url> <br /> <s:url action="%{#request.url}" id="last"> <br /> <s:param name="pagination.currentPage" value="pagination.totalPage"></s:param> <br /> </s:url> <br /> <s:if test="pagination.currentPage == 1"> <br /> <span class="current">首页</span> <br /> <span class="current">上一?lt;/span> <br /> </s:if> <br /> <s:else> <br /> <s:a href="%{first}">首页</s:a> <br /> <s:a href="%{prior}">上一?lt;/s:a> <br /> </s:else> <br /> <s:if <br /> test="pagination.currentPage == pagination.totalPage || pagination.totalPage == 0"> <br /> <span class="current">下一?lt;/span> <br /> <span class="current">末页</span> <br /> </s:if> <br /> <s:else> <br /> <s:a href="%{next}">下一?lt;/s:a>&nbsp;&nbsp; <br />                   <s:a href="%{last}">末页</s:a> <br /> </s:else> <br /> <span class="jumplabel">跌{?lt;/span> <br /> <s:form action="%{#request.url}" theme="simple" <br /> cssStyle="display:inline"> <br /> <s:hidden name="pagination.totalPage" value="%{pagination.totalPage}"></s:hidden> <br /> <input type="text" name="pagination.currentPage" size="2" <br /> onblur="selectPage(this)" /> <br /> </s:form> <br /> <br /> <span class="jumplabel">?lt;/span> <br /> <span class="jumplabel">?lt;s:property <br /> value="pagination.totalRecord" />?lt;/span> <br /> <span class="jumplabel">当前是第<s:property <br /> value="pagination.currentPage" />/<s:property value="pagination.totalPage"/>?lt;/span> <br /> <br /> <br /> </s:if> <br /> <br /> </div> <br /> <br /> 用的时候,在页面includeq去Q注意上面的"%{#request.url}"Q即是在struts2的action里面有一个setter和getterҎQ下面看action中的某个Ҏ <br /> public String showNotices() throws Exception{ <br /> <br /> if(tip != null){ <br /> tip = new String(tip.getBytes("iso8859-1"),"utf-8"); <br /> } <br /> if(notices == null) <br /> this.notices = new ArrayList<Notice>(); <br /> int size = Integer.valueOf(this.getText("per_page_notice_size")); <br /> if (pagination == null) { <br /> pagination = new Pagination(size); <br /> } <br /> pagination.setSize(size); <br /> if (pagination.getCurrentPage() <= 0) { <br /> pagination.setCurrentPage(1); <br /> } <br /> if (pagination.getTotalPage() != 0 <br /> && pagination.getCurrentPage() > pagination.getTotalPage()) { <br /> pagination.setCurrentPage(pagination.getTotalPage()); <br /> } <br /> <span style="color: red">url = "goto_showNotices.action"</span>; this.notices.addAll(this.noticeDAO.showAll(pagination)); <br /> if(this.notices.size() == 0 && pagination.getCurrentPage() != 1){ <br /> pagination.setCurrentPage(pagination.getCurrentPage()-1); <br /> this.notices.addAll(this.noticeDAO.showAll(pagination)); <br /> } <br /> return "success"; <br /> } <br /> <br /> 在上面的this.noticeDAO.showAll(pagination))中填充paginationQ具体如?<br /> /* <br /> * 昄所有的通告 <br /> * @see com.qinglin.dao.NoticeDAO#showAll(com.qinglin.util.Pagination) <br /> */ <br /> @SuppressWarnings("unchecked") <br /> public List<Notice> showAll(final Pagination pagination) { <br /> String hql = "from Notice as n"; <br /> this.getHibernateTemplate().setCacheQueries(true); <br /> int totalRecord = ((Long) this.getSession().createQuery( <br /> "select count(*) " + hql).uniqueResult()).intValue(); <br /> int totalPage = totalRecord % pagination.getSize() == 0 ? totalRecord <br /> / pagination.getSize() : totalRecord / pagination.getSize() + 1; <br /> pagination.setTotalRecord(totalRecord); <br /> pagination.setTotalPage(totalPage); <br /> hql += " order by n.add_date desc"; <br /> final String hql1 = hql; <br /> <br /> return (List<Notice>) this.getHibernateTemplate().execute( <br /> new HibernateCallback() { <br /> public Object doInHibernate(Session session) <br /> throws HibernateException, SQLException { <br /> Query query = session.createQuery(hql1); <br /> query.setFirstResult((pagination.getCurrentPage() - 1) <br /> * pagination.getSize()); <br /> query.setMaxResults(pagination.getSize()); <br /> return query.list(); <br /> } <br /> }); <br /> } <br /> <br /> <br /> 基本上就q些Q当然请求的action里面需要设|pagination的setter和getterҎ <br /> q个分页Ҏ特点是简单,只需在action中指明请求的urlQ用某种Ҏ填充paginationQ在昄的页面包含pagination.jsp卛_?<br /> <br /> <br /> <br /> package com.shop.bean; <br /> <br /> import java.util.List; <br /> <br /> public class PageView <T> { <br /> <br /> private int currentPage = 1; <br /> <br /> private long totalPage = 1; <br /> <br /> private long totalRecord = 1; <br /> <br /> private List <T> records; <br /> <br /> private int firstIndex = 1; <br /> <br /> private PageIndex pageIndex; <br /> <br /> private int maxResult = 12; <br /> <br /> public PageView(int currentPage, int maxResult) { <br /> this.currentPage = currentPage; <br /> this.maxResult = maxResult; <br /> this.firstIndex = currentPage * maxResult; <br /> } <br /> <br /> public int getCurrentPage() { <br /> return currentPage; <br /> } <br /> <br /> public void setCurrentPage(int currentPage) { <br /> this.currentPage = currentPage; <br /> } <br /> <br /> public void setQueryResult(QueryResult <T> qr){ <br /> setTotalRecord(qr.getTotal()); <br /> setRecords(qr.getDatas()); <br /> } <br /> <br /> public long getTotalPage() { <br /> return totalPage; <br /> } <br /> <br /> public void setTotalPage(long totalPage) { <br /> this.totalPage = totalPage; <br /> this.pageIndex = WebTool.getPageIndex(this.maxResult, this.currentPage, this.totalPage); <br /> } <br /> <br /> public long getTotalRecord() { <br /> return totalRecord; <br /> } <br /> <br /> public void setTotalRecord(long totalRecord) { <br /> this.totalRecord = totalRecord; <br /> setTotalPage(totalRecord / this.maxResult == 0 ? totalRecord / this.maxResult : totalRecord / this.maxResult + 1); <br /> } <br /> <br /> public List <T> getRecords() { <br /> return records; <br /> } <br /> <br /> public void setRecords(List <T> records) { <br /> this.records = records; <br /> } <br /> <br /> public int getFirstIndex() { <br /> return firstIndex; <br /> } <br /> public PageIndex getPageIndex() { <br /> return pageIndex; <br /> } <br /> <br /> public void setPageIndex(PageIndex pageIndex) { <br /> this.pageIndex = pageIndex; <br /> } <br /> <br /> public int getMaxResult() { <br /> return maxResult; <br /> } <br /> <br /> public void setMaxResult(int maxResult) { <br /> this.maxResult = maxResult; <br /> } <br /> <br /> public void setFirstIndex(int firstIndex) { <br /> this.firstIndex = firstIndex; <br /> } <br /> } <br /> <br /> <br /> 画面的代码: <br /> <s:iterator value="#request.pageView.pageIndex.pageList"> <br />       <s:if test="#request.pageView.currentPage == 4"> <b> <font color="#FFFFFF">W?<s:property/>?</font> </b> </s:if> <br />     <s:if test="#request.pageView.currentPage != 4"> <a href="javascript:topage( <s:property/>)" class="a03">W?<s:property/>?</a> </s:if> <br /> </s:iterator> <br /> <br /> action中的代码Q?<br /> Map <String, Object> request = (Map <String, Object>)ActionContext.getContext().get("request"); <br /> request.put("pageView", pageView); <br /> <br /> <br /> <br /> <br /> <s:iterator value="#request.pageView.pageIndex.pageList">?"#request.pageView.pageIndex.pageListD正常获取Q可?nbsp; <s:if test="#request.pageView.currentPage == 4"> 中的="#request.pageView.currentPageD取不到正的|q是什么原因啊Q?<br /> <strong>问题补充Q?/strong><br />   <s:iterator value="#request.pageView.pageIndex.pageList"> <br />     <s:if test="{#request.pageView.currentPage == 4}"><b><font color="#FFFFFF">W?lt;s:property/>?lt;/font></b></s:if> <br />     <s:if test="{#request.pageView.currentPage != 4}"><a href="javascript:topage(<s:property/>)" class="a03">W?lt;s:property/>?lt;/a></s:if> <br /> </s:iterator> <img src ="http://m.tkk7.com/jimphei/aggbug/296002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/jimphei/" target="_blank">jimphei</a> 2009-09-22 12:03 <a href="http://m.tkk7.com/jimphei/archive/2009/09/22/296002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>哈哈http://m.tkk7.com/jimphei/archive/2009/09/05/294010.htmljimpheijimpheiSat, 05 Sep 2009 13:01:00 GMThttp://m.tkk7.com/jimphei/archive/2009/09/05/294010.htmlhttp://m.tkk7.com/jimphei/comments/294010.htmlhttp://m.tkk7.com/jimphei/archive/2009/09/05/294010.html#Feedback0http://m.tkk7.com/jimphei/comments/commentRss/294010.htmlhttp://m.tkk7.com/jimphei/services/trackbacks/294010.html

      jimphei 2009-09-05 21:01 发表评论
      ]]>
      վ֩ģ壺 ȫѹɫһ| ҹһƵ| þþþAVרɫ| ۺŷۺվ | Ůֻˬ߹ۿ| ޹Ʒþ| ʵƵѹۿ| ɫĻ߹ۿ| þþwwwëƬ | ѨƬ߹ۿ| ɫ͵͵͵ۺ| ƷƵ| ĻӰӾþþѹۿ| ޹Ӱavַ| ƷϵƵ| ҹAVƬ| | ޾ƷӰҹ| ëƬȫһ| AVպAVɫ| ޹ӰԺ| 99Ѳ| Ļmv| պ| þ99Ʒѿ| պһ| ѹ˸Ƶվ| 99Ƶ߹ۿ| һ| ҹˬˬˬWWWƵʮ˽| ˿www| Ʒ˿߲| һȫëƬ| þþƷѹۿ| ɫ͵Ʒһ| ۺAVһ| ҹ1000| һһdvd߹ۿƵ| þþƷAV㽶| ձһaƵѹۿ| ѿƵijAPP|