【1】首先我们要创建的maven是webapp的工程,别创建成普通java的了
【2】pom的导入jar包就不在这里浪费字数了
【3】我们需要知道SpringMVC在三重架构中的位置,我们可以来看一张图

可以看到我们的SpringMVC,其实就是表现层的框架,业务层使用Spring,持久层用Mybatis
SpringMVC的地位相当于我们在没学习Spring时候的Servlet,用来和页面交互数据的那一层
【4】首先我们来学习下,SpringMVC中怎么让Controller层和页面有关系(交互)
第一步。我们需要用到Spring中的Controller注解,把这个类存入bean内存中
@Controller(value = "HelloController")
@RequestMapping(path = "/user" )
public class HelloController {
//请求映射注解,要自定义上请求路径,用于建立请求 URL 和处理请求方法之间的对应关系
@RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("hello StringMVC");
//SpringMvc默认的规则,返回的什么,就会到对应的相同名字的jsp文件中,这里是返回到success.jsp,需要配视图解析器
return "success";
}
第二步。我们需要写上@RequestMapping注解,里面随便写一个自己喜欢的路径,记得斜杠/不要忘了,在方法上也写一个,方便前端页面的定位
第三步。我们需要在resource文件下创建一个xml配置文件
用于Spring的IOC注解
<context:component-scan base-package="cn.itcast"></context:component-scan>
用于开启SpringMVC注解支持,如果不加,RequestMapping就用不了
<mvc:annotation-driven ></mvc:annotation-driven>
第四步。我们需要名白SpringMVC中的一个潜规则,就是在上述Controller层中的代码,可以发现我们的方法的返回值是String类型,返回值是success,SpringMVC会根据返回的String自动找到我们将来我们需要跳转的jsp页面,而jsp的名称就必须和我们返回的String一样,也就是,我们返回success,我们就需要有一个success.jsp。不然Spring找不到。
第五步。明白了Spring的潜规则后,我们就需要一个视图解析器对象,也是写在xml中即可,不需要自己写一个class类
prefix中文是前缀的意思,也就是我们需要给SpringMVC一个前缀(就是jsp文件名)
suffix是后缀的意思,这里我们直接填.jsp
<!--配置视图解析器对象,帮忙跳转到指定的页面-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<!--前缀名-->
<property name="prefix" value="/WEB-INF/page/"></property>
<!--文件后缀名-->
<property name="suffix" value=".jsp"></property>
</bean>
第六步。我们就可以在前端页面去访问我们的controller层中的方法
这里先用a超链接标签中的href属性进行访问,大家如果认真看了之前的代码,就可以知道,这里的href相对路径是我们RequestMapping中的值

【5】学完了交互,我们就进行进阶版得交互,怎么获取前端传过来得参数,记忆力好的同学,可能还记得之前得request.getParameter和getParameterMapper来获取前台数据,现在用了SpringMVC可以简化一点(个人觉得也没那么简洁,总共就少2句)
1)学习下单个数据怎么获取
可以看到我们得路径将来要在jsp文件中写param/testParam,我们得方法中有两个参数,这个参数就要从前端获取,
从前端获取参数
<a href="param/testParam?username=hehe&password=123">
流程:当我们从网页中点了一下得标签之后,jsp页面就会到param/testParam,controller层中,然后controller层到我们写的xml文件中,xml文件中处理,返回到controller中,controller返回success再返回到xml文件中处理,xml文件就会到我们需要跳转得jsp中。
在这个流程中SpringMVC会自动把我们传入得参数放到对应得变量上,这样就得到了获取前端参数得目的
2)第二,我们学习下怎么把参数封装到user中,之前得方法是
利用BeanUtils工具类帮我们把parameterMap中得数据传到User对象中
Map<String, String[]> parameterMap = request.getParameterMap();
User user=new User();
BeanUtils.populate(user,parameterMap);
Spring中当然也是简化得结果
先在controller层中写上我们要获取得对象
然后前端表单中input中得name属性需要和我们得Account(对象类)中得参数相同
这样SpringMVC就会自动把Account封装好,不用我们管(这还是挺方便得)
3)但是SpringMVC不是什么类型都可以自动转换得,上面得String,和int,以及基本类型都是可以自动转换成我们Account中得参数的,例如Date日期类,我们就不能瞎串参数,SpringMVC只认识2021/02/12这样的日期,如果我们传入了2021-09-21它就会报错。
所以我们需要自写转换类型,这里我们就要用到Convert接口

并且需要在xml文件中配置自定义转换器

这样我们再提交表单的时候,就会按照我们自定义的日期格式来。
4)大家到这里肯定会问,原先的request和response就没有了吗,当然有,
这里不需要前端传入任何参数,就可以获取
/*servlet原生API测试
获取request和response*/
@RequestMapping(value = "/testServlet" )
public String testServlet(HttpServletRequest request, HttpServletResponse response){
System.out.println("执行了");
System.out.println(request);
HttpSession session = request.getSession();
System.out.println(session);
ServletContext servletContext = session.getServletContext();
System.out.println(servletContext);
System.out.println(response);
return "success";
本文介绍了如何在SpringMVC项目中实现Controller与页面的交互,包括使用@Controller注解、RequestMapping、视图解析器,并讲解了如何获取和处理前端传参,以及自定义数据类型转换。
1547





