使用Spring MVC3和Hibernate4做网站的一些记录
2015-04-12 16:17
176 查看
好长时间都没更新博客了,主要是因为比较忙,先是写毕业论文,写了28K个字,纯手打,花了好长时间,回报就是论文的重复率为0%。论文写完后就着手做东西了,这次做的也是一个openflow相关的程序,和以往不同的是,原来做的程序都是达到功能就行,参数配置一个各种操作基本上都是通过手动改配置文件,甚至是改代码完成的。这次想做的人性化点,于是决定做一个网站,通过web界面配置控制器程序。闲话说完了,下边开始进入正题。
现在一提做网站,就是MVC、三层架构等一大堆乱七八糟的东西,网上一搜一大堆,而且关于Spring MVC3和Hibernate4整合的配置文件网上也多的是。我在这里就不做多余的介绍了,只是记录一下在做网站过程中遇到的一些问题,如果你也恰巧碰到了这些问题,只希望可以提供些许的帮助。
从开始就没准备自己为网站写界面,一方面是因为没人美工,自己做出的页面太难看,另一方面,虽然我会写CSS,可是我实在是太懒了,不想写。因此选择了使用ExtJS,它有各种内置的UI组件,因为ExtJS在前端提供了各种各样的功能,所以服务器只需要返回json数据就行,也就是说在这个网站中Spring MVC所有控制的方法均使用了@ResponseBody注解,没有使用任何JSP文件。
一、首先是web.xml,这个文件中主要有两项配置。
1、配置servlet,让Spring MVC接管用户请求:
2、配置一个过滤器,该过滤器的作用是解决使用POST提交中文时的乱码问题。
1、告诉Spring,这个项目是基于注解配置的,以及需要扫描的java包
2、引入一个properties文件,该文件中存有数据库的配置信息
三、hibernate.cfg.xml文件和jdbc.properties文件
新手做网站都是先上网上搜配置文件,然后直接拿来用,然后发现不能用,就上网搜解决方案,一个一个的解决。我也是这样,上面那些配置也是从网上下的,经过多次修改才能正常工作。下面说一下我都遇到了哪些问题。
1、使用@ResponseBody注解直接输出的json数据会转义 比如说你想输出{name:"zhangsan"},你在控制器中直接返回这个字符串,那么客户端接收到的数据就成了"{name:"zhangsan"}",使用ExtJS也可以处理这些数据,但是会多个步骤,解决方案就是添加在配置文件中,然后返回一个Map,在map中添加一条key为name、value为zhangsan的条目。
Google一般会说在配置文件中加入,如果你照做了就会出现java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException异常,因为这个是针对jackson1.x的。
2、No Session found for current thread和createQuery is not valid without active transaction 刚开始没遇到这个问题,domain、dao、service里都只有一个类,一切工作正常,然后又添加了一个doamin,以及相应的dao、service,就出现No Session found for current thread异常了,Google给出的答案是在hibernate的配置文件中加入thread,照着做了以后就出现createQuery
is not valid without active transaction异常了。这个问题最终使用了妥协的方案:使用openSession()而不是getCurrentSession()获取Session对象。
现在一提做网站,就是MVC、三层架构等一大堆乱七八糟的东西,网上一搜一大堆,而且关于Spring MVC3和Hibernate4整合的配置文件网上也多的是。我在这里就不做多余的介绍了,只是记录一下在做网站过程中遇到的一些问题,如果你也恰巧碰到了这些问题,只希望可以提供些许的帮助。
从开始就没准备自己为网站写界面,一方面是因为没人美工,自己做出的页面太难看,另一方面,虽然我会写CSS,可是我实在是太懒了,不想写。因此选择了使用ExtJS,它有各种内置的UI组件,因为ExtJS在前端提供了各种各样的功能,所以服务器只需要返回json数据就行,也就是说在这个网站中Spring MVC所有控制的方法均使用了@ResponseBody注解,没有使用任何JSP文件。
一、首先是web.xml,这个文件中主要有两项配置。
1、配置servlet,让Spring MVC接管用户请求:
<servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
2、配置一个过滤器,该过滤器的作用是解决使用POST提交中文时的乱码问题。
<filter> <filter-name>CharacterEncodingFilter</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-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>二、然后是spring-servlet.xml文件,这个文件的配置比较多。
1、告诉Spring,这个项目是基于注解配置的,以及需要扫描的java包
<context:annotation-config /> <context:component-scan base-package="com.lamoop.sdnweb" />
2、引入一个properties文件,该文件中存有数据库的配置信息
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="/WEB-INF/jdbc.properties" />3、配置dataSource
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" />4、配置sessionFactory
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${jdbc.dialect}</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean>5、配置事务管理
<tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean>6、配置一个拦截器,该拦截器的作用是检查用户的登录权限
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <ref bean="loginInterceptor" /> </list> </property> </bean> <bean id="loginInterceptor" class="com.lamoop.sdnweb.interceptor.LoginInterceptor"> <property name="matchURL" value=".*/sdn/.*\.do" /> </bean>7、配置转换器,该配置有两个作用,把控制器返回的内容使用Jackson转化为json数据,且使用UTF-8编码
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <list> <bean class = "org.springframework.http.converter.StringHttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list> </property> </bean>
三、hibernate.cfg.xml文件和jdbc.properties文件
<hibernate-configuration> <session-factory> <mapping class="com.lamoop.sdnweb.domain.Server" /> <mapping class="com.lamoop.sdnweb.domain.Client" /> </session-factory> </hibernate-configuration>
jdbc.driverClassName= com.mysql.jdbc.Driver jdbc.dialect=org.hibernate.dialect.MySQL5Dialect jdbc.databaseurl=jdbc:mysql://localhost:3306/sdnweb?useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=123456
新手做网站都是先上网上搜配置文件,然后直接拿来用,然后发现不能用,就上网搜解决方案,一个一个的解决。我也是这样,上面那些配置也是从网上下的,经过多次修改才能正常工作。下面说一下我都遇到了哪些问题。
1、使用@ResponseBody注解直接输出的json数据会转义 比如说你想输出{name:"zhangsan"},你在控制器中直接返回这个字符串,那么客户端接收到的数据就成了"{name:"zhangsan"}",使用ExtJS也可以处理这些数据,但是会多个步骤,解决方案就是添加在配置文件中,然后返回一个Map,在map中添加一条key为name、value为zhangsan的条目。
Google一般会说在配置文件中加入,如果你照做了就会出现java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException异常,因为这个是针对jackson1.x的。
2、No Session found for current thread和createQuery is not valid without active transaction 刚开始没遇到这个问题,domain、dao、service里都只有一个类,一切工作正常,然后又添加了一个doamin,以及相应的dao、service,就出现No Session found for current thread异常了,Google给出的答案是在hibernate的配置文件中加入thread,照着做了以后就出现createQuery
is not valid without active transaction异常了。这个问题最终使用了妥协的方案:使用openSession()而不是getCurrentSession()获取Session对象。
相关文章推荐
- 使用XML记录数据的一些体会
- 在vs中使用ZedGraph控件的一些记录
- [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题
- [记录]在Linux中Oracle安装成功后,首次启动使用时,会出现的一些问题总结和解决办法
- 在vs中使用ZedGraph控件的一些记录
- VS2005 && MasterPage && Form 的一些相关使用记录
- fedora的一些使用记录(二)
- 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现。
- spring使用的一些记录
- 使用vc发现的一些问题记录
- VS.Net中使用ZedGraph控件的一些记录
- 记录一些BCB6的使用心得
- 初学eclipse,记录一些有关eclipse IDE使用的东东
- [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题
- 记录:树形控件的一些使用方法(和sql server 结合显示)
- GridView使用一些记录
- 在vs中使用ZedGraph控件的一些记录
- Linux命令的一些记录(四):rpm命令的一些使用
- MS chart 使用的一些记录
- fedora的一些使用记录(一)