有你在真好 的个人博客
社交软件开发3-服务器端-架构的搭建
阅读:2352 添加日期:2021/3/27 23:29:26 原文链接:https://www.toutiao.com/item/6289561834806575618/

欢迎订阅我的头条号:一点热

上一节,说到数据库的安装,讲述了我们要开发的这个软件“程序王”的功能,然后设计相应的数据库和表,我们这一节将为大家讲解一下服务器端的开发,我们这节的要点,将是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.

社交软件开发3-服务器端-架构的搭建

2、下一步,这里我们可以创建自己的包名,这里包名,一般按照包名为”com.公司名.项目名.模块名.……",比如我这里可以这样写,com.yeehot.programking,当然也可以不建立这么快,等进入项目后再创建,我这里等创建好再建立包名。

社交软件开发3-服务器端-架构的搭建

3、这里是将来访问的项目名字,比如是
http://localhost:8080/Yeehot-Program-King/ 就可以访问到该项目了。注意这里我们需要勾选上web.xml,因为等下我们启动项目需要。

社交软件开发3-服务器端-架构的搭建

4、Maven的一些配置信息。我们这里选择是standard JEE project structure的结构信息。这样方便我们看代码,其实Myeclise的也行,就看各人喜欢,我之前也一直用 myeclise jee project structure的

社交软件开发3-服务器端-架构的搭建

5、这里也是一些配置信息。我们直接点击next就OK了。

社交软件开发3-服务器端-架构的搭建

6、到这里,我们就生成了一个JAVA WEB 的项目了。但是我们现在还不能访问到我们的项目,我们还需要配置一些信息。以及下载一些包才可以访问的,现在的项目架构如下所示。

社交软件开发3-服务器端-架构的搭建

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的目录了。如下图

社交软件开发3-服务器端-架构的搭建

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,

社交软件开发3-服务器端-架构的搭建

接着,在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里面,如下图

社交软件开发3-服务器端-架构的搭建

社交软件开发3-服务器端-架构的搭建

这个时候再,点击运行tomcat,如下图

社交软件开发3-服务器端-架构的搭建

在浏览器输入:

http://localhost:8080/Yeehot-Program-King/user/info?username=yeehot

可以看到在屏幕输出了yeehot

今天就说到这里,欢迎关注我的头条号:一点热,未经同意,不得转载。

下一节我们继续分析通过Hibernate来进行数据访问,欢迎收看。

ICP备案号:苏ICP备14035786号-1 苏公网安备 32050502001014号