2012年6月1日星期五

Hello JSF



基于一个已有的网络工程

拷贝JSF 和支持的jars包到WEB-INF/lib目录

jsf-impl.jar  

jsf-api.jar

jstl.jar  

standard.jar

配置web.xml以使用Faces Servlet

  <servlet>  

        <servlet-name>Faces Servlet</servlet-name>  

        <servlet-class>  

            javax.faces.webapp.FacesServlet  

        </servlet-class>  

        <load-on-startup>1</load-on-startup>  

    </servlet>  

  

    <servlet-mapping>  

        <servlet-name>Faces Servlet</servlet-name>  

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

    </servlet-mapping>  

创建faces-config.xml


<?xml version="1.0"?>  

 <!DOCTYPE faces-config PUBLIC  

 "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"  

 "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">  

  

 <faces-config>  

    <navigation-rule>  

        <from-view-id>/index.jsp</from-view-id>  

        <navigation-case>  

            <from-outcome>login</from-outcome>  

            <to-view-id>/welcome.jsp</to-view-id>  

        </navigation-case>  

    </navigation-rule>  

  

   

 </faces-config>

在JSP页面中增加 JSF taglib的引用


<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>  

 <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>  

 

创建后台bean


package com.capinfo.bean;


public class UserBean {


private String name;  

 

    public void setName(String name) {  

        this.name = name;  

    }  

  

    public String getName() {  

        return name;  

    }  

}



后台bean 在JSF controls中注册(faces-config.xml)

 <managed-bean>  

        <managed-bean-name>user</managed-bean-name>  

         <managed-bean-class>  

             com.capinfo.bean.UserBean  

         </managed-bean-class>  

        <managed-bean-scope>session</managed-bean-scope>  

    </managed-bean>  

增加JSF tags使之与后台bean交互

<f:view>  

        <h:form>  

            <h3>请输入您的名称</h3>  

            名称: <h:inputText value="#{user.name}"/><p>  

            <h:commandButton value="送出" action="login"/>  

        </h:form>  

    </f:view>  



基于一个已有的网络工程
拷贝JSF 和支持的jars包到WEB-INF/lib目录
jsf-impl.jar  
jsf-api.jar
jstl.jar  
standard.jar
配置web.xml以使用Faces Servlet
  <servlet>  
        <servlet-name>Faces Servlet</servlet-name>  
        <servlet-class>  
            javax.faces.webapp.FacesServlet  
        </servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>Faces Servlet</servlet-name>  
        <url-pattern>*.faces</url-pattern>  
    </servlet-mapping>  
创建faces-config.xml

<?xml version="1.0"?>  
 <!DOCTYPE faces-config PUBLIC  
 "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"  
 "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">  
  
 <faces-config>  
    <navigation-rule>  
        <from-view-id>/index.jsp</from-view-id>  
        <navigation-case>  
            <from-outcome>login</from-outcome>  
            <to-view-id>/welcome.jsp</to-view-id>  
        </navigation-case>  
    </navigation-rule>  
  
   
 </faces-config>
在JSP页面中增加 JSF taglib的引用

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>  
 <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>  
 
创建后台bean

package com.capinfo.bean;

public class UserBean {

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


后台bean 在JSF controls中注册(faces-config.xml)
 <managed-bean>  
        <managed-bean-name>user</managed-bean-name>  
         <managed-bean-class>  
             com.capinfo.bean.UserBean  
         </managed-bean-class>  
        <managed-bean-scope>session</managed-bean-scope>  
    </managed-bean>  
增加JSF tags使之与后台bean交互
<f:view>  
        <h:form>  
            <h3>请输入您的名称</h3>  
            名称: <h:inputText value="#{user.name}"/><p>  
            <h:commandButton value="送出" action="login"/>  
        </h:form>  

CGLIB 代理类 效率

昨天看《Spring 3.x企业应用开发实战》

作者建议将<aop:config>中的proxy-target-class设置为true,默认是false.

也就是<aop:config proxy-target-class="true">

 

理由是:当为false时,spring使用java jdk的java.lang.reflect包中提供的方式来生成代理类

当为true时,spring使用CGLIB包中提供的方式来生成代理类

而代理类执行效率,CGLIB生成的代理类要比jdk生成的代理类高10倍

而生成代理类效率,jdk是CGLIB的8倍

 

所以在使用单例模式的bean ,建议使用CGLIB生成代理类

 

如果使用CGLIB生成代理类,必须引入CGLIB的jar包

 

至于作者怎么得到10倍 8倍的结论,想google一下,结果: