一个完整的Spring+Hibernate+FreeMarker系统搭建过程


第一步

先新建一个WEB工程;导入相当的JAR包(我这里用的是Spring3.0,Hibernate-3.3,FreeMarker-2.3),这个就不用我多说了吧大笑,相信大家都知道。


第二步

配置数据库连接及连接池相关的信息。任何程序都离不开数据。奋斗这个相信大家都明白。

我这里的数据库配置文件为

/WEB-INF/config/jdbc.properties

配置内容如下

jdbc.driverClassName=com.MySQL.jdbc.Driver

jdbc.url=jdbc:mysql://192.168.141.23:3306/exam?characterEncoding=UTF-8

jdbc.username=root

jdbc.password=password

cpool.checkoutTimeout=5000

 

cpool.minPoolSize=1

cpool.maxPoolSize=50

 

cpool.maxIdleTime=7200

cpool.maxIdleTimeExcessConnections=1800

cpool.acquireIncrement=10

第三步

增加Spring配置文件并配置Hibernate相关的信息。

我这里的Spring配置文件为

/WEB-INF/config/application-context.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:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"

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.0.xsd

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

http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd

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

default-lazy-init="true">


<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="locations">

<list>

<value>/WEB-INF/config/jdbc.properties</value>

</list>

</property>

</bean>

<!-- 这一块配置是将数据数据库配置文件导入,形成对象方便下面的Bean进行调用 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${jdbc.driverClassName}" />

<property name="jdbcUrl" value="${jdbc.url}" />

<property name="user" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

<property name="autoCommitOnClose" value="true"/>

<property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/>

<property name="initialPoolSize" value="${cpool.minPoolSize}"/>

<property name="minPoolSize" value="${cpool.minPoolSize}"/>

<property name="maxPoolSize" value="${cpool.maxPoolSize}"/>

<property name="maxIdleTime" value="${cpool.maxIdleTime}"/>

<property name="acquireIncrement" value="${cpool.acquireIncrement}"/>

<property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/>

</bean>

 <!--生成数据源 -->

<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true"/>

<!-- 生成Spring对LOB数据的处理类; 对大对象数据的支持 -->

<bean id="onlineExamInterceptor" class="com.onlineexam.exam.core.common.interceptor.OnlineExamInterceptor" />

<!--

信息和会话回调应用程序拦截器;

引对象继承自

org.hibernate.EmptyInterceptor

-->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

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

</bean>

<!--Hibernate对事务处理的支持;此配置要来下面的 tx:annotation-driven  进行配套使用-->


<!--

 这个配置信息比较多

这里主要有五部分功能;

dataSource用于将数据源注入到sessionFactory

hibernateProperties用于设置Hibernate基本信息;如方言,是否显示语句,是否使用缓存等;

lobHandler用于将前面对大对象的支持信息注入到Hibernate中

entityInterceptor用于将前面的回话回调拦截器加到Hibernate中

mappingLocations用于配置Bean之前的关系

 -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

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

<property name="mappingLocations">

<list>

<value>classpath*:/com/onlineexam/exam/core/entity/hbm/*.hbm.xml</value>

</list>

</property>

<property name="hibernateProperties">

<value>

hibernate.dialect=org.hibernate.dialect.OracleDialect

hibernate.show_sql=false

hibernate.format_sql=false

hibernate.query.substitutions=true 1, false 0

hibernate.jdbc.batch_size=20

hibernate.hbm2ddl.auto=update

hibernate.show_sql=true

hibernate.cache.use_query_cache=false

</value>

</property>

<property name="lobHandler">

<ref bean="lobHandler" />

</property>

<property name="entityInterceptor">   

<ref local="onlineExamInterceptor"/>

</property>

</bean>


<!-- 增加对注解的支持信息-->

<context:annotation-config/>

<!-- 对应上面的事物处理-->

<tx:annotation-driven transaction-manager="transactionManager" />

</beans>

 上面是我对这个文件的配置信息做的一个具体的说明(只是我个人的理解,如果哪位高手感觉有什么不对的地方欢迎发贴讨论微笑。)


这个信息配置完成后,我们需要让系统知道这个配置文件信息。因此需要将这个配置文件的信息加到WEB.XML里面;下面的我们说第四步,增加系统对Spring+Hibernate的支持信息


第四步

配置WEB.XML,

下面的是我的配置

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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

  <display-name>onlineexam</display-name>

  <!--init config-->

  <context-param>

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

   <param-value>

   /WEB-INF/config/application-context.xml

   </param-value>

  </context-param>

  <!-- 将Spring +Hibernate 配置信息加入到系统中 -->

  <filter>

   <filter-name>encoding</filter-name>

   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

   <init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

  </filter>

 <!-- 配置系统字符集 -->

<filter>

<filter-name>osivFilter</filter-name>

<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

</filter>  

<!-- OpenSessionInViewFilter解决Hibernate的Session的关闭与开启问题 -->

  <filter-mapping>

   <filter-name>encoding</filter-name>

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

  </filter-mapping>

  <filter-mapping>

   <filter-name>encoding</filter-name>

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

  </filter-mapping>

  <filter-mapping>

   <filter-name>encoding</filter-name>

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

  </filter-mapping>

  <filter-mapping>

   <filter-name>encoding</filter-name>

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

  </filter-mapping>

  <filter-mapping>

   <filter-name>encoding</filter-name>

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

  </filter-mapping> 

  <filter-mapping>

   <filter-name>encoding</filter-name>

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

  </filter-mapping>

  

  <filter-mapping>

   <filter-name>osivFilter</filter-name>

   <url-pattern>/*</url-pattern>

  </filter-mapping>

  

  <!--

Spring监听配置

auto config spring file infomation   -->

  <listener>

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

  </listener>

  <listener>

   <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

  </listener>

  

  <!-- session delay -->

  <session-config>

   <session-timeout>20</session-timeout>

  </session-config>

  </web-app>

 

到了这里Spring+Hibernate相关配置已经完成,下面我们进行第五步将FreeMarker加到Spring中。

第五步

配置FreeMarker信息,我们需要先做一些前期的准备。

首先增加数据国际化配置文件;我这里用的是message_zh_CN.properties, message_en_US.properties。我们在这两个文件中加入系统中要用到的相关文本信息。

我的文件目录及内容分别为

/WEB-INF/language/core/message_zh_CN.properties

exam.core.system.title=onlineexamsystem

/WEB-INF/language/core/message_en_US.properties

exam.core.system.title=在线考试系统


增加语系文件处理类;读取配置信息中当前的语系,设置本地化语言

package com.onlineexam.exam.core.common.interceptor;

 

import java.util.Locale;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.propertyeditors.LocaleEditor;

import org.springframework.web.servlet.LocaleResolver;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import org.springframework.web.servlet.support.RequestContextUtils;

 

 

public class LocaleLanguage extends HandlerInterceptorAdapter {

 

private static Logger logger = LoggerFactory.getLogger(LocaleLanguage.class);

/**

 * 本地化字符串在ModelMap中的名称

 */

public static final String LOCALE = "locale";

private String language;

 

public String getLanguage() {

return language;

}

 

public void setLanguage(String language) {

this.language = language;

}

@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

 

LocaleResolver localeResolver = RequestContextUtils

.getLocaleResolver(request);

if (localeResolver == null) {

throw new IllegalStateException(

"No LocaleResolver found: not in a DispatcherServlet request?");

}

logger.debug("当前语系为:{}",this.language);

String newLocale = this.language;

LocaleEditor localeEditor = new LocaleEditor();

localeEditor.setAsText(newLocale);

localeResolver.setLocale(request, response, (Locale) localeEditor

.getValue());

return true;

}

@Override

public void postHandle(HttpServletRequest request,

HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

LocaleResolver localeResolver = RequestContextUtils

.getLocaleResolver(request);

if (localeResolver == null) {

throw new IllegalStateException(

"No LocaleResolver found: not in a DispatcherServlet request?");

}

if (modelAndView != null) {

modelAndView.getModelMap().addAttribute(LOCALE,

localeResolver.resolveLocale(request).toString());

}

}

}


增加登录认证和权限认证拦截器类

com.onlineexam.exam.core.common.interceptor.AdminContextInterceptor

此类也必须继承org.springframework.web.servlet.handler.HandlerInterceptorAdapter类。

然后在此类中记录自己的登录信息和权限信息。


第六步

前面的准备工作已经完成了,我们需要配置我们的FreeMarker了。

在Spring中增加FreeMarker信息

新建Spring配置文件,我这里的配置文件名为

/WEB-INF/config/online-exam-manager.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:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

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

default-lazy-init="true">

<!-- 配置语系文件所在路径,实现国际化-->

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

<property name="cacheSeconds" value="-1"/>

<property name="basenames">

<list>

<value>/WEB-INF/language/core/message</value>

</list>

</property>

</bean>

<!--全局拦截器 进行本地化语系参数设置和用户登录及权限过滤

DefaultAnnotationHandlerMapping类是Spring3.1之前的

Spring3.1及3.1之后的版本建议使用

RequestMappingHandlerMapping

这个注解式处理器映射会扫描spring容器中的bean,发现bean实现类上拥有

@Controller@RequestMapping注解的bean,并将它们作为处理器。

 -->

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

<property name="interceptors">

<list>

<ref bean="adminContextInterceptor"/>

<ref bean="adminLocaleIntercept"/>

</list>

</property>

</bean>

<!--实现用户的登录认识和权限权证等信息 -->

<bean id="adminContextInterceptor" class="com.onlineexam.exam.core.common.interceptor.AdminContextInterceptor">

<property name="loginUrl" value="/login.do"/>

<property name="returnUrl" value="/index.do"/>

<property name="excludeUrls">

<list>

<value>/login.do</value>

<value>/logout.do</value>

</list>

</property>

</bean>

<!-- 实现语系文件的本地化 -->

<bean id="adminLocaleIntercept" class="com.onlineexam.exam.core.common.interceptor.LocaleLanguage">

<property name="language" value="zh_CN" />

</bean>

<!-- 语系文件本地化 可修改配置;如果不加这个参数,进行本地化修改时会报错 -->

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">

<property name="cookieName" value="clientlanguage"/>

<property name="cookieMaxAge" value="-1"/>

</bean>

<!-- FREEMARKER 视图解析

 -->

<bean id="freemarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

<property name="prefix" value="/exam/"/>

<property name="suffix" value=".html"/>

<property name="contentType" value="text/html; charset=UTF-8"/>

<property name="exposeRequestAttributes" value="false"/>

<property name="exposeSessionAttributes" value="false"/>

<property name="exposeSpringMacroHelpers" value="true"/>

</bean>

<!-- FreeMarker配置信息

用于配置FreeMarker路径 信息

系统会通过这个路径然后加视图解析的前缀和后缀组成一个完成的页面访问路径。访问tpl模版

另外此配置中的auto_import用于配置已经创建好的自定义FreeMarker模版文件。并给这个模版文件起一个别名

-->

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

<property name="templateLoaderPath" value="/WEB-INF"/>

<property name="freemarkerSettings">

<props>

<prop key="template_update_delay">0</prop>

<prop key="defaultEncoding">UTF-8</prop>

<prop key="url_escaping_charset">UTF-8</prop>

<prop key="locale">zh_CN</prop>

<prop key="boolean_format">true,false</prop>

<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>

<prop key="date_format">yyyy-MM-dd</prop>

<prop key="time_format">HH:mm:ss</prop>

<prop key="number_format">0.######</prop>

<prop key="whitespace_stripping">true</prop>

<prop key="auto_import">/tpl/spring.ftl as s</prop>

</props>

</property>

</bean>

<context:annotation-config/>

<!-- 将其他Bean信息引入-->

<import resource="online-exam-manager-action.xml" />

</beans>


 第七步

将FreeMarker配置信息加入到 系统中

在第六步时,我们已经将FreeMarker信息进行配置了,那怎么应该怎么在系统中使用他疑问当然是在Web.xml中进行配置了微笑

前面我们已经将Hibernate的配置信息加入到了Web.xml中。

这里我们需要配置一个Servlet,根据规则将相关的请求交给Spring处理。

如下:

 <servlet>

   <servlet-name>OnlineExamManager</servlet-name>

   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

   <init-param>

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

   <param-value>/WEB-INF/config/online-exam-manager.xml</param-value>

   </init-param>

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

  </servlet>

  

  <servlet-mapping>

   <servlet-name>OnlineExamManager</servlet-name>

   <url-pattern>/exam/manager/*</url-pattern>

  </servlet-mapping>

在这个配置中我们将所有/exam/manager/目录下面的所有请求都交给Spring处理。并在系统启动时加载/WEB-INF/config/online-exam-manager.xml配置文件;


到了这里我们所有的Spring+Hibernate+FreeMarker就已经配置完成了。剩下的就是需要我们建立一个FreeMarker模版进行访问测试了。

因此我配置的FreeMarker路径是在/WEB-INF目录下,而前缀又是exam。所以FreeMarker的模版路径就是在/WEB-INF/exam/ 目录下面,而且后缀必须为.html的文件。

所有我建立了一个 /WEB-INF/exam/index.html的模版文件。

内容如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

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

<title>${title!""}</title>

</head>

<body>

${title}

<table>

</body>

</html>


然后增加一个Spring的控制器,内容如下:

@RequestMapping(value="index.do")

public String test(HttpServletRequest request,ModelMap map){

map.put("title","系统");

return "index";

}


将此控制类加到online-exam-manager-action.xml配置文件中进行注入。

然后访问index.do即可

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值