SpringMVC开发环境基本配置

SpringMVC开发环境基本配置


文章主要是写着自己用的,主要特点是配置文件比较完全,框架搭的比较好,适合有一定基础的人参考。

1,开发环境使用的开发环境以及基本技术:

开发环境:IntelliJ IDEA 13.1.2+Tomcat8.0+mysql

使用的基本技术:Maven+freemarker+Spring3.0(SpringMVC)+ mybatis+JRebel+Jquery+kendoUI

前台使用的是freemarker页面显示,控件用的是KendoUI,SpringMVC控制页面的显示和先关的业务请求,SpringMVC和MyBatis一起来操作数据库。

2,整个项目的模块分类

整个项目的结构大体如下(其中标红框框的部分是重点需要关注的):


2.1,首先是Maven的配置(pom.xml)Maven的安装可以按照基础教程安装就行了)

pom.xml可以将术需要用到的jdk之外的jar包都定义在这里面,当程序挪动到其他的机器,只需要安装了jdk,在首次打开这个工程的时候Maven工程都会去网上下载这个需要的jar包,这样便于工程的移动。并且在pom.xml中的jar包都有版本号,这就是说我们的Maven工程可以使用各自不同的jar包。下面是我的pom.xml的配置:其中配置好了springmvc,mybatis,mysql,freemarker,json,servlet.

<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.0http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

 <groupId>PMCS</groupId>

 <artifactId>PMCSSetting</artifactId>

 <packaging>pom</packaging>

 <version>1.0-SNAPSHOT</version>

   <modules>

       <module>../kendoUITest</module>

   </modules>

   <name>PMCSSetting Maven Webapp</name>

 <url>http://maven.apache.org</url>

   <properties>

       <org.springframework-version>3.1.3.RELEASE</org.springframework-version>

       <jackson.version>2.2.3</jackson.version>

   </properties>

 <dependencies>

     <!-- Json Parser -->

     <dependency>

         <groupId>com.fasterxml.jackson.core</groupId>

         <artifactId>jackson-core</artifactId>

         <version>${jackson.version}</version>

         <scope>provided</scope>

     </dependency>

 

     <dependency>

         <groupId>com.fasterxml.jackson.core</groupId>

         <artifactId>jackson-databind</artifactId>

         <version>${jackson.version}</version>

         <scope>provided</scope>

     </dependency>

 

     <dependency>

         <groupId>com.fasterxml.jackson.core</groupId>

         <artifactId>jackson-annotations</artifactId>

         <version>${jackson.version}</version>

         <scope>provided</scope>

     </dependency>

       <dependency>

           <groupId>junit</groupId>

           <artifactId>junit</artifactId>

           <version>3.8.1</version>

           <scope>test</scope>

       </dependency>

       <!-- Spring -->

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-context</artifactId>

           <version>${org.springframework-version}</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-webmvc</artifactId>

           <version>${org.springframework-version}</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-jdbc</artifactId>

           <version>${org.springframework-version}</version>

       </dependency>

       <!-- servlet jsp and jstl -->

       <dependency>

           <groupId>javax.servlet</groupId>

           <artifactId>javax.servlet-api</artifactId>

           <version>3.0.1</version>

           <scope>provided</scope>

       </dependency>

       <dependency>

           <groupId>javax.servlet.jsp</groupId>

           <artifactId>jsp-api</artifactId>

           <version>2.0</version>

           <scope>provided</scope>

       </dependency>

       <dependency>

           <groupId>javax.servlet</groupId>

           <artifactId>jstl</artifactId>

           <version>1.2</version>

           <scope>runtime</scope>

       </dependency>

       <dependency>

           <groupId>org.mybatis</groupId>

           <artifactId>mybatis</artifactId>

           <version>3.2.2</version>

       </dependency>

 

       <dependency>

           <groupId>org.mybatis</groupId>

           <artifactId>mybatis-spring</artifactId>

           <version>1.1.1</version>

       </dependency>

        <dependency>

           <groupId>mysql</groupId>

           <artifactId>mysql-connector-java</artifactId>

           <version>5.0.5</version>

       </dependency>

       <dependency>

           <groupId>commons-dbcp</groupId>

           <artifactId>commons-dbcp</artifactId>

           <version>1.2.2</version>

       </dependency>

       <dependency>

           <groupId>org.freemarker</groupId>

           <artifactId>freemarker</artifactId>

           <version>2.3.14</version>

       </dependency>

     <dependency>

         <groupId>org.json</groupId>

         <artifactId>json</artifactId>

         <version>20090211</version>

         <scope>provided</scope>

     </dependency>

 

 </dependencies>

 <build>

   <finalName>PMCSSetting</finalName>

 </build>

</project>

2.2,web.xml基本配置

web.xml是网站的基本配置。其中DispatcherServlet提供了Spring WebMVC的集中访问点。

servlet-mapping指定哪些类型的请求交给SpringWeb MVC来处理。contextConfigLocation指定Spring Web MVC的基本配置。

下面是web.xml配置:

<!DOCTYPE web-app PUBLIC

 "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"

 "http://java.sun.com/dtd/web-app_2_3.dtd">

 

<web-app>

 <display-name>Archetype Created WebApplication</display-name>

   <servlet>

       <servlet-name>appServlet</servlet-name>

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

       <init-param>

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

           <param-value>/WEB-INF/config/spring-context.xml</param-value>

       </init-param>

       <init-param>

           <param-name>ContentType</param-name>

           <param-value>text/html; charset=UTF-8</param-value>

       </init-param>

       <init-param>

           <param-name>default_encoding</param-name>

           <param-value>utf-8</param-value>

       </init-param>

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

   </servlet>

   <servlet-mapping>

       <servlet-name>appServlet</servlet-name>

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

   </servlet-mapping>

</web-app>

2.3,Spring Web MVC基本配置

spring-context.xml是springmvc的基本配置

首先说下src文件夹下每个文件的作用:pojo下面是一些实体类;web下面是控制实际的请求和页面实体或者数据的对用关系;map用于mybatis的数据库操作;inter用于每个请求用户的登录控制(检查是否已经登录);util里面放的是一些常用的或者常规的方法:SessionUtil中放的是登录session,JsonUtil中国放的是Json串拼接的基本方法,SpringContextUtil:实现了ApplicationContextAware,可以很方便的获取Bean(不用每次都去读取文件)。


接下来是spring-context.xml的配置说明:

component-scan是方式用来扫描该包以及其子包下的@Controller注解的类,纳入spring管理,而同时spring容器也需要使用这种方式扫描包含@Service@Components@Required@Autowired等注解用来管理bean和完成DIScansthe classpath of this application for @Components to deploy as beans

annotation-driven用来确认相关的控制器(Configuresthe @Controller programming mode)

<mvc:resourcesmapping="res/css/**" location="/res/css/"/>:用来将先关的文件包含进网站(样式文件,kendoui,jquery文件)

viewResolver:请求的view页面以fremarker来解析。

freemarkerConfig:freemarker的基本配置

dataSource:mysql的基本配置。

sqlSessionFactory:mybatis的数据库配置。

<beanclass="org.mybatis.spring.mapper.MapperFactoryBean"id="userMapper">:mybatis查询处的数据和实体类之间的对应关系

<beanclass="pmcssetting.util.SpringContextUtil"scope="singleton" id="springContextUtil"/>:实现了ApplicationContextAware,可以很方便的获取Bean。

下面是spring-context.xml完整配置:

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

<beansxmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:context="http://www.springframework.org/schema/context"

      xmlns:mvc="http://www.springframework.org/schema/mvc"

      xsi:schemaLocation="http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd

       http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd

      http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd">

   <!-- Scans the classpath of this application for @Components todeploy as beans -->

  <context:component-scan base-package="pmcssetting.web"/>

   <!-- Configures the @Controller programming model -->

  <mvc:annotation-driven />

   <mvc:resources mapping="res/css/**" location="/res/css/"/>

   <mvc:resources mapping="res/js/**"location="/res/js/"/>

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

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

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

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

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

       <property name="requestContextAttribute"value="request"/>

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

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

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

   </bean>

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

       <property name="templateLoaderPath">

           <value>/WEB-INF/ftl/</value>

       </property>

       <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性 -->

            <props>

                <propkey="template_update_delay">5</prop><!--刷新模板的周期,单位为秒-->

                <propkey="default_encoding">UTF-8</prop><!--模板的编码格式-->

                <propkey="locale">UTF-8</prop><!-- 本地化设置 -->

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

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

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

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

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

                <propkey="tag_syntax">auto_detect</prop>

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

           </props>

       </property>

   </bean>

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

       <property name="driverClassName"value="com.mysql.jdbc.Driver"></property>

       <property name="url"value="jdbc:mysql://192.168.1.207:3306/pqss0331?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull"></property>

       <property name="username"value="root"></property>

       <property name="password"value="123456"></property>

       <property name="maxActive"value="100"></property>

       <property name="maxIdle"value="30"></property>

        <property name="maxWait"value="500"></property>

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

   </bean>

   <bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="userMapper">

       <property name="mapperInterface"value="pmcssetting.map.UserMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_OperatorMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_OperatorMapper"/>

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

    </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_RightMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_RightMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_RoleMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_RoleMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_ManufactureMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_ManufactureMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_LineMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_LineMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_MeterMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_MeterMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_StationMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_StationMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_SubstationMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_SubstationMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_MeterTypeMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_MeterTypeMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_MeasureTypeMapper">

   <property name="mapperInterface"value="pmcssetting.map.WD_MeasureTypeMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_DepartmentMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_DepartmentMapper"/>

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

   </bean>

   <bean class="org.mybatis.spring.mapper.MapperFactoryBean"id="WD_CircuitMapper">

       <property name="mapperInterface"value="pmcssetting.map.WD_CircuitMapper"/>

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

   </bean>

   <bean class="pmcssetting.util.SpringContextUtil"scope="singleton" id="springContextUtil"/>

</beans>

 

3,具体实现过程的详细讲解。

下面以页面请求数据显示kendoGrid为例讲解下:

http://localhost:8080/Purview/RoleInfos,这个方法请求到的是后台的WD_RoleController的

   @RequestMapping(value = "", method = {RequestMethod.GET})

   public ModelAndView index(ModelAndView mv) {

       mv.setViewName("Purview/RoleInfos");

       return mv;

    }

这个方法

kendo ui 的DataSource 的read读取到的数据是:

@RequestMapping(value = "/read",method = RequestMethod.GET, produces ="application/json;charset=UTF-8")

    @ResponseBody

   public String read(HttpServletRequest request) {

       //SELECT  numRoleID,varName fromWD_Role

       String prefix = request.getParameter("callback");

       WD_RoleMapper wd_roleMapper =(WD_RoleMapper)SpringContextUtil.getBean("WD_RoleMapper");

       String string="";

       for (WD_Role right : wd_roleMapper.getAllRoles()) {

           string+="{\"numRoleID\":\""+right.getNumRoleID()+"\",\"varName\":\""+right.getVarName()+"\"},";

       }

       return JsonUtil.getJSONP(prefix, string);

    }

这里是把数据拼接为jsonp格式让kendoGrid来处理。

下面附上完整得ftl代码和类的代码:

前台ftl代码:

<!DOCTYPE html>

<html>

<head>

   <title>角色管理</title>

<#include"../inc/reffer.ftl">

</head>

<body>

<div id="content">

   <h3>角色管理</h3>

 

   <div id="grid"></div>

</div>

</body>

</html>

<script>

   $(document).ready(function () {

       var url = "/Purview/RoleInfos";

       var ds = new kendo.data.DataSource({

           transport: {

                read: {

                    url: url +"/read",

                    dataType: "jsonp"

                },

                create: {

                    url: url +"/create",

                    dataType: "jsonp"

                },

                update: {

                    url: url +"/update",

                    dataType: "jsonp"

                },

                destroy: {

                    url: url +"/delete",

                    dataType: "jsonp"

                },

                parameterMap: function(options, operation) {

                    if (operation !=="read" && options.models) {

                        return {models:kendo.stringify(options.models)};

                    }

                }

           },

           batch: true,

           pageSize: 23,

           schema: {

                model: {

                    id: "numRoleID",

                    fields: {

                        numRoleID: { editable:false, nullable: true },

                        varName: { editable:true, nullable: true }

                   }

                }

           }

       });

       //SELECT  numRoleID,varName fromWD_Role

       $("#grid").kendoGrid({

           dataSource: ds,

           pageable: true,

           toolbar: ["create"],

           columns: [

               { field:"numRoleID", title: "numRoleID", width: "30px" },

                { field: "varName",title: "varName", width: "30px" },

                { command: ["edit","destroy"], title: "功能区", width:"30px"}

           ],

           editable: "popup"

       });

   });

 

</script>

 

后台类的代码:

package pmcssetting.web;

 

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.RequestMethod;

importorg.springframework.web.bind.annotation.ResponseBody;

importorg.springframework.web.servlet.ModelAndView;

import pmcssetting.map.WD_OperatorMapper;

import pmcssetting.map.WD_RoleMapper;

import pmcssetting.pojo.WD_Operator;

import pmcssetting.pojo.WD_Role;

import pmcssetting.util.JsonUtil;

import pmcssetting.util.SessionUtil;

import pmcssetting.util.SpringContextUtil;

 

importjavax.servlet.http.HttpServletRequest;

 

/**

 *Created by luozl on 2014/7/3.

 */

@Controller

@RequestMapping(value ="/Purview/RoleInfos")

public class WD_RoleController {

   @RequestMapping(value = "", method = {RequestMethod.GET})

   public ModelAndView index(ModelAndView mv) {

       mv.setViewName("Purview/RoleInfos");

       return mv;

    }

   @RequestMapping(value = "/read", method = RequestMethod.GET,produces = "application/json;charset=UTF-8")

   @ResponseBody

   public String read(HttpServletRequest request) {

       //SELECT  numRoleID,varName fromWD_Role

       String prefix = request.getParameter("callback");

       WD_RoleMapper wd_roleMapper =(WD_RoleMapper)SpringContextUtil.getBean("WD_RoleMapper");

       String string="";

       for (WD_Role right : wd_roleMapper.getAllRoles()) {

           string+="{\"numRoleID\":\""+right.getNumRoleID()+"\",\"varName\":\""+right.getVarName()+"\"},";

       }

       return JsonUtil.getJSONP(prefix, string);

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值