zoukankan      html  css  js  c++  java
  • 创建 spring MVC项目的基本步骤

    第一步,创建 Gradle 项目,在 build.gradle 增加相关依赖

    apply plugin: 'java'
    apply plugin: 'war'
    
    // 指定 Java 版本
    sourceCompatibility = 1.8
    
    // 配置下载 jar 包的地址
    repositories {
      mavenCentral()
      jcenter()
    }
    
    // 配置需要的 jar 包依赖
    dependencies {
    
      // 定义两个局部变量
      // 这里代表我们需要的 hibernate 和 spring 的版本
      def hibernateVersion = "5.1.0.Final"
      def springVersion = "4.3.5.RELEASE"
    
      // 在 test 中需要用到的 jar 包
      testCompile (
        "junit:junit:4.12"
      )
    
      // 指明 Tomcat 上已经自带的 jar 包,这样发布的时候才不会重复
      providedCompile (
        "javax:javaee-web-api:7.0",
      )
    
      // 配置我们项目需要用到的所有 jar 包,即 compile 环节需要的 jar 包
      compile (
    
        // 本地的 OJDBC 包加入进来,要改成自己的路径
        files("E:/SSH/lib_hibernate/ojdbc7.jar"),
    
        // 用来管理数据源的知名 jar 包
        "c3p0:c3p0:0.9.1.2",
    
        // jsp 中 jstl 标签的支持 jar 包
        "javax.servlet:jstl:1.2",
    
        // log4j 日志支持的 jar 包
        "log4j:log4j:1.2.17",
    
        // 配置 hibernate
        "org.hibernate:hibernate-core:$hibernateVersion",
        "org.hibernate:hibernate-validator:5.4.0.Final",
    
        // 配置 spring
        "org.springframework:spring-web:$springVersion",
        "org.springframework:spring-orm:$springVersion",
        "org.springframework:spring-aop:$springVersion",
        "org.springframework:spring-webmvc:$springVersion",
        "com.fasterxml.jackson.core:jackson-databind:2.5.1",
      )
    }
    
    
    // 为编译器配置编码,防止某些情况下编译出现乱码的情况
    // 相应的,我们所有的代码应该保存成 UTF-8 格式
    tasks.withType(JavaCompile) {
      options.encoding = "UTF-8"
    }
    
    
    // 自定义任务,将工程所需要的 jar 包拷贝到项目下的 lib 文件夹下
    // 需要手动执行这个 task 才会有效果。这是为了方便导出 jar 包
    task copyJars(type: Copy) {
      // 指明我们导出的是 compile 和 test 所依赖的 jar 包
      from configurations.compile, configurations.testCompile
      // 指明导出到 "lib" 文件夹下
      into "lib"
    }

    第二步,配置 web.xml,加入 spring 和 mvc 支持

    <!-- 如果使用 RESTful 风格的编程,需要加上这个过滤器 -->
    <!-- 它能使得 FORM 提交支持 PUT/DELETE 等方法 -->
    <filter>
      <filter-name>forRESTful</filter-name>
      <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>forRESTful</filter-name>
      <servlet-name>springmvc</servlet-name>
    </filter-mapping>
    
    
    <!-- 配置 SpringMVC 的 DispatcherServlet  context (child) -->
    <!-- 它会为 SpringMVC 创建一个独立的容器 -->
    <!-- 如果使用 SpringMVC,这里必须要配置 -->
    <!-- 它的父容器是下面配置的 root Context -->
    <!-- 可以在 init-param 中指定配置文件路径,如果不配置,默认是 "WEB-INF/miniblog-servlet.xml" -->
    <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-miniblog.xml</param-value>
      </init-param>
      <load-on-start>1</load-on-start>
    </servlet>
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    
    <!-- 配置 spring 的 root application context (parent) -->
    <!-- 创建一个根容器 -->
    <!-- 如果只是使用 SpringMVC 但不使用 Spring 其他功能,这里可以不配置 -->
    <!-- 在这个容器里,配置一些全局的东西 -->
    <!-- 比如 dao/service 的依赖,数据源,sessionFactory,声明式事务之类 -->
    <!-- 可以通过 context-param 指定配置文件路径,如果不指定,默认是 "WEB-INF/applicationContext.xml" -->
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-root.xml</param-value>
    </context-param>

    第三步,配置 SpringMVC 的 context 文件(spring-miniblog.xml):

    <!-- 注意,要引入正确的命名空间!!! -->
    
    <!-- mvc 版本的 context:annotation-driven -->
    <!-- 针对 mvc 增加了一些其他支持,需要开启 -->
    <mvc:annotation-driven />
    
    <!-- 配置扫描发现所有具有 @Controller 注解的类,加载到容器 -->
    <!-- 注意,在 SpringMVC 的配置文件中,不要扫描 @Controller 之外的类 -->
    <context:component-scan base-package="app.controller" />
    
    <!-- 配置静态资源的访问映射 -->
    <!-- 比如访问 http://localhost/js/jquery.js,mvc 将会去寻找 /assets/javascript/jquery.js -->
    <mvc:resources mapping="/js/**"  location="/assets/javascript/" />
    <mvc:resources mapping="/css/**" location="/assets/stylesheet/" />
    
    
    <!-- 配置视图解析器,将 Controller 返回的字符串组织成全路径 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/view/" />
      <property name="suffix" value=".jsp" />
    </bean>
    
    <!-- 配置资源文件,如下配置,资源文件则为 resource 文件夹下的 message*.properties 或 message*.xml -->
    <!-- 注意,要把资源文件保存成 UTF-8 格式,否则,需要在这里通过 defaultEncoding 指定编码 -->
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
      <property name="basename" value="message" />
      <property name="defaultEncoding" value="GBK" />
    </bean>
    
    <!-- 根据需要,还可以在这个配置文件里配置拦截器、转换服务等 -->

    第四步,如果需要建立根容器,配置根容器的 context 文件(spring-root.xml):

    <!-- 启用注解,让 spring 在加载的时候自动扫描指定包 -->
    <!-- 这样会将含有 @Service/@Repository/@Component 等注解的类在容器中实例化 -->
    <context:component-scan base-package="fish.miniblog.service, fish.miniblog.dao" />
    
    
    <!-- 使用外部的 properties 文件 -->
    <!-- 我们一般会将经常要改动的一些参数提取出来放到外部 -->
    <context:property-placeholder location="classpath:db.properties" />
    
    
    <!-- 配置 Hibernate 的 Sessionfactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
      <property name="dataSource">
        <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
          <property name="user" value="${user}" />
          <property name="password" value="${password}" />
          <property name="jdbcUrl" value="${url}" />
          <property name="driverClass" value="${driver}" />
        </bean>
      </property>
      <property name="hibernateProperties">
        <props>
          <prop key="hibernate.show_sql">true</prop>
          <prop key="hibernate.format_sql">true</prop>
          <prop key="hibernate.hbm2ddl.auto">update</prop>
          <prop key="hibernate.dialect">${dialect}</prop>
        </props>
      </property>
      <property name="packagesToScan" value="fish.miniblog.model" />
    </bean>
    
    
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    
    
    <!-- 开启事务相关的注解 -->
    <!-- 然后,就可以在 Service 相关的类或方法上通过 @Transactional 开启事务支持了 -->
    <tx:annotation-driven proxy-target-class="true"/>

    第五步,建立 Controller,进行测试

    @Controller
    @RequestMapping("/users")
    class UserController {
    
        @RequestMapping("/{name}")
        public String show(@PathVariable String name, Model model) {
            model.add("name", name);
            return "show";    // 返回的是 "/WEB-INF/view/show.jsp" 页面
        }
    }
  • 相关阅读:
    启动窗体的程序控制与动画效果
    在线程中使用定时器
    从oracle9i/92数据库中导出数据至 oracle 8.1.7 数据库中
    收集:PowerDesigner常见问题解决与设置集锦
    [转]C# 2.0新特性与C# 3.5新特性
    COM服务器的创建过程
    [原创] 为什么需要TLS(Thread Local Storage)?
    COM+服务器的.Net组件实现 客户端
    如何在客户端避免繁冗的服务器GUID定义及导入?
    进程、线程、套间和环境
  • 原文地址:https://www.cnblogs.com/heyhhz/p/6403195.html
Copyright © 2011-2022 走看看