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: 面向CV工程师
Title: SpringMVC入手项目注解版

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

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

(0)

大家都在看

  • 分析阿里云 ECS 出现内存占用过高原因

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    090
  • 剑指offer计划28(搜索与回溯算法困难)—java

    1.1、题目1 剑指 Offer 37. 序列化二叉树 1.2、解法 这题给我笑死了,我看到题解有个解法,我愿称之为神。 public class Codec { private …

    技术杂谈 2023年7月25日
    060
  • 华为交换机如何配置SSH远程登录,一分钟秒学会

    从事网络运维工作的小伙伴们都知道,在交换机正式上线时,必须完成配置SSH远程登录,这样做目的是为了日后,维护方便,不需要每次登录设备都要跑到机房,这样既不现实,又费事。 远程登录方…

    技术杂谈 2023年6月21日
    097
  • 通过Go语言创建CA与签发证书

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月25日
    078
  • 友情链接

    posted @2022-02-12 22:04 cjwen6 阅读(13 ) 评论() 编辑 Original: https://www.cnblogs.com/cjwen6/p…

    技术杂谈 2023年7月23日
    079
  • 为年度评选活动添加倒计时功能

    背景:前几天,老总说为年度优秀员工评选活动(活动放在公司的OA上面,使用asp.net+MySql开发)添加一个倒计时功能,想想没什么难度,不过是计算一下年月日时分秒而已,用jav…

    技术杂谈 2023年7月23日
    063
  • [CSS] css使用first-child 和last-child 实现三条杠效果

    first-child 和last-child是伪类选择器,选择第一个和选择最后一个子元素 现在实现下面的效果 class="menuico"> .men…

    技术杂谈 2023年6月1日
    082
  • Oracle EBS 12.2.6 on VirtualBox

    Back in May, Oracle announced the general availability of Oracle VM Virtual Appliance for …

    技术杂谈 2023年6月1日
    087
  • java实现哈希表

    java实现哈希表 哈希表是一种数据结构,它可以快速的进行插入、查找、删除操作,无论数据量有多大,它都能把插入、查找和删除操作的时间复杂度降为O(1)级别。哈希表是基于数组+链表进…

    技术杂谈 2023年7月24日
    073
  • iOS 系统字体设置加粗斜体

    说明 1.加粗斜体,字体样式,API无法同时设置斜体,加粗。2.因此UI为字体样式,需导入字体库,导致增大包体积。 UIFontDescriptorSymbolicTraits可有…

    技术杂谈 2023年5月30日
    091
  • Prometheus Operator配置钉钉告警

    配置钉钉告警 1、注册钉钉账号->机器人管理->自定义(通过webhook接入自定义服务)->添加->复制webhook 2、创建钉钉告警插件(dingta…

    技术杂谈 2023年6月1日
    0110
  • 多级缓存-Centos安装OpenResty

    1)安装开发库首先要安装OpenResty的依赖开发库,执行命令: 2)安装OpenResty仓库你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未…

    技术杂谈 2023年5月31日
    069
  • Nexus搭建maven仓库并简单使用

    一、基本介绍 参考:https://www.hangge.com/blog/cache/detail_2844.htmlhttps://blog.csdn.net/zhuguanb…

    技术杂谈 2023年7月24日
    081
  • 你还有什么问题吗?

    在面试过程中,一般都会有一个固定环节,那就是在临近结束时,面试官会问求职者: 你还有什么问题吗? 其实,这是一个很好的了解公司,了解未来团队的机会,但很多求职者却不知道问什么,或者…

    技术杂谈 2023年6月21日
    080
  • Ansible学习笔记

    相关资料 使用总结 介绍 Ansible安装 Ansible配置文件和命令 配置文件概述 Ansible系列命令 Ansible命令使用 Ansible命令参数中的Host-pat…

    技术杂谈 2023年7月10日
    093
  • Python 学习路线(2022)

    原文链接: Python 学习路线(2022) 前几天整理了一份 Go 学习路线(2022),广受好评。那么趁火打劫,不是,是趁热打铁,又整理了一份 Python 学习路线。 内容…

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