欢迎订阅我的头条号:一点热
上一节,说到数据库的安装,讲述了我们要开发的这个软件“程序王”的功能,然后设计相应的数据库和表,我们这一节将为大家讲解一下服务器端的开发,我们这节的要点,将是spring MVC+hibernate+resetful的搭建与测试。
开发前言:
我们这里的服务器开发,主要使用了java 语言,开发工具是MYECLIPSE,web 框架是,Spring+spring MVC+hibernate,
开发准备:
1、Mysql的安装,数据库创建
2、myeclise的安装
3、Java环境的搭建。
开发环境:
MAC+myeclipse+Spring+spring mvc+hibernate4+maven
1、创建项目,打开myelipse,新建->创建一个JavaEE Web project,输入我们的项目名字,Yeehot-Program-King,名字我随便起的,哈哈,程序王。不用轻视我们程序员。对于Java的一些环境,我使用Java1.7,此外要注意的一点是,由于我们需要使用maven来管理项目的一些库,所以我们要开启maven的支持,在下图勾上add maven support.
2、下一步,这里我们可以创建自己的包名,这里包名,一般按照包名为”com.公司名.项目名.模块名.……",比如我这里可以这样写,com.yeehot.programking,当然也可以不建立这么快,等进入项目后再创建,我这里等创建好再建立包名。
3、这里是将来访问的项目名字,比如是
http://localhost:8080/Yeehot-Program-King/ 就可以访问到该项目了。注意这里我们需要勾选上web.xml,因为等下我们启动项目需要。
4、Maven的一些配置信息。我们这里选择是standard JEE project structure的结构信息。这样方便我们看代码,其实Myeclise的也行,就看各人喜欢,我之前也一直用 myeclise jee project structure的
5、这里也是一些配置信息。我们直接点击next就OK了。
6、到这里,我们就生成了一个JAVA WEB 的项目了。但是我们现在还不能访问到我们的项目,我们还需要配置一些信息。以及下载一些包才可以访问的,现在的项目架构如下所示。
7、配置pom.xml,pom.xml这个就是我们maven的管理的一个配置信息。由于这里太多包要下载,我就不一一解说,大家可以看一下注释。完整的pom.xml如下:
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Yeehot-Program-King</groupId>
<artifactId>Yeehot-Program-King</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Yeehot-Program-King</name>
<description/>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<yeehot.com.spring.version>4.1.6.RELEASE</yeehot.com.spring.version>
<yeehot.com.mysql.connector.version>5.1.34</yeehot.com.mysql.connector.version>
<yeehot.com.hibernate.version>4.3.10.Final</yeehot.com.hibernate.version>
<yeehot.com.fasterxml.jackson.version>2.5.4</yeehot.com.fasterxml.jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.2</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
<!-- hibernate4 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${yeehot.com.hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${yeehot.com.hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${yeehot.com.hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${yeehot.com.spring.version}</version>
</dependency>
<!-- http://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.19</version>
</dependency>
<!-- fastJson json数组有关的 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.26</version>
</dependency>
<!-- Spring AOP 的包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.1</version>
</dependency>
<!-- 使用 Jackson 把 Java 对象转换成 JSON 字串 -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.11</version>
</dependency>
<!-- mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${yeehot.com.mysql.connector.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<version>3.1</version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
点击保存,这个时候可能会在下载,这个就看配置和网络情况了。完成后大家可以看到有一些.jar包已经在maven的目录了。如下图
8、添加hibernate的支持,在src/main/java目录下添加hibernate.cfg.xml
<?xmlversion='1.0'encoding='UTF-8'?>
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
</session-factory>
</hibernate-configuration>
9、spring的配置
创建applicationContext.xml,在src/main/webapp/WEB-INF目录下创建applicationContext.xml,
接着,在applicationContext.xml,输入如下的配置信息。
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ">
<!-- Activates various annotations to be detected in bean classes -->
<context:annotation-config/>
<!-- 扫描一些注解 -->
<context:component-scanbase-package="com.yeehot.*"/>
<!-- 数据库的一些配置 -->
<importresource="classpath*:/config/db-configuration.xml"/>
</beans>
10、创建数据库配置文件。
在src/main/resources目录下创建一个config的目录,创建一个数据库配置文件dbconfig.properties,
在配置文件输入,如下的信息。这些信息,基本就是连接地址,账号和密码,大家自行输入
url:jdbc:mysql://192.168.1.12:3306/yeehotdb?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
driverClassName:com.mysql.jdbc.Driver
username:root
password:yeehot
filters:stat
maxActive:20
initialSize:1
maxWait:60000
minIdle:10
maxIdle:15
timeBetweenEvictionRunsMillis:60000
minEvictableIdleTimeMillis:300000
validationQuery:SELECT 'x'
testWhileIdle:true
testOnBorrow:false
testOnReturn:false
maxOpenPreparedStatements:20
removeAbandoned:true
removeAbandonedTimeout:1800
logAbandoned:true
11、spring管理文件
在src/main/resources/config目录下创建一个db-configuration.xml,配置内容如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
"
>
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<propertyname="location">
<value>classpath:config/dbconfig.properties</value>
</property>
</bean>
<!-- 阿里 druid数据库连接池 -->
<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close">
<!-- 数据库基本信息配置 -->
<property name="url" value="${url}" />
<propertyname="username"value="${username}"/>
<propertyname="password"value="${password}"/>
<propertyname="driverClassName"value="${driverClassName}"/>
<propertyname="filters"value="${filters}"/>
<!-- 最大并发连接数 -->
<propertyname="maxActive"value="${maxActive}"/>
<!-- 初始化连接数量 -->
<propertyname="initialSize"value="${initialSize}"/>
<!-- 配置获取连接等待超时的时间 -->
<propertyname="maxWait"value="${maxWait}"/>
<!-- 最小空闲连接数 -->
<propertyname="minIdle"value="${minIdle}"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<propertyname="timeBetweenEvictionRunsMillis"value="${timeBetweenEvictionRunsMillis}"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<propertyname="minEvictableIdleTimeMillis"value="${minEvictableIdleTimeMillis}"/>
<propertyname="validationQuery"value="${validationQuery}"/>
<propertyname="testWhileIdle"value="${testWhileIdle}"/>
<propertyname="testOnBorrow"value="${testOnBorrow}"/>
<propertyname="testOnReturn"value="${testOnReturn}"/>
<propertyname="maxOpenPreparedStatements"value="${maxOpenPreparedStatements}"/>
<!-- 打开removeAbandoned功能 -->
<propertyname="removeAbandoned"value="${removeAbandoned}"/>
<!-- 1800秒,也就是30分钟 -->
<propertyname="removeAbandonedTimeout"value="${removeAbandonedTimeout}"/>
<!-- 关闭abanded连接时输出错误日志 -->
<propertyname="logAbandoned"value="${logAbandoned}"/>
</bean>
<beanid="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
<aop:configexpose-proxy="true">
<!-- 只对业务逻辑层实施事务 -->
<aop:pointcutid="txPointcut"expression="execution(* com.yeehot.service.*.*(..))"/>
<aop:advisoradvice-ref="txAdvice"pointcut-ref="txPointcut"/>
</aop:config>
<tx:annotation-driventransaction-manager="transactionManager"/>
<beanid="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<propertyname="transactionManager"ref="transactionManager"/>
<propertyname="transactionAttributeSource">
<value>
</value>
</property>
</bean>
<tx:adviceid="txAdvice"transaction-manager="transactionManager">
<tx:attributes>
<tx:methodname="save*"propagation="REQUIRED"/>
<tx:methodname="add*"propagation="REQUIRED"/>
<tx:methodname="create*"propagation="REQUIRED"/>
<tx:methodname="insert*"propagation="REQUIRED"/>
<tx:methodname="update*"propagation="REQUIRED"/>
<tx:methodname="merge*"propagation="REQUIRED"/>
<tx:methodname="del*"propagation="REQUIRED"/>
<tx:methodname="remove*"propagation="REQUIRED"/>
<tx:methodname="put*"propagation="REQUIRED"/>
<tx:methodname="use*"propagation="REQUIRED"/>
<!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->
<tx:methodname="get*"propagation="REQUIRED"read-only="true"/>
<tx:methodname="count*"propagation="REQUIRED"read-only="true"/>
<tx:methodname="find*"propagation="REQUIRED"read-only="true"/>
<tx:methodname="list*"propagation="REQUIRED"read-only="true"/>
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<beanid="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<propertyname="dataSource"ref="dataSource"/>
<propertyname="configLocation"value="classpath:hibernate.cfg.xml">
</property>
</bean>
</beans>
12、配置springMVC
添加spring-mvc.xml文件,src/main/webapp/WEB-INF目录下创建spring-mvc.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射-->
<mvc:annotation-driven/>
<!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->
<context:component-scanbase-package="com.yeehot.*"/>
<!-- 以下为SpringMVC配置 -->
<mvc:annotation-driven>
<!-- 返回json数据,@response使用 -->
<mvc:message-convertersregister-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<propertyname="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<propertyname="prefix"value="/WEB-INF/views"/>
<propertyname="suffix"value=".jsp"/>
</bean>
</beans>
13、配置log4j
在src/main/java目录下创建一个log4j.properties。
log4j.rootLogger=INFO,A1,R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target=System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%c]%m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=sshf.log
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.Threshold=ALL
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
14、配置web.xml,刚刚我们说到要增加一个web.xml的。
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID"version="3.1">
<display-name>Yeehot-Program-King</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- openSessionInView配置 作用是延迟session关闭到view层 -->
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 监听servletContext,启动contextConfigLocation中的spring配置信息 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止spring内存溢出监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<servlet>
<description>spring mvcservlet</description>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 此处配置的是SpringMVC的配置文件 -->
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>Yeehot-Program-King.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 配置session超时时间,单位分钟 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
至此,我们基本完成了整个项目的配置了。我们创建一个controller来看看网页上展示的效果
我们在src/main/java目录下创建我们的包,com.yeehot.controller。然后创建一个类class,名字为
InfoController,代码如下,主要是用于展示用户输入一个名字,在网页上显示相应的名字
package com.yeehot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/user")
public class InfoController {
@ResponseBody
@RequestMapping("/info")
public String showUserInfo( String username){
return username;
}
}
把工程添加到tomcat里面,如下图
这个时候再,点击运行tomcat,如下图
在浏览器输入:
http://localhost:8080/Yeehot-Program-King/user/info?username=yeehot
可以看到在屏幕输出了yeehot
今天就说到这里,欢迎关注我的头条号:一点热,未经同意,不得转载。
下一节我们继续分析通过Hibernate来进行数据访问,欢迎收看。
