Spring入门篇9 --- 使用注解处理Spring MVC

记录一下项目大家的bug,折腾了好久才搞定。

使用intllij搭建SpringMVC项目时,有时候会遇到无法下载jar包问题,会有这个错误“Failed to download 'http://central.maven.org/maven2/org/springframework/springaop/4.3.18.RELEASE/spring-aop-4.3.18.RELEASE.jar':Request failed with status code 501”,一开始以为是因为我天朝网络受限的原因,但是报的是501,也没有什么其他信息,然后就在网站测试一下这个连接,你看都已经有推荐了,接下来就是一顿操作,找各种配置,希望把这个请求路径修改掉,最终还是没有解决掉,网上也没搜到类似情况,那就换一种方式,使用maven工程来创建这个springmvc

 使用mavn创建mvc记得选择webapp那个包,因为我们要起网络请求,然后进入项目之后,重新添加spring mvc的框架到mav中,在intllij中右键增减框架,如果没有spring mvc, 那么就去project struct中把已经存在spring 删除,那个不全,重新进行右键选择,添加框架spring mvc。

说完bug,我们进入正题,现在我们来看一下注解的使用,注意我们现在说的都是前后端在一起的情况,也就是耦合,随着业务的不断发展,基本上公司都会有前后端工程师,后端工程师负责处理逻辑,并返回相应的数据,但是我们看的项目都有包含一些视图的渲染,这样可以更方便我们学习。

首先来看一些基本的注解语法

@Controller

这个负责将bean注册到spring上下文中,就是spring框架可以扫描到,按道理来讲跟component用法差不多,但是我测了一下,改成component之后接口就无法访问啦

@RequestMapping

这个就是告知处理器这个方法可以处理那些Url请求,如果把这个方法写在类上,就相当于在方法的url前面增建了一个类上类上的路径

@RequestParam

这个就是为了将后端参数与前段参数进行解耦,就是说,请求进来时,捕捉请求参数,然后再将值传递对应字段

这个注解一共有三个参数

  • value:指定属性的名称,也就是前段请求的字段
  • required:指定该字段是否必须传递
  • defaultValue:设置该字段的默认值,就是相当于python中的get方法,获取某个值,如果获取不到,就给个默认值

简单说完用的这几个注解我们来看一下项目配置,首先看下工程截图

 

web.xml不用变,我们直接来看dispatcher-servlet文件

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

    <!--加载扫描器,并制定包-->
    <context:component-scan base-package="controller" />

    <!--因为jsp文件方法WEB-INF外边,通过路径可以直接请求到,因此这一次,我们把jsp文件移动到WEB-INF里面,然后坐一下简单的配置,以方便在视图中进行查找-->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--这个就是增加的前缀-->
        <property name="prefix" value="/WEB-INF/page/" />
        <!--这个就是增加的后缀,我们可以不用在controller中加载视图时写.jsp-->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

看一张图帮助我们更好理解这个viewResolver作用

 接下来看一个我们的控制类还是看authenticate

package controller;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;


@Controller  // Controller就是通知Spring框架进行扫描的,我这个试了一下,用Component就无法访问,具体原理后续再研究
@RequestMapping("/index")  // 在类前面加这个注解,就会给下面所有方法前面都加上这个路由
public class Authenticate {
    // 这个就是路由
    @RequestMapping("/authenticate")
    // @RequestParam 就是我们说到的可以给参数起别名,这样如果前段字段名称发生变化,就只需要修改一处,可以指定
    public ModelAndView handleRequest(@RequestParam(value = "username", required = true, defaultValue = "hong") String u, @RequestParam("password") String p) throws Exception {
        // 看这个,是不是就不再需要我们写前缀跟后缀了,这个即使在despatcher-servlet中配置的
        ModelAndView mav = new ModelAndView("result");
        String message = "认证失败";
        if (u.equals("ming") && p.equals("1234")) {
            message = "认证成功";
        }
        // 告知要向视图添加对象
        mav.addObject("message", message);
        // 返回我们设置好的mav
        return mav;
    }
}

这个就是简单的注解使用,今天调编辑器浪费了挺多时间,先到这吧。成长就是再踩坑的路上不断前行。

猜你喜欢

转载自www.cnblogs.com/yangshixiong/p/12203829.html