首页 > 代码库 > ACCP8.0课程第二学年-spring mvc简易教程(一)

ACCP8.0课程第二学年-spring mvc简易教程(一)


1.关于spring-mvc
1.1 我们一般常见的mvc框架其实都是由总控制器,子控制器,总控制器配置文件和子控制器文件所组成
1.2 spring-mvc总控制器为DispatchServlet
1.3 spring-mvc的子控制器是基于@Controller注解与@RequestMapping注解构建成的
1.4 lib包下必须有这个几个jar aopalliance-1.0.jar commons-logging-1.2.jar jackson-annotations-2.8.7.jar jackson-core-2.8.7.jar jackson-databind-2.8.7.jar
以上包可以从maven仓库下载
1.5 相关jar包

技术分享

 



2.关于DispatchServlet
2.1 初始化DispatchServlet时它会默认在你的WEB-INF下寻找<servlet-name>-servlet.xml来初始化配置(这个是总控制器配置文件)
2.2 DispatchServlet它有一个contextConfigLocation属性便于查找总控制器配置文件的位置

3.关于ContextLoaderListener和WebApplicationContext
3.1 ContextLoaderListener是一个监听器,通常要在web.xml中的节点context-param节点中配置contextConfigLocation属性
3.2 这个监听器最主要的作用是在contextConfigLocation中配置bean初始化到WebApplicationContext中
3.3 WebApplication最主要的作用是在web程序中获得spring配置的bean

4.@Controller与@RequestMapping
4.1 @Controller表明是一个Java类为子控制器,它需要与component-scan标签配合使用(注意:一定要在总控制器配置文件里能找到该标签)
4.2 spring不需要你的controller继承自任何与servlet api耦合的类
4.3 @RequestMapping是将URL中一段地址映射到类或者方法上,因此它可以定义到类或者方法上
4.4 @RequestMapping几个重要的属性,value用于获取url的地址信息,method:接收哪种HTTP请求方式(POST,GET)
4.5 在spring 4.3+版本可以使用 @PostMapping @GetMapping注解来表示接受哪种http请求方式
4.6 如果@requestMapping注解的方法返回值不建议为void

5.关于Resolving View(视图解析器)
5.1 视图解析器故名思议就是视图层用何种方式展现(是jsp还是freemarker等)
5.2 常用的视图解析器包括以下几种
1)InternalResourceViewResolver 通常返回JSP的视图解析 2)XmlViewResolver 返回XML 3)FreeMarkerViewResolver 返回freemarker模板
5.3 通常我推荐大家用 ContentNegotiatingViewResolver解析器,它可以根据不同的情况返回不同的视图(具体看配置文件示例)


6.关于<mvc:annotation-driven>
6.1 这个会给我提供许多框架已经做好了的功能,比如转换Json 数据绑定等工作
6.2 通过它实现了以下功能:比如@DateTimeformat,@Valid(javabean验证),各种converter等

web.xml配置:
注意以下几点:1.总控制器(DispatchServlet)的配置 2.总控制器的配置文件路径 3.ContextLoaderListener的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <!-- 加载spring bean的配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>

  <!-- 配置监听器 注意该监听器的作用 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

  <!-- 总控制器的配置 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>

总控制器配置文件的配置: 1.在这里要配置视图解析器 2.<mvc:annotation-driven> 3.<context:component-scan>主要扫描@RequestMapping与@Controller

<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <mvc:annotation-driven/>
    <context:component-scan base-package="com.lyrk.springmvc.controller"/>
    <!-- 配置通用的视图解析-->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="viewResolvers">
            <list>
                <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/WEB‐INF/jsp/"/>
                    <property name="suffix" value=".jsp"/>
                </bean>
            </list>
        </property>
        <property name="defaultViews">
            <list>
                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
            </list>
        </property>
    </bean>
</beans>
package com.lyrk.springmvc.controller;

import com.lyrk.springmvc.entity.ApplicationBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import javax.servlet.http.HttpSession;

/**
 * Created by niechen on 17/5/22.
 */
@Controller
public class FirstController {

  //这里不建议返回值void @RequestMapping(value
= "/testWebApplicationContext", method = RequestMethod.GET) public void test(HttpSession session) {
     //注意在controller里如何获取Bean WebApplicationContext webApplicationContext
= WebApplicationContextUtils.getWebApplicationContext(session.getServletContext()); ApplicationBean applicationBean = webApplicationContext.getBean(ApplicationBean.class); System.out.println(applicationBean.getName()); } @GetMapping("/findOwner/{ownId}") public String findOwner(@PathVariable String ownId) { System.out.println("ownId:"+ownId); return "index"; } }

 

ACCP8.0课程第二学年-spring mvc简易教程(一)