Day01SpringMVC三重架构--和页面的交互数据基础

本文介绍了如何在SpringMVC项目中实现Controller与页面的交互,包括使用@Controller注解、RequestMapping、视图解析器,并讲解了如何获取和处理前端传参,以及自定义数据类型转换。

【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";
    

        

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hpeacheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值