搭建springmvc项目(一)——基础搭建

搭建springmvc项目(一)——基础搭建

在此声明,我参考了博客搭建项目,如果想要查看原文,请点链接:
项目搭建系列之一:使用Maven搭建SpringMVC项目

跟着博主的步骤搭建项目的时候,有些细节做了适应性修改。
并对一些可能出现的问题,进行了记录。

项目源码我已经上传到GitHub:springbasic

概述

整体架构为SpringMVC+Spring+Hibernate+Maven。
实现高复用的最基础架构。

一、创建一个maven项目(war)

项目目录结构如下:
这里写图片描述

1、配置web.xml
这里写图片描述
web.xml中内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";>

      <!-- 配置web.xml,使其具有springmvc特性,主要配置两处,一个是ContextLoaderListener,
      一个是DispatcherServlet -->
    <context-param>
     <param-name>contextConfigLocation</param-name>
         <param-value>classpath*:applicationContext.xml</param-value>
    </context-param>
     <!-- 配置ContextLoaderListener表示,该工程要以spring的方式启动。
     启动时会默认在/WEB-INF目录下查找applicationContext.xml
     作为spring容器的配置文件,该文件里可以初始化一些bean -->
     <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>

     <!-- 字符集过滤器 -->
     <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>
     </filter>

     <filter-mapping>
          <filter-name>encodingFilter</filter-name>
          <url-pattern>/*</url-pattern>
     </filter-mapping>


      <!-- spring mvc 配置 -->
    <!-- 配置DispatcherServlet表示,该工程将采用springmvc的方式。
    启动时也会默认在/WEB-INF目录下查找XXX-servlet.xml作为配置文件,
        XXX就是DispatcherServlet的名字,该文件中将配置两项重要的mvc特性:
        HandlerMapping,负责为DispatcherServlet这个前端控制器的请求查找Controller;
        ViewResolver,负责为DispatcherServlet查找ModelAndView的视图解析器。
        此处使用指定的配置文件spring-mvc.xml -->

     <servlet>
          <servlet-name>contacts</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <init-param>
               <param-name>contextConfigLocation</param-name>
               <param-value>classpath*:/spring-mvc.xml</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
          <servlet-name>contacts</servlet-name>
          <url-pattern>/</url-pattern>
     </servlet-mapping>

     <welcome-file-list>
          <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>

     </web-app>

2、配置applicationContext.xml
这里写图片描述

applicationContext.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans 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";
xmlns:p="http://www.springframework.org/schema/p";
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/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd";>

     <!-- bean definitions here -->
     <context:component-scan base-package="com.mocha"/>

     <!-- 配置读取外部配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close" p:driverClassName="${jdbc.driverClassName}"
        p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" />
    <context:annotation-config /> <!-- 此行语句使得resource autowired 等四个注解可以使用 -->
      <!-- 实例化jdbcTemplate,同时注入数据源 -->
      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
       p:dataSource-ref="dataSource"/>

       <!-- 配置事务管理器 -->
       <bean id="txManager"
       class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"/>
       </bean>
       <!-- 事务扫描开始(开启@Tranctional) -->
       <tx:annotation-driven transaction-manager="txManager"/>

</beans>

3、配置spring-mvc.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:p="http://www.springframework.org/schema/p";
xmlns:context="http://www.springframework.org/schema/context";
xmlns:mvc="http://www.springframework.org/schema/mvc";
xsi:schemaLocation="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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd";
default-lazy-init="true">
     <!-- 启动事务添加配置 -->
     <context:component-scan base-package="com.mocha">
             <!-- 排除扫描service标签 -->
          <context:exclude-filter type="annotation"
          expression="org.springframework.stereotype.Service"/>
     </context:component-scan>

     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
           <!-- 注册JASON转换器 -->
           <property name="messageConverters">
               <list>
                    <ref bean="mappingJacksonHttpMessageConverter"/>
                    <ref bean="utf8StringHttpMessageConverter"/>
               </list>
           </property>
     </bean>

     <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
          <property name="supportedMediaTypes">
              <list>
                   <value>text/plain;charset=UTF-8</value>
                   <value>text/html;charset=UTF-8</value>
                   <value>application/json;charset=UTF-8</value>
              </list>
          </property>
     </bean>
     <bean id="utf8StringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
          <property name="supportedMediaTypes">
              <list>
                   <value>text/plain;charset=UTF-8</value>
                   <value>text/html;charset=UTF-8</value>
                   <value>application/json;charset=UTF-8</value>
              </list>
          </property>
     </bean>   

     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
          <property name="prefix" value="/WEB-INF/pages/"/>
          <property name="suffix" value=".jsp"/>
     </bean>

     <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
         <!-- 当配置了<mvc:annotation-driven/>后,
         会自动加载org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping和
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter,
所以如果显示的配置则需去掉配置<mvc:annotation-driven/> -->

    <!--<mvc:annotation-driven/>-->
</beans>

二、添加依赖包

pom.xml

<project xmlns="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/xsd/maven-4.0.0.xsd";>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mocha.springbasic</groupId>
  <artifactId>spring-basic</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>springbasic</name>
   <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>3.1.2.RELEASE</spring.version>
    </properties>


  <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- spring begin -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- spring end -->
        <!-- web jar -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- jackson jar -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-jaxrs</artifactId>
            <version>1.9.11</version>
        </dependency>
        <!-- commons jar -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.0</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.3</version>
        </dependency>
        <dependency>
            <groupId>commons-chain</groupId>
            <artifactId>commons-chain</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-math3</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-digester3</artifactId>
            <version>3.2</version>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- jstl jar -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <!-- 日志相关 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <!-- 验证码kaptcha -->
        <dependency>
            <groupId>com.google.code</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.31</version>
        </dependency>
    </dependencies>
      <build>
     <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.5.1</version>
          <configuration>
               <source>${maven.compiler.source}</source>
               <target>${maven.compiler.target}</target>
               <encoding>${project.build.sourceEncoding}</encoding>
           </configuration>
    </plugin>

               <plugin>
                   <groupId>org.eclipse.jetty</groupId>
                   <artifactId>jetty-maven-plugin</artifactId>
                   <version>9.4.5.v20170502</version>
                <configuration>
                   <!--  <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory> -->
                    <scanIntervalSeconds>3</scanIntervalSeconds>
                   <!--  <contextPath>/jetty</contextPath> -->
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8080</port>
                        </connector>
                    </connectors>
                    <webApp>
                             <contextPath>/spring-basic</contextPath>
                             <overrideDescriptor>src/main/webapp/WEB-INF/web.xml</overrideDescriptor>
                        </webApp>
                </configuration>
            </plugin>
              </plugins>
        <finalName>spring-basic</finalName>
    </build>
</project>

三、Hibernate的配置

1、jdbc.properties

#Mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/mocha?characterEncoding\=utf-8
jdbc.username=root
jdbc.password=123456

2、log4j.properties

log4j.rootCategory=info, stdout, fileout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{mm\:ss.SSS} %-5p [%F\:%L]%x %m%n
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=log4j.log
log4j.appender.fileout.MaxFileSize=1024KB
log4j.appender.fileout.MaxBackupIndex=10
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=%d{mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n
# Control logging for other open source packages
log4j.logger.com.opensymphony=debug
log4j.logger.org.apache.commons=debug
log4j.logger.org.springframework=debug

3、出现了小问题
maven update下载jar包之后,出现了一个小问题,在spring-mvc.xml
这里写图片描述

MappingJacksonHttpMessageConverter
上面这个是用于maven3.x的
但是我这个项目时maven4.x的,所以应该改为MappingJackson2HttpMessageConverter

<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
          <property name="supportedMediaTypes">
              <list>
                   <value>text/plain;charset=UTF-8</value>
                   <value>text/html;charset=UTF-8</value>
                   <value>application/json;charset=UTF-8</value>
              </list>
          </property>
     </bean>

并在pom.xml增加依赖

    <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.8.3</version>
   </dependency>
   <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.8.3</version>
   </dependency>
   <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-annotations</artifactId>
           <version>2.8.3</version>
   </dependency>

4、写一个控制层跳转
这里写图片描述

package com.mocha.contorller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class IndexController {
     @RequestMapping(value="/index",method=RequestMethod.GET)
     public String index(){
          return "index";
     }
}

这里注意的是index.jsp放到目录
这里写图片描述

四、启动项目

右键项目Run as –> Maven build –> clean jetty:run –>run

这里写图片描述
在浏览器输入地址:
http://localhost:8080/spring-basic/index

成功跳转页面到index.jsp
这里写图片描述

猜你喜欢

转载自blog.csdn.net/misseel/article/details/78688485
今日推荐