Spring-MVC学习

项目搭建

IntelliJ IDEA继承Maven搭建项目架构。在搭建项目之前,首先就要把项目所需要的jar包加载进来。在pom.xml文件中:

<!--Maven "Bill Of Materials" Dependency-->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>4.3.20.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>

    <!--junit测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!--spring依赖库-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
      </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
    </dependency>
  </dependencies>

Spring类加载监听器

Spring项目启动,需要类加载器和配置文件。

  1. 首先第一步,在web.xml文件当中把监听器加载进去。
<!--
       ContextLoaderListener是Spring的监听器,它的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。
       因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
    -->
   <context-param>
       <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:../spring/applicationContext.xml</param-value>
       <!--<param-value>/WEB-INF/spring/applicationContext.xml</param-value>-->
   </context-param>
   <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
  1. 然后在webapp目录底下创建spring目录文件夹,然后创建Spring的配置文件即applicationContext.xml。首先在创建之前要用MavenSpring依赖的jar包导入到项目中来。
    上面配置文件中有:
  <param-value>classpath*:../spring/applicationContext.xml</param-value>

所以首先在WEB-INF目录下创建spring目录然后再创建applicationContext.xml文件。创建好之后Spring的任务完成。

Spring MVC框架

Spring MVCSpring提供的MVC框架。核心配置文件是**[dispatcher]-servlet.xml文件。DispatcherServletSpring MVC框架的核心Servlet**,类似于调度器。

原理:

原理

配置Spring MVC

  1. web.xml文件中添加调度器DispatcherServlet的配置。注意:这里的配置文件要放在上面spring监听器的下面。
<!-- DispatcherServlet definition goes here-->
    <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*:../spring/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  1. spring目录里创建dispatcher-servlet.xml文件。
    上面配置的目录就在spring目录下面,所以要这么创建。
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath*:../spring/dispatcher-servlet.xml</param-value>

配置完成之后,开始运行项目,测试配置是否正确。

Spring MVC控制器

Spring MVC控制器是页面和数据之间的交互调度者,所以项目首先从控制器开始。

注解

Spring MVC可以通过注解的方式进行,也可以用java代码进行。在类上面加**@Controller注解,就表示该类是一个控制器类。@RequestMapping**可以加在函数上也可以加在类上,表示url地址的映射路径。

  1. 创建控制器。ModelMap对象会把message信息放在请求域当中,返回的jsp页面就会从请求域当中拿到message的值,即Hello Spring MVC Framework!《时间简史,从黑洞到大爆炸》
@Controller
@RequestMapping(value = "/demo")
public class UserController{
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String printHello(ModelMap model) {
        model.addAttribute("message", "Hello Spring MVC Framework!《时间简史,从黑洞到大爆炸》");
        return "hello";
    }
}    
  1. 创建view页面,在web.xml页面下创建jsp目录然后创建hello.jsp页面
<%@ page isELIgnored="false"%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
      <h3>这是视图模型中的值:${message}</h3>
</body>
</html>
  1. 配置视图
    dispatcher-servlet.xml文件中添加如下配置。
    <!-- 自动注册组件 -->
    <mvc:annotation-driven/>
    <!-- 通过扫描将带有@Controller注解的类交由spring容器管理并维护 -->
    <context:component-scan base-package="com.shopping.system.controller" />
    <!--
        配置视图解析器 如果不配置ViewResolver,Spring MVC默认使用org.springframework.web.servlet.view.InternalResourceViewResolver作为
         ViewResolver,而且prefix和suffix都为空
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

然后运行demo,浏览器打开对应URL地址查看。

错误1:Spring标签的值不显示

jsp页面值所以没有值出现,是因为jar包里面有jstl或者jsp的jar包,在返回的页面会出现下面这样的显示

  这是视图模型中的值:${message}

解决方案:在jsp页面加上最上面下面的内容

    <%@ page isELIgnored="false"%>

错误2:页面中文出现乱码现象

解决方案:在jsp页面的<%@page contentType=“text/html;charset=UTF-8”%>后面加上pageEncoding="UTF-8"就能解决乱码问题

       <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

Spring MVC访问静态资源

由于web.xml文件当中对DispatcherServlet 的配置,导致JSP文件访问静态资源比如图片会出错,导致图片不能正常显示。
解决方案:
dispatcher-servlet.xml文件中添加如下代码:image文件是创建在WEB-INF目录下面,如果创建在其他地方,location属性设置要改变。

    <!-- 自动注册组件 -->
    <mvc:annotation-driven/>
    <mvc:resources mapping="/image/**" location="/WEB-INF/image/" />

猜你喜欢

转载自blog.csdn.net/WeiAiGeWangFeiYuQing/article/details/83099168