0
点赞
收藏
分享

微信扫一扫

SpringMVC03-注解

心如止水_c736 2022-01-26 阅读 27

使用注解开发SpringMVC

第1步:创建一个空的maven项目,并加入web支持,此处需要记住,web.xml必须使用4.0及以上版本,不然会出现代码无法运行

第2步: 配置项目的依赖,需要关注project structure,里面需要在项目里面加入lib包

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>springmvc-study</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>springmvc-01-servlet</module>
        <module>spring-03-hellomvc</module>
        <module>spring-02-practice1</module>
        <module>spring-02-practice2</module>
        <module>springmvc-04-annotation</module>
        <module>springmvc-04-practice1</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </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>
    <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>
</project>

第3步:配置web.xml,注册DispatcherServlet的servlet

<?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">
   <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>

第4步:在src/main/resources 下面建立 springmvc-servlet.xml,在这个配置文件需要干如下几件事

添加注解扫描,扫描对应包下的注解

<!-- 自动扫描包让注解生效,由 IoC 容器管理 -->
    <context:component-scan base-package="com.baifu.controller"/>

让 SpringMVC 不处理静态资源

<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />

开启注解! 自动创建了使用注解需要的对象

<!--
    开启注解!
    在 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" />
</bean>

可以发现,相比之前少了配置处理器映射和处理器适配器的部分!注解帮我们做了!

总体的配置如下

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

    <context:component-scan base-package="com.kuang.controller"/>
    
    <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"/>
    </bean>
</beans>

第5步: 创建我们的jsp文件夹,在/WEB-INF/下

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

第6步:创建Controller,编写一个Java控制类,com.baifu.controller.HelloController, 注意编码规范

这里和之前一样还是 HelloController,做一样的事;不过,不用实现 Controller 接口了!直接添加 @Controller 注解!

// 这样它就是一个控制器了!
@Controller
public class HelloController {
    
}

在其中创建一个方法 Hello,并添加 @RequestMapping 注解!属性为请求名字!

// 这样它就是一个控制器了!
@Controller
public class HelloController {

    // 访问地址 localhost:8080/项目路径/hello
    @RequestMapping("/hello")
    public String Hello(Model model){
        // 处理业务,结果放在 model 中!
        // 不过没返回,前面是怎么获取的呢?(DispatcherServlet怎么得到整个msg呢)
        model.addAttribute("msg","Hello,SpringMVC");

        // 返回的视图名称!
        return "hello";
    }
}

方法的返回值 String 字符串就是视图的名字,参数为 Model 模型,用于存放业务处理后的数据!

提示:@RequestMapping 注解也可以用在类上,相当于多加一级!

@Controller 是为了让Spring IoC容器初始化时自动扫描到;

@Controller
@RequestMapping("/HelloController")
public class HelloController {
    //真实访问地址: 项目名/HelloController/hello
    @RequestMapping("/hello")
    public String sayHello(Model model){
        //向模型中添加属性msg与值,可以在jsp页面中取出并渲染
        model.addAttribute("msg","hello,Spring MVC");
        //web-inf/jsp/hello.jsp
        return "hello";
    }

}

@RequestMapping 是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是 /HelloController/hello

方法中声明Model类型的参数是为了把Action中的数据带到视图中

方法返回的结果是视图的名称hello 加上配置文件中的前后缀就变成了 WEB-INF/jsp/hello.jsp

第7步,创建视图层 hello.jsp

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

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

第8步 配置tomcat并运行

配置tomcat,开启服务器,访问对应的请求路径

小结:

  1. 创建一个maven的web项目时,先跑一下tomcat测试能不能成功,遇到后台显示成功,但是报404错误的问题,找半天没找到问题,重新建了项目一样的代码就没事…

  2. 再次没到跳转404问题:

    1. 所以用 IDEA 添加进去:Project Structure --> Artifacts --> 查看对应项目的 /WEB-INF下边没有lib文件–>创建lib—>将对应项目的Available Elements --> 选中所有的 jar 包 --> 右键 Put into /WEB-INF/lib,完美解决!

小结:

实现步骤非常简单,分为如下

1、新建一个web项目,子项目

2、导入相关的jar包,配置pom.xml文件

3、编写web.xml,注册我们的DispatcherServlet

4、编写springmvc配置文件

5、接下来就是创建控制类,controller

6、最后完善前端视图和controller之间的对应关系

7、运行测试调试

使用springmvc必须配置三大件

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

举报

相关推荐

SpringMVC注解

注解配置SpringMVC

SpringMVC注解方式

SpringMVC - 全注解

springMVC常用注解

SpringMVC 注解详解

SpringMVC常用注解

0 条评论