SpringMVC学习04之数据处理及跳转

复习

使用注解开发SpringMVC实现步骤:

  1. 新建一个web项目
  2. 导入相关jar包
  3. 编写web.xml , 注册DispatcherServlet
  4. 编写springmvc配置文件
  5. 接下来就是去创建对应的控制类 , controller
  6. 最后完善前端视图和controller之间的对应
  7. 测试运行调试.

一、数据处理示例

1.创建普通Maven项目后,添加web框架

2.配置web.xml配置文件,改为最新的4.0版本

<?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">
</web-app>

3.在web.xml配置注册DispatcherServlet

<!--1.注册DispatcherServlet-->
   <servlet>
       <servlet-name>springmvc</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
       <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:springmvc-servlet.xml</param-value>
       </init-param>
       <!--启动级别-1-->
       <load-on-startup>1</load-on-startup>
   </servlet>

   <!--/ 匹配所有的请求;(不包括.jsp)-->
   <!--/* 匹配所有的请求;(包括.jsp)-->
   <servlet-mapping>
       <servlet-name>springmvc</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>

4.配置springmvc-servlet.xml配置文件,名称:springmvc-servlet.xml,说明,这里的名称要求是按照官方来的。


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

   <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
   <context:component-scan base-package="com.kuang.controller"/>
   <!-- 让Spring MVC不处理静态资源 -->
   <mvc:default-servlet-handler />
   <!--
   支持mvc注解驱动
       在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>

</beans>

5.由于包被扫描,被迫创建Controller

测试1:获取表单中的姓名
package com.shan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class EncodingController {

    @RequestMapping("/e/t")
    public String test(Model model, String name){
        System.out.println(name);
        model.addAttribute("msg",name); //获取表单提交的值
        return "test"; //跳转到test页面显示输入的值
    }

}

创建一个前端的表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>form</title>
</head>
<body>
<form action="/e/t" method="post">
    <input type="text" name="name">
    <input type="submit">
</form>
</body>
</html>
测试2:获取一个对象信息
package com.shan.controller;

import com.shan.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/t1")
    public String test1(@RequestParam("name") String name, Model model){
        //1.接收前端参数
        System.out.println("前端接收的参数"+name);
        //2.将返回的结果传递给前端,Model
        model.addAttribute("msg","前端接收的参数"+name);
        //3.视图跳转
        return "test";

    }

    @RequestMapping("/t2")
    public String test2(User user, Model model){
        //1.接收前端参数,判断参数的名字,假设名字直接在方法上,可以直接使用;
        //  假设传递的是一个对象User,匹配User对象的字段名,如果名字一样则ok,否则匹配不到
        System.out.println("前端接收的参数"+user);
        //2.将返回的结果传递给前端,Model或者ModeMap(它的作用更多一点)
        model.addAttribute("msg","前端接收的参数"+user);
        //3.视图跳转
        return "test";
    }

}

需要实体类

package com.shan.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data @AllArgsConstructor @NoArgsConstructor
public class User {

    private int id;
    private String name;
    private int age;

}

这里就不创建表单了,我们直接用携带参数的请求
http://localhost:8080/user/t2id=1&name=%E5%B0%8F%E9%BB%91%E7%A5%9E&age=18
在这里插入图片描述

6.创建视图层,获取前端视图

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

7.配置Tomcat运行

记得将依赖包导入到tomcat中,否则会出现找不到依赖包的错误!!!

测试1结果:

在这里插入图片描述

测试2结果:

在这里插入图片描述

后台输出:在这里插入图片描述

二跳转示例

步骤重复的我就不写了,你们看也会视觉疲劳!
创建一个控制器来实现不同的跳转!

package com.shan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ModelTest {
    //无Model视图解析器就需要 全限定名
    //有视图控制器默认是转发,重定向需要加前缀redirect:
    @RequestMapping("/m/t1")
    public String test1(Model model){
        model.addAttribute("msg","ModelTest1");
        //默认为转发
        return "test";
    }
    @RequestMapping("/m/t2")
    public String test2(){
       //重定向加redirect:
        return "redirect:/index.jsp";
    }

}

第一个请求是注释掉视图控制器进行的,我们自己new了一个Model来携带视图和数据并让其显示在前端
第二个请求是有视图控制器进行的,并让其重定向到index页面,默认就是直接转发,重定向需要加上redirect:

三、小结

请使用80%的时间打好扎实的基础,剩下18%的时间研究框架,2%的时间去学点英文,框架的官方文档永远是最好的教程。

作者有话说

博客创作不易,希望看到这里的读者动动你的小手点个赞,如果喜欢的小伙伴可以一键三连,作者大大在这里给大家谢谢了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值