SpringMVC入手项目注解版

SpringMVC入手项目注解版

1.创建Maven项目在pom.xml文件引入相关的依赖

<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.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupid>javax.servlet</groupid>
            <artifactid>javax.servlet-api</artifactid>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupid>javax.servlet.jsp</groupid>
            <artifactid>jsp-api</artifactid>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupid>javax.servlet</groupid>
            <artifactid>jstl</artifactid>
            <version>1.2</version>
        </dependency>
    </dependencies>

由于Maven可能存在资源过滤的问题,我们将配置完善

<build>
   <resources>
       <resource>
           <directory>src/main/java</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
       <resource>
           <directory>src/main/resources</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
   </resources>
</build>

2.配置web.xml

<!--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>

/ 和 / 的区别:< url-pattern > / 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。< url-pattern > / 会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。

  • 注意web.xml版本问题,要最新版!
  • 注册DispatcherServlet
  • 关联SpringMVC的配置文件
  • 启动级别为1
  • 映射路径为 / 【不要用/*,会404】

3、添加Spring MVC配置文件
在resource目录下添加springmvc-servlet.xml配置文件,配置的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息如下:

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

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.bai.controller">
    <!-- 让Spring MVC不处理静态资源: .html .css .js -->
    <mvc:default-servlet-handler>
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven>

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/">
        <!-- 后缀 -->
        <property name="suffix" value=".jsp">
    </property></property></bean>

</mvc:annotation-driven></mvc:default-servlet-handler></context:component-scan></beans>

在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。

  • 让IOC的注解生效
  • 静态资源过滤 :HTML . JS . CSS . 图片 , 视频 …..

  • MVC的注解驱动

  • 配置视图解析器

4、创建Controller

package com.bai.controller;

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

@Controller
@RequestMapping("/HelloController")
public class HelloController {

    //&#x771F;&#x5B9E;&#x8BBF;&#x95EE;&#x5730;&#x5740; : &#x9879;&#x76EE;&#x540D;/HelloController/hello
    @RequestMapping("/hello")
    public String hello(Model model) {
    // &#x5C01;&#x88C5;&#x6570;&#x636E;  //&#x5411;&#x6A21;&#x578B;&#x4E2D;&#x6DFB;&#x52A0;&#x5C5E;&#x6027;msg&#x4E0E;&#x503C;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;JSP&#x9875;&#x9762;&#x4E2D;&#x53D6;&#x51FA;&#x5E76;&#x6E32;&#x67D3;
        model.addAttribute("msg", "Hello SpringMVC-Annotaion!");
        return "hello";//&#x4F1A;&#x88AB;&#x89C6;&#x56FE;&#x89E3;&#x6790;&#x5668;&#x5904;&#x7406;
        //web-inf/jsp/hello.jsp
    }

    @RequestMapping("/hello1") //&#x5EFA;&#x8BAE;&#x76F4;&#x63A5;&#x5C06;&#x8DEF;&#x5F84;&#x5199;&#x6B7B;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x5916;&#x9762;&#x4E00;&#x5C42;
    public String hello1(Model model) {
        // &#x5C01;&#x88C5;&#x6570;&#x636E;  //&#x5411;&#x6A21;&#x578B;&#x4E2D;&#x6DFB;&#x52A0;&#x5C5E;&#x6027;msg&#x4E0E;&#x503C;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;JSP&#x9875;&#x9762;&#x4E2D;&#x53D6;&#x51FA;&#x5E76;&#x6E32;&#x67D3;
        model.addAttribute("msg", "Hello SpringMVC-Annotaion!");
        return "hello1";//&#x4F1A;&#x88AB;&#x89C6;&#x56FE;&#x89E3;&#x6790;&#x5668;&#x5904;&#x7406;
        //web-inf/jsp/hello1.jsp
    }
}
  • @Controller是为了让Spring IOC容器初始化时自动扫描到;
  • @RequestMapping是为了映射请求路径
  • 方法中声明Model类型的参数是为了把Action中的数据带到视图中;
  • 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB- INF/jsp/hello.jsp。

5、创建视图层
在WEB-INF/ jsp目录中创建hello.jsp , 视图可以直接取出并展示从Controller带回的信息;
可以通过EL表示取出Model中存放的值,或者对象;

<%@ page contenttype="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>SpringMVC</title>
</head>
<body>
${msg}
</body>
</html>
</%@>

6、配置Tomcat运行
配置Tomcat , 开启服务器 , 访问 对应的请求路径!

可能遇到的问题:访问出现404,排查步骤:

  1. 查看路径是否写错
  2. 查看控制台输出,看一下是不是缺少了什么jar包。
  3. 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖!
  4. 重启Tomcat 即可解决!

SpringMVC入手项目注解版
SpringMVC入手项目注解版

小结

实现步骤其实非常的简单:

  1. 新建一个web项目
  2. 导入相关jar包
  3. 编写web.xml , 注册DispatcherServlet
  4. 编写springmvc配置文件
  5. 接下来就是去创建对应的控制类 , controller
  6. 最后完善前端视图和controller之间的对应
  7. 测试运行调试.

使用springMVC必须配置的三大件:

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

通常,我们只需要 手动配置视图解析器,而 处理器映射器和处理器适配器只需要开启 注解驱动即可,而省去了大段的xml配置

使用注解@Controller

  • @Controller注解类型用于声明Spring类的实例是一个控制器(在讲IOC时还提到了另外3个注解);
  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。
<!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
<context:component-scan base-package="com.kuang.controller">
</context:component-scan>

增加一个ControllerTest2类,使用注解实现;

//@Controller&#x6CE8;&#x89E3;&#x7684;&#x7C7B;&#x4F1A;&#x81EA;&#x52A8;&#x6DFB;&#x52A0;&#x5230;Spring&#x4E0A;&#x4E0B;&#x6587;&#x4E2D;
@Controller
public class ControllerTest2{

   //&#x6620;&#x5C04;&#x8BBF;&#x95EE;&#x8DEF;&#x5F84;
   @RequestMapping("/t2")
   public String index(Model model){
       //Spring MVC&#x4F1A;&#x81EA;&#x52A8;&#x5B9E;&#x4F8B;&#x5316;&#x4E00;&#x4E2A;Model&#x5BF9;&#x8C61;&#x7528;&#x4E8E;&#x5411;&#x89C6;&#x56FE;&#x4E2D;&#x4F20;&#x503C;
       model.addAttribute("msg", "ControllerTest2");
       //&#x8FD4;&#x56DE;&#x89C6;&#x56FE;&#x4F4D;&#x7F6E;
       return "test";
  }

}

注解方式是平时使用的最多的方式!

@RequestMapping

@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
方法级别的注解变体有如下几个:组合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

@GetMapping 是一个组合注解,平时使用的会比较多!
它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。

Original: https://www.cnblogs.com/b10100912/p/16665783.html
Author: 学习钱厚端的小白
Title: SpringMVC入手项目注解版

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/616510/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • BlogJava好像不能贴图

    BlogJava好像不能贴图,就贴在这里了. Original: https://www.cnblogs.com/sunsonbaby/archive/2005/05/05/149…

    Java 2023年5月29日
    078
  • redis分析系列之set命令

    前言 最近研究下redis源码,现在从最基本的命令行操作来分析,redis是如何处理命令操作的 redis的set命令操作 我们在redis-cli执行下面的命令 java;gut…

    Java 2023年6月5日
    091
  • spring+springmvc+ibatis整合注解方式实例

    需求说明 实现用户通过数据库验证登录需求。採用 Myeclipse+Tomcat 6.0+Mysql 5.0+JDK 1.6 2.数据库表 开发所用是Mysql 数据库,仅仅建立单…

    Java 2023年5月30日
    069
  • 用Java实现生成图片验证码

    通过代码实现生成一个随机验证码图片,且生成后自动打开: package day_12_17; import javax.imageio.ImageIO; import java.a…

    Java 2023年6月7日
    068
  • 使用Intellij IDEA搭建Ext JsMVC web项目

    由于自己从android开发转来学习web开发,最近在学习Jsp,之前接触过一点Extjs,所以用jsp来配合ext试试。 Ext JS介绍 extjs是一个javascript框…

    Java 2023年6月13日
    058
  • MySQL8.0安装步骤

    在网上看了好多教程,终于安装成功,自己也写篇博客记录下 一、下载MySQL8.0 这个没啥好说的了吧,去官网下好,下下来解压 二、设置环境变量 本不想说明怎么设置环境变量,但是为了…

    Java 2023年6月9日
    078
  • 配置nginx保证frps服务器与web共用80端口的方法

    https://www.cnblogs.com/sanduzxcvbnm/p/8509150.html 首先你会有个疑惑,frp是什么呢?简单的说frp就是内网穿透工具,配置好客户…

    Java 2023年5月30日
    070
  • ActiveMQ 即时通讯服务 浅析

    解决方法: 需要用到eclipse的jdt来编译class,不能再使用javac的默认编译方式。 在eclipse或MyEclipse的eclipse/plugin目录中找到org…

    Java 2023年5月29日
    061
  • 解决问题 Could not obtain transaction-synchronized Session for current thread

    解决问题 Could not obtain transaction-synchronized Session for current thread 问题现象 在使用Hibernat…

    Java 2023年5月30日
    083
  • 【微服务】Nacos初体验

    SpringCloud – Nacos初体验 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德德🌝…

    Java 2023年6月16日
    091
  • VSCode官方的配置同步方案

    前言 这几天在迁移电脑工作环境,对于VSCode,我实在不想从头做下载插件、配置代码规则这样的事情,于是求助百度,搜索结果靠前的解决方案基本都是使用 Setings Sync插件,…

    Java 2023年6月7日
    0108
  • 在阿里云上搭建私有GIT仓库

    在阿里云上搭建私有GIT仓库 年轻人就得好好学习,不能这么颓废 最近做项目练练手,用到了github, 但是github访问速度是真的慢啊,下载项目,下载一天了。所以呢,我是个成熟…

    Java 2023年6月8日
    0108
  • MySQL 事务常见面试题总结 | JavaGuide

    《Java 面试指北》来啦!这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ……)、优质面经等内容。本文原发于 …

    Java 2023年6月9日
    051
  • Tomcat中的观察者模式 (Lifecycle)

    几个重要的类,接口 LifeCycle : 主题接口 LifeCycleBase : 抽象的主题实现 LifeCycleListener : 观察者 具体分析 public int…

    Java 2023年6月6日
    075
  • Java八大基本数据类与对应包装类

    Java的八种基本数据类型 序号 数据类型 字节数 默认值 取值范围 示例 1 byte (位) 1 0 -2^7 ~ 2^7-1 byte b = 10; 2 short (短整…

    Java 2023年6月5日
    057
  • Storm2

    java;gutter:true; package storm.scheduler;</p> <p>import java.util.ArrayList; …

    Java 2023年6月9日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球