记录一下项目大家的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
这个就是为了将后端参数与前段参数进行解耦,就是说,请求进来时,捕捉请求参数,然后再将值传递对应字段
这个注解一共有三个参数
简单说完用的这几个注解我们来看一下项目配置,首先看下工程截图
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; } }
这个就是简单的注解使用,今天调编辑器浪费了挺多时间,先到这吧。成长就是再踩坑的路上不断前行。
Spring入门篇9 --- 使用注解处理Spring MVC
原文:https://www.cnblogs.com/yangshixiong/p/12203829.html