SpringMVC构建简单项目

Posted Mq_sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC构建简单项目相关的知识,希望对你有一定的参考价值。

SpringMVC构建简单项目

一、使用配置构建

细节大部分在代码注释里。

项目结构:
在这里插入图片描述

  1. 新建一个maven项目,添加web的支持

在这里插入图片描述

  1. 导入了SpringMVC 的依赖!以及一些需要可能用到的依赖
<!--    导入依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
  1. 配置web.xml ,注册DispatcherServlet:前端控制器
<?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_4_0.xsd"
         version="4.0">


<!--配置DispatchservLet:这个是SpringMVC的核心:请求分发器,前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- DispatcherServlet要绑定Spring的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!-- 启动级别:1-->
        <load-on-startup>1</load-on-startup>
    </servlet>
<!--    在springmvc中,/ 和 /* 的区别
        / :只会匹配所有的请求,不会去匹配jsp页面
        /* :匹配所有请求,包括jsp页面-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
  1. 编写SpringMVC 的 配置文件。名称:springmvc-servlet.xml

添加 处理映射器:BeanNameUrlHandlerMapping
添加 处理器适配器:SimpleControllerHandlerAdapte
添加 视图解析器 :InternalResourceViewResolver
(看代码注释)

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

        <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        <!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
        <!--视图解析器 : 模板引擎 ThymeLeaf  Freemarker-->
        <!--视图解析器:DispatcherServlet给他的ModeLAndView
            1.获取了ModelAndView的数据
            2.解析ModelAndView的视图名字
            3.拼接视图名字,找到对应的视图 /WEB-INF/jsp/first.jsp
            4.将数据渲染到视图上-->
    <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!-- 前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

<!--    BeanNameUrlHandlerMapping:bean-->
    <bean id="/first" class="com.mq.controller.OneController"/>
</beans>

  1. 编写操作业务OneController类 ,要么实现Controller接口。需要返回一个ModelAndView,装数据,封视图;
package com.mq.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OneController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        ModelAndView mv = new ModelAndView();
        //业务代码
        String result ="hello springmvc";
        mv.addObject("msg",result);
        //视图跳转
        mv.setViewName("first");
        return mv;
    }
}

  1. 将OneController类在springIoc容器中注册bean
<bean id="/first" class="com.mq.controller.OneController"/>
  1. 新建一个first.jsp视图,让我们跳转
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
        ${msg}
</body>
</html>
  1. 启动Tomcat测试

在这里插入图片描述

二、使用注解实现

项目结构:

在这里插入图片描述

  1. 新建一个maven项目,添加web的支持

  2. 导入了SpringMVC 的依赖!主要有Spring框架核心库、Spring MVC、servlet , JSTL等

  3. 配置web.xml,注册DispatcherServlet:前端控制器

<?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_4_0.xsd"
         version="4.0">


    <!--1.注册servlet-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!-- 启动顺序,数字越小,启动越早 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--所有请求都会被springmvc拦截 -->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

  1. 添加Spring MVC配置文件
<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!--    自动扫描包,让指定包下的注解生效,由IOC容器管理-->
    <context:component-scan base-package="com.mq.controller"/>
<!--ilSpring MVC不处理静态资源 .css .js .html.mp3.mp4等-->
    <mvc:default-servlet-handler/>
    <!--
   支持mvc注解驱动
       在spring中一般采用@RequestMapping注解来完成映射关系
       要想使@RequestMapping注解生效
       必须向上下文中注册DefaultAnnotationHandlerMapping
       和一个AnnotationMethodHandlerAdapter实例
       这两个实例分别在类级别和方法级别处理。
       而annotation-driven配置帮助我们自动完成上述两个实例的注入。
    -->
    <mvc:annotation-driven />
    
    <!--视图解析器 : 模板引擎 ThymeLeaf  Freemarker-->
    <!--视图解析器:DispatcherServlet给他的ModeLAndView
        1.获取了ModelAndView的数据
        2.解析ModelAndView的视图名字
        3.拼接视图名字,找到对应的视图 /WEB-INF/jsp/first.jsp
        4.将数据渲染到视图上-->
    <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!-- 前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

  1. 编写操作业务MyController类
package com.mq.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller  //为了让Spring IOC容器初始化时自动扫描到
//@RequestMapping("/MyController")
public class MyController {

    //真实访问地址 : 项目名/MyController/hello
    @RequestMapping("/hello")
    public String mao(Model model){
        //封装数据
        model.addAttribute("msg","你好,springmvc");

        return "first";//会被视图解析器处理    //web-inf/jsp/first.jsp
    }
}

有几个注解简单了解下:

@Controller:是为了让Spring IOC容器初始化时自动扫描到;并声明是一个Controller类

@RequestMapping:是为了映射请求路径,如果放在类上,我们访问的路径就为 /MyController/hello;如果只用在方法上,访问路径为 /hello,只要理解是映射的路径就行。

  1. 新建first.jsp视图
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${msg}
</body>
</html>

  1. 配置Tomcat运行测试

在这里插入图片描述

小结:

使用springMVC必须配置的三大部分:

处理器映射器、处理器适配器、视图解析器

我们需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,也可以进行手动配置。

如果遇到报404

我自己就遇到了,所以就把可能的问题列举了下;

  1. 首先看自己的映射路径是不是正确的
  2. 查看控制台报错是否缺少jar包。
  3. 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 重启Tomcat 即可解决!

  2. 检查Tomcat的映射路径问题(如果首页都找不到,那大多数就是Tomcat配置问题了)

以上是关于SpringMVC构建简单项目的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 3.2 Thymeleaf Ajax 片段

idea没有springmvc

maven -- 实现在Eclipse用maven搭建springmvc项目(附构建步骤和详细实现代码)

Maven构建 SpringMVC+Spring+MyBatis 环境整合

springmvc 分页查询的简单实现

springboot学习之构建简单项目搭建