spring3.1+openjpa+jsf2.0框架环境搭建

1.      首先利用IDE建立一个Web项目 (IDEeclipse,项目名称为joindemo)

2.      Lib中导入spring,openjpa,jsf2.0,richface及其它必需的jar;

3.      Web项目加入jsf支持

Web.xml

<?xml version="1.0"?>

<web-app

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://www.java.net/external?url=http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

 <description>XX应用开发平台</description>

    <display-name>joindemo</display-name>

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/applicationContext.xml</param-value>

    </context-param>

    <context-param>

        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>

        <param-value>.xhtml</param-value>

    </context-param>

   

    <context-param>

        <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>

        <param-value>2</param-value>

    </context-param>

   

    <context-param>

        <param-name>facelets.DEVELOPMENT</param-name>

        <param-value>true</param-value>

    </context-param>

   

    <context-param>

        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>

        <param-value>client</param-value>

    </context-param>

   

    <context-param>

        <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>

        <param-value>true</param-value>

    </context-param>

 

    <context-param>

        <param-name>org.richfaces.enableControlSkinning</param-name>

        <param-value>false</param-value>

    </context-param>

   

    <context-param>

       <param-name>org.richfaces.enableControlSkinningClasses</param-name>

       <param-value>false</param-value>

    </context-param>

   

    <context-param>

        <param-name>org.richfaces.skin</param-name>

        <param-value>blueSky</param-value>

    </context-param>

 

    <context-param>

        <param-name>org.richfaces.push.jms.enabled</param-name>

        <param-value>true</param-value>

    </context-param>

 

    <context-param>

        <param-name>com.sun.faces.expressionFactory</param-name>

        <param-value>com.sun.el.ExpressionFactoryImpl</param-value>

    </context-param>

   

    <!--JSF2.0的模式配置,开发模式下会在调试时报更加详细的错误-->

    <context-param>

        <param-name>javax.faces.PROJECT_STAGE</param-name>

        <param-value>Development</param-value>

    </context-param>

   

    <listener>

        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

    </listener>

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

 

    <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>*.jsf</url-pattern>

    </servlet-mapping>

 

   

    

    <session-config>

        <session-timeout>300</session-timeout>

    </session-config>

    <welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

    <login-config>

        <auth-method>BASIC</auth-method>

    </login-config>

 <!--   <context-param>

   <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>

   <param-value>com.sun.facelets.FaceletViewHandler</param-value>

</context-param>

--> 

   

</web-app>

   

 

4.      jsf配置,WEB-INF下新建faces-config.xml

 

<?xml version="1.0"?>

<faces-configxmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

     http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"

    version="2.0">

 

    <application>

       <message-bundle>common</message-bundle>

       <locale-config>

           <default-locale>zh_CN</default-locale>

       </locale-config>

       <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>

       <!--

           <variable-resolver>

           org.springframework.web.jsf.DelegatingVariableResolver

           </variable-resolver>

           <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>

       -->

    </application>

 

</faces-config>

 

 

5.      openjpa配置,META-INF下面新建persistence.xml

 

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

<persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence

   http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

   

    <persistence-unit name="jyt" transaction-type="RESOURCE_LOCAL">

        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

       

        <properties>

            <!--

        <propertyname="openjpa.QueryCache" value="true(CacheSize=1000,SoftReferenceSize=100)"/>

            <propertyname="openjpa.RemoteCommitProvider" value="sjvm"/>

            -->

            <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>

        </properties>

    </persistence-unit>

   

</persistence>

6.      spring配置,WEB-INF下新建applicationContext.xml

 

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

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

                     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

                     http://www.springframework.org/schema/aop

                     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd

                     http://www.springframework.org/schema/tx

                     http://www.springframework.org/schema/tx/spring-tx-3.1.xsd

                       http://www.springframework.org/schema/context     

                       http://www.springframework.org/schema/context/spring-context-3.1.xsd">

 

                       

    <bean id="propertyConfigure"

       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="locations">

            <list>

                <value>/WEB-INF/join.properties</value>

            </list>

        </property>

    </bean>

 

    <bean id="dataSource"

       class="org.springframework.jdbc.datasource.DriverManagerDataSource">

       <property name="driverClassName">

           <value>${jdbc.driverClassName}</value>

       </property>

       <property name="url">

           <value>${jdbc.url}</value>

       </property>

       <property name="username">

           <value>${jdbc.username}</value>

       </property>

       <property name="password">

           <value>${jdbc.password}</value>

       </property>

    </bean>

 

    <bean id="entityManagerFactory"

       class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"

       scope="singleton">

       <property name="persistenceUnitName"value="jyt" />

       <property name="dataSource">

           <ref bean="dataSource"/>

       </property>

       <property name="jpaVendorAdapter">

           <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">

              <property name="showSql"value="${jpa.showSql}" />      <!--是否显示SQL -->

              <property name="generateDdl"value="${jpa.generateDdl}" />  <!--是否自动生成DDL-->

           </bean>

       </property>

       <property name="loadTimeWeaver">

           <bean

               class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>

       </property>

    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"

       scope="singleton">

       <property name="entityManagerFactory"ref="entityManagerFactory" />

    </bean>

    <bean

        class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

    <bean

       class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

    <bean id="loginservice" class="com.join.user.service.LoginService"/>

   

  

  

</beans>

7.      配置文件,WEB-INF下新建join.properties

 

#########################JDBC ##################################

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc\:mysql\://127.0.0.1\:3306/join?autoReconnect\=true&failOverReadOnly\=false&useServerPreparedStmts\=true

jdbc.username=root

jdbc.password=root

 

#########################  JPA #################################

jpa.showSql=true

jpa.generateDdl=true

 

 

实例:实现了简单的登陆验证:

User.java

package com.join.user.domain;

 

import java.io.Serializable;

 

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

import javax.persistence.TableGenerator;

 

@Entity

@Table(name = "user")

public class User implements Serializable {

 

         privatestatic final long serialVersionUID = 7208006970679143294L;

   private int id;

 

 

 

         publicvoid setId(int id) {

                   this.id= id;

         }

 

         privateString username;

         privateString password;

         publicUser(){}

 

        

         @Id

         @GeneratedValue(strategy= GenerationType.AUTO)

                   @Column(name= "id")

         publicint getId() {

                   returnid;

         }

         @Column(name= "username",length=50)

                   publicString getUsername() {

                   returnusername;

         }

         @Column(name= "password",length=50)

         publicString getPassword() {

                   returnpassword;

         }

         publicvoid setUsername(String username) {

                   this.username= username;

         }

        

         publicvoid setPassword(String password) {

                   this.password= password;

         }

 

}

loginMBan.java

package com.join.user.mbean;

 

import java.io.Serializable;

 

import javax.faces.bean.ManagedBean;

import javax.faces.bean.ManagedProperty;

import javax.faces.bean.SessionScoped;

 

import com.join.user.domain.User;

import com.join.user.service.LoginService;

 

@ManagedBean(name="loginMBean")

@SessionScoped

public class LoginMBean implements Serializable{

         privatestatic final long serialVersionUID = -4256633943098961672L;

         @ManagedProperty(value= "#{loginservice}")

         privateLoginService loginservice;

   

         privateString userName;

   private String userPwd;

 

   public String login(){

             //userName="jyt";

             //userPwd="jyt";

             User user=null;

             user=getLoginservice().queryByUsernameAndPwd(userName,userPwd);

             if(user.getUsername().equals(userName)&&user.getPassword().equals(userPwd)){

                       //return "index";

                       return "Mainframe";

             }else{

             return null;}

    }

         publicString getUserName() {

                   returnuserName;

         }

         publicvoid setUserName(String userName) {

                   this.userName= userName;

         }

         publicString getUserPwd() {

                   returnuserPwd;

         }

         publicvoid setUserPwd(String userPwd) {

                   this.userPwd= userPwd;

         }

         publicLoginService getLoginservice() {

                   returnloginservice;

         }

         publicvoid setLoginservice(LoginService loginservice) {

                   this.loginservice= loginservice;

         }

 

}

Loginservice.java

package com.join.user.service;

 

import javax.persistence.EntityManager;

importjavax.persistence.PersistenceContext;

import javax.persistence.Query;

 

import com.join.user.domain.User;

 

public class LoginService {

         @PersistenceContext

         privateEntityManager entityManager;

         publicUser queryByUsernameAndPwd(String username,String password){

                   System.out.println("=="+username+"g"+password);

         Stringsql="select entity from User entity where entity.username='"+username+"'" +

                            "and entity.password= '"+password+"' ";

         Queryquery = getEntityManager().createQuery(sql);

         Useruser=(User) query.getSingleResult();

         returnuser;

         }

         publicEntityManager getEntityManager() {

                   returnentityManager;

         }

         publicvoid setEntityManager(EntityManager entityManager) {

                   this.entityManager= entityManager;

         }

}

 

Login.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml"

    xmlns:ui="http://java.sun.com/jsf/facelets"

    xmlns:h="http://java.sun.com/jsf/html"

    xmlns:f="http://java.sun.com/jsf/core"

    xmlns:c="http://java.sun.com/jsp/jstl/core">

<f:view>

 

    <h:head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <title>5555</title> 

    </h:head>

    <body id="body">

    <div class="popup">

    <h:form id="loginForm"prependId="false">

  <table width="250"height="180" border="0"cellpadding="0" cellspacing="0">

    <tr>

      <td align="right">

      <h:outputText value="用户名"/>

      <h:inputText id="userName"value="#{loginMBean.userName}" maxlength="32" tabindex="1"styleClass="input_143_out yonghu" /></td>

    </tr>

    <tr>

        <td align="right">

         <h:outputText value="密码"/>

        <h:inputText id="userPwd" value="#{loginMBean.userPwd}"/>

          

      

        </td>

    </tr>

      

     <tr>

        <td align="center" class="red"></td>

    </tr>

    <tr>

      <td  class="text">

             <h:commandLink id="login"value="登陆" action="#{loginMBean.login}"tabindex="3">

           

             </h:commandLink>

       </td>

    </tr>

  </table></h:form>

</div>

 

    </body>

 

</f:view>

</html>

Index.xhhtml

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml"

    xmlns:ui="http://java.sun.com/jsf/facelets"

    xmlns:h="http://java.sun.com/jsf/html"

    xmlns:f="http://java.sun.com/jsf/core"

    xmlns:c="http://java.sun.com/jsp/jstl/core">

<f:view>

 

    <h:head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <title>d</title> 

    </h:head>

    <body id="body">

    hello world!

 

    </body>

 

</f:view>

</html>

数据库joinUser表:

 

访问:http://localhost:8080/joindemo/login.jsf

注意不能用login.xhtml

8.      配置过程中出现的错误

 

 

环境搭建过程中所遇到的问题:

1.tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误。同时其他项目页面也不能访问。关闭eclipse里面的tomcat,在tomcat安装目录下双击startup.bat手动启动tomcat服务器。访问htt://localhost:8080/能正常访问tomcat管理页面。

原因:

eclipsetomcat的项目发布目录(tomcat 目录中的webapp)重定向了,所以你会发现在tomcat安装目录下的webapp目录里面找不到你的项目文件。

解决办法:后面的备注3.1

2  The APR based Apache Tomcat Native librarywhich allows optimal performance in production environments

 was not found on the java.library.path:D:\Program Files\Java\jdk1.7.0_55\bin;C:…

启动的时候出现的这个信息,不是错误,程序也可以正常的运行,刚开始可能以为是环境变量配置错误,然后重复的去配置环境变量,结果可想而知。Tomcat 可以使用 apr(Apache Portable Runtime) 来提供更好的伸缩性、性能和集成到本地服务器技术.

解决办法:

下载http://tomcat.heanet.ie/native/1.1.1/binaries/win32/tcnative-1.dll将这个文件复制到tomcatbin目录下面。不管用的话可以放到jdkbin下面。或者直接放在c system下,也有可能还是解决不了,就不用管了。

3 CONFIGURATIONFAILED! duplicate key: classjavax.faces.validator.RequiredValidator

或类似的xconfig.init()错误等等,这是因为faceletsrichfaces jar包冲突了,导进去了两次或者tomcat下面本身就有,跟程序里的重复了。

解决办法:

不要重复导jar包或删掉tomcat lib下其他jar,只保留本身自带的或者换干净的tomcat试试

join  WARN  [main] openjpa.Runtime - An error occurred while registering aClassTransformer with PersistenceUnitInfo: name 'join', root URL[file:/F:/tomcat/webapps/joindemo/WEB-INF/classes/]. The error has beenconsumed. To see it, set your openjpa.Runtime log level to TRACE. Load-timeclass transformation will not be available.

貌似spring里注册不到persistence.xml啥的,但程序能照常运行,就不用管了。

5 java.lang.NullPointerException

报空指针异常,是因为service类没有在applicationcontext里注册,把该类注册到bean里。

 

备注3.1

重新配置下tomcat服务器:

在eclipse中的server页面,双击tomcat服务,会看到如图所示的配置页面:

   

可以看到红圈中选择的是 Use workspace metadata(does not modify Tomcat installion)

如果该tomcat中部署了项目的话,这红圈中的选项会灰掉不能修改,要修改必须得先把tomcat中的部署的服务都移除。

如图:

通过右键单击tomcat服务器选择 Add and Remove,在弹出的对话框中移除已部署的项目。移除完确定后,将看到上面的选项面板部分可编辑了。

选择Use tomcat installation(Task control of Tomcat installation) 即选择tomcat的安装目录来作为项目的发布目录。

然后,下来四行,看到"DeployPath"了没?它后面的值默认是"wtpwebapps",把它改成"webapps",也就是tomcat中发布项目所在的文件夹名字。修改后关掉该页面,保存配置。这样就将项目部署到了tomcat安装目录下的webapp,重启tomcat服务器,访问http://localhost:8080则能正常访问了,自己部署的项目也能正常访问了。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值