Spring MVC + JPA + Hibernate + GlassFish V3 + MySQL 实现J2EE应用的常用配置模板详解

1 篇文章 0 订阅

首先是web.xml

 

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  6.     <!--设置spring在本应用程序中的配置加载监听器 -->  
  7.     <!--监听器会在应用程序启动时自动实例化 -->  
  8.     <!--ContextLoaderListener实例化后自动寻找WEB-INF下的applicationContext.xml配置文件 -->  
  9.     <listener>  
  10.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  11.     </listener>  
  12.   
  13.     <!--解决spring乱码问题 -->  
  14.     <filter>  
  15.         <filter-name>encoding</filter-name>  
  16.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  17.         <init-param>  
  18.             <param-name>encoding</param-name>  
  19.             <param-value>UTF-8</param-value>  
  20.         </init-param>  
  21.     </filter>  
  22.     <filter-mapping>  
  23.         <filter-name>encoding</filter-name>  
  24.         <url-pattern>/*</url-pattern>  
  25.     </filter-mapping>  
  26.   
  27.     <!--全局Servlet调度配置 -->  
  28.     <servlet>  
  29.         <!--若设置 servlet-name为[name] -->  
  30.         <!--则DispatcherServlet在实例化后会自动加载[name]-servlet.xml -->  
  31.         <servlet-name>spring</servlet-name>  
  32.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  33.         <!--随服务器一同启动 -->  
  34.         <load-on-startup>1</load-on-startup>  
  35.     </servlet>  
  36.     <servlet-mapping>  
  37.         <servlet-name>spring</servlet-name>  
  38.         <url-pattern>*.do</url-pattern>  
  39.     </servlet-mapping>  
  40.   
  41.     <!--错误页转向配置 -->  
  42.     <error-page>  
  43.         <error-code>404</error-code>  
  44.         <location>/error.html</location>  
  45.     </error-page>  
  46.   
  47.     <!--首页文件名设置 -->  
  48.     <welcome-file-list>  
  49.         <welcome-file>index.html</welcome-file>  
  50.         <welcome-file>index.jsp</welcome-file>  
  51.     </welcome-file-list>  
  52.   
  53.     <!--设置持久化单元引用 -->  
  54.     <!--此配置仅当Servlet容器支持Servlet 2.5时有效 -->  
  55.     <!--此时读取JPA配置文件 文件路径:类路径/META-INF/persistence.xml -->  
  56.     <persistence-unit-ref>  
  57.         <!--此处的引用名称一般习惯性写法为:persistence/持久化单元名称 -->  
  58.         <!--此值被applicationContext.xml使用 -->  
  59.         <persistence-unit-ref-name>persistence/stu_infoPU</persistence-unit-ref-name>  
  60.         <!--此处的persistence-unit-name值与persistence.xml中persistence-unit的name属性对应 -->  
  61.         <persistence-unit-name>stu_infoPU</persistence-unit-name>  
  62.     </persistence-unit-ref>  
  63. </web-app>  


 

其次是类路径下的META-INF/persistence.xml

 

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <persistence xmlns="http://java.sun.com/xml/ns/persistence"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"  
  6.     version="1.0">  
  7.     <!--持久化单元名称 -->  
  8.     <persistence-unit name="stu_infoPU" transaction-type="JTA">  
  9.         <provider>org.hibernate.ejb.HibernatePersistence</provider>  
  10.         <!--设置从应用服务器的JNDI树种查找哪一个具体的JDBC资源 -->  
  11.         <jta-data-source>jdbc/stu_info</jta-data-source>  
  12.         <properties>  
  13.             <property name="dialect" value="org.hibernate.dialect.MySQLDialect"></property>  
  14.             <property name="hibernate.show_sql" value="true"></property>  
  15.         </properties>  
  16.     </persistence-unit>  
  17. </persistence>  


然后是applicationContext.xml

 

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.            http://www.springframework.org/schema/context  
  9.            http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  10.            http://www.springframework.org/schema/aop   
  11.            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  12.            http://www.springframework.org/schema/jee  
  13.            http://www.springframework.org/schema/jee/spring-jee-3.0.xsd  
  14.            http://www.springframework.org/schema/tx  
  15.            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">  
  16.     <!--此配置文件中的所有配置要优先于spring-servlet.xml的配置加载 -->  
  17.     <context:component-scan base-package="service,util" />  
  18.     <!--启用Spring的任务调度编程模式 使其识别@Scheduled注解 -->  
  19.     <task:executor id="executor" pool-size="5" />  
  20.     <task:scheduler id="scheduler" pool-size="10" />  
  21.     <task:annotation-driven executor="executor" scheduler="scheduler" />  
  22.     <!--与持久化相关的配置 -->  
  23.     <!--jndi-name用于指示从web.xml中读取哪一个持久化单元 -->  
  24.     <!--使用web.xml中的persistence-unit-ref-name所指定的值 -->  
  25.     <!--查找链: -->  
  26.     <!--通过jdni-name在web.xml中查找persistence-unit-ref节点的子节点 -->  
  27.     <!--查找有无与jdni-name所指定名称匹配的persistence-unit-ref-name -->  
  28.     <!--根据匹配到的persistence-unit-ref-name得到persistence-unit-name -->  
  29.     <!--根据persistence-unit-name在类路径/META-INF/persistence.xml中查找与之匹配的persistence-unit -->  
  30.     <!--加载在persistence.xml中相关的配置 并实例化实体管理器工厂类 -->  
  31.     <jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/stu_infoPU" />  
  32.     <!--开启从应用服务器的JNDI树中自动获取事务性DataSource -->  
  33.     <tx:jta-transaction-manager />  
  34.     <!--激活@Transactional注解驱动的事务行为 -->  
  35.     <!--此处设置的transaction-manager为transactionManager -->  
  36.     <tx:annotation-driven transaction-manager="transactionManager" />  
  37. </beans>  



最后是spring-servlet.xml

 

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  7.         http://www.springframework.org/schema/context  
  8.         http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  9.         http://www.springframework.org/schema/mvc  
  10.         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  
  11.     <!--针对控制器返回视图字符串的修饰 最终视图路径为 [prefix][returnValue][suffix] -->  
  12.     <!--例如prefix="/WEB-INF/" returnValue="admin/login" suffix=".jsp" -->  
  13.     <!--最终的URL为 /WEB-INF/admin/login.jsp -->  
  14.     <bean  
  15.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  16.         <property name="viewClass"  
  17.             value="org.springframework.web.servlet.view.JstlView" />  
  18.         <property name="prefix" value="/WEB-INF/pages/" />  
  19.         <property name="suffix" value=".jsp" />  
  20.     </bean>  
  21.   
  22.     <!--此处配置将 controller包和util包及其子包内部 -->  
  23.     <!--包含注解 @Service @Component @Controller @Repository的类全部自动注入 -->  
  24.     <context:component-scan base-package="controller" />  
  25.   
  26.     <!--为spring设置注解映射路径支持 @RequestMapping -->  
  27.     <bean  
  28.         class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />  
  29.     <bean  
  30.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  
  31.   
  32.     <!--设置spring拦截器 -->  
  33.     <mvc:interceptors>  
  34.         <!--若mvc:mapping的path相同则按照配置先后形成拦截器链 -->  
  35.         <mvc:interceptor>  
  36.             <mvc:mapping path="/*" />  
  37.             <bean class="interceptor.TestInterceptor1" />  
  38.         </mvc:interceptor>  
  39.         <mvc:interceptor>  
  40.             <mvc:mapping path="/*" />  
  41.             <bean class="interceptor.TestInterceptor2" />  
  42.         </mvc:interceptor>  
  43.     </mvc:interceptors>  
  44. </beans>  


接下来就是配置GlassFish了。

我将GlassFish安装在了D盘。下面是删除默认域domain1及创建自定义域stu_info的过程

 


C:\Documents and Settings\chaijunkun>d:

D:\>cd glassfish3

D:\glassfish3>cd glassfish

D:\glassfish3\glassfish>cd bin

D:\glassfish3\glassfish\bin>asadmin
使用“exit”以退出, 使用“help”以获得联机帮助。
asadmin> delete-domain domain1
已删除域 domain1。
已成功执行命令 delete-domain。
asadmin> create-domain stu_info
请输入管理员用户名 [按 Enter 键将接受默认值 "admin"/无密码]>【按回车继续】
使用 Admin 的默认端口 4848。
使用 HTTP Instance 的默认端口 8080。
使用 JMS 的默认端口 7676。
使用 IIOP 的默认端口 3700。
使用 HTTP_SSL 的默认端口 8181。
使用 IIOP_SSL 的默认端口 3820。
使用 IIOP_MUTUALAUTH 的默认端口 3920。
使用 JMX_ADMIN 的默认端口 8686。
使用 OSGI_SHELL 的默认端口 6666。
使用 JAVA_DEBUGGER 的默认端口 9009。
无法找到使用在 [D:\glassfish3\glassfish\lib\templates\locales\zh_CN\index.html]
中指定的语言环境 [zh_CN] 的文件。使用默认的 (en_US) index.html。
自签名 X.509 服务器证书的标识名为:
[CN=MicrosoftUser,OU=GlassFish,O=Oracle Corporation,L=Santa Clara,ST=Ca
lifornia,C=US]
自签名 X.509 服务器证书的标识名为:
[CN=MicrosoftUser,OU=GlassFish,O=Oracle Corporation,L=Santa Clara,ST=Ca
lifornia,C=US]
找不到域初始化程序,将绕开自定义步骤
已创建域 stu_info。
域 stu_info 管理员端口为 7982。
域 stu_info 允许管理员以用户 "admin"(无密码)身份登录。
已成功执行命令 create-domain。

建立好域之后不急着开启域,由于要是用MySQL数据库,需要先将MySQL数据库的Connector拷贝到域的库目录下。

我用的MySQL connector是mysql-connector-java-5.1.17-bin.jar,MySQL的官方提供了下载。

由于我将GlassFish V3安装到了D:\glassfish3,所以需要将该文件拷贝到D:\glassfish3\glassfish\domains\stu_info\lib\目录下。

拷贝完成后,该connector的完整文件名应为:D:\glassfish3\glassfish\domains\stu_info\lib\mysql-connector-java-5.1.17-bin.jar

下面回到命令行启动新建立的stu_info域

asadmin> start-domain stu_info
正在等待 stu_info 启动 ...............
成功启动了 domain : stu_info
domain  位置: D:\glassfish3\glassfish\domains\stu_info
日志文件: D:\glassfish3\glassfish\domains\stu_info\logs\server.log
管理端口: 4848
已成功执行命令 start-domain。
asadmin>

此时打开浏览器,输入:http://127.0.0.1:4848

进入GlassFish V3的GUI管理系统

 

左侧“日常任务”导航栏中找到JDBC配置区域,由于是新建的域,只存在默认的JDBC资源。需要新建一个适合应用的JDBC资源。

 

点击JDBC连接池

 

 

点击右侧新建按钮,填入如下信息

 

 

点击“下一步”

 

 

选择数据源类名称,勾选Ping启用选项。向下拖动,还有其他属性。这里只保留关键的属性,很简单,就不一一解释了

 

 

点击右下角的“完成”。如果没问题,会在页面上方提示“Ping成功”

 

接下来添加JDBC数据源

 

点击JDBC资源,在右侧点击“新建”按钮

 

 

按照约定俗成的习惯,这里的JNDI名称以jdbc开头,加“/”后接JDBC连接池名称。池选择刚刚新建的stu_info连接池,

点击“确定”按钮

 

 

新的JDBC数据源就添加好了。

接下来就是用MyEclipse将写好的Web应用部署到GlassFish上了。部署好后再开启stu_info域。在左侧“应用程序”中会看到所部署的Web应用。

 


配置好这些以后,如果Web应用程序没有问题的话,访问的路径为http://127.0.0.1:8080/stu_info/。URL中的stu_info是由应用程序名称决定的。

如果想去掉这个名称,在浏览器中直接输入http://127.0.0.1:8080/就能访问Web应用程序则应进行如下配置:

点击日昌任务下配置节点,选择server-config 配置项。找到虚拟服务器,选中名称为server的虚拟服务器



在右侧出现虚拟服务器配置界面:



其中默认Web模块是空的。在下拉列表中选择刚刚部署的Web应用程序,点击“应用”,即可生效。此时即可直接访问:

http://127.0.0.1:8080

 

 

另外,千万要记住工程名、连接池、JDBC数据源中避免出现spring这个单词。我之前因为在学习,想做一个使用spring框架的demo,就把工程名称和工程内的JPA数据连接配置都写成了“spring”或“jdbc/spring”,结果调试了好几天都提示Unable to retrieve EntityManagerFactory forunitName XXX,从而创建不了实体管理器entityManager。后来经高人指点,改了个名字就都迎刃而解了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值