基于spring mvc请求controller访问方式

目录
  • spring mvc请求controller访问
    • 1.一个Controller里含有不同的请求url
    • 2.采用一个url访问
    • 3.RequestMapping在Class上
    • 4.在SpringMVC中常用的注解
  • springmvc请求一次,访问多个controller方法
    • 举例
    • 结论

spring mvc请求controller访问

1.一个Controller里含有不同的请求url

@Controller  //类似Struts的Action
public class TestController {
    @RequestMapping("test/login.do")  // 请求url地址映射,类似Struts的action-mapping
    public String testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) {
        // @RequestParam是指请求url地址映射中必须含有的参数(除非属性required=false)
        // @RequestParam可简写为:@RequestParam("username")
        if (!"admin".equals(username) || !"admin".equals(password)) {
            return "loginError"; // 跳转页面路径(默认为转发),该路径不需要包含spring-servlet配置文件中配置的前缀和后缀
        }
        return "loginSuccess";
    }
}

2.采用一个url访问

通过url参数来区分访问不同的方法

@Controller
@RequestMapping("/test2/login.do")  // 指定唯一一个*.do请求关联到该Controller
public class TestController2 {
        @RequestMapping
    public String testLogin(String username, String password, int age) {
        // 如果不加任何参数,则在请求/test2/login.do时,便默认执行该方法

        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
            return "loginError";
        }
        return "loginSuccess";
    }
    @RequestMapping(params = "method=1", method=RequestMethod.POST)
    public String testLogin2(String username, String password) {
        // 依据params的参数method的值来区分不同的调用方法
        // 可以指定页面请求方式的类型,默认为get请求

        if (!"admin".equals(username) || !"admin".equals(password)) {
            return "loginError";
        }
        return "loginSuccess";
    }

    @RequestMapping(params = "method=2")
    public String testLogin3(String username, String password, int age) {
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
            return "loginError";
        }
        return "loginSuccess";
    }
}

3.RequestMapping在Class上

可看做是父Request请求url,而RequestMapping在方法上的可看做是子Request请求url,父子请求url最终会拼起来与页面请求url进行匹配

@Controller
@RequestMapping("/test3/*")  // 父request请求url
public class TestController3 {
    @RequestMapping("login.do")  // 子request请求url,拼接后等价于/test3/login.do
    public String testLogin(String username, String password, int age) {
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
            return "loginError";
        }
        return "loginSuccess";
    }
}

4.在SpringMVC中常用的注解

还有@PathVariable,@RequestParam,@PathVariable标记在方法的参数上,利用它标记的参数可以利用请求路径传值

@Controller  //类似Struts的Action
public class TestController {
 @RequestMapping(value="/comment/{blogId}", method=RequestMethod.POST)
 public void comment(Comment comment,@PathVariable int blogId) throws IOException {
 }
}

springmvc请求一次,访问多个controller方法

有一个需求:请求一次,访问多个controller中的方法

比如:先执行查询操作,再将查询出来的内容更新(当然也可以将方法写到bo中,在controller中直接调用bo的方法,这里只是举个例子)

举例

JSP页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>在一个action中执行两个方法</title>
</head>
<body>
1 哈哈 7000
<a href="${pageContext.request.contextPath}/emp/find?id=1" rel="external nofollow"  style="text-decoration:none">编辑</a>
</body>
</html>

Controller页面

@Controller
@RequestMapping("/emp")
public class EmpAction {
    @RequestMapping(value="/find")
    public String findEmpById(int id) throws Exception{
        System.out.println("查询"+id+"号员工信息");

        //转发到EmpAction的另一个方法中去,即再次发送请求
//        return "forward:/emp/update";

        //重定向到EmpAction的另一个方法中去,即再次发送请求
        return "redirect:/emp/update.action?id=" + id;
    }

    @RequestMapping(value="/update")
    public String updateEmpById(int id,Model model) throws Exception{
        System.out.println("更新" + id +"号员工信息");
        model.addAttribute("message","更新员工信息成功");
        return "success";
    }
}

结论

1. ModelAndView并不能实现两个方法之间的数据传递;

2. 可以通过Session来进行传递。

有多种方法可以实现Session传递

方法1:将HttpServletRequest作为方法形参 通过request.getSession().addAttribute

方法2:将HttpSession作为方法形参

方法3:通过@SessionAttribute+@ModelAttribute来进行传递

使用HttpSession来存取数据,不过这样又在springmvc中使用了servlet的内容,并不好

3. 使用转发。在转发情况下,共享request域对象,会将参数从第一个业务控制方法传入第二个业务控制方法

return"forward:/emp/update.action";

4. 重定向不共享参数,所以要带参数才行

return "redirect:/emp/update.action?id="+ id;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 如何在springMVC的controller中获取request

    这篇文章主要介绍了如何在springMVC的controller中获取request,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getReque

  • 使用springmvc的controller层获取到请求的数据方式

    目录 content-type 1.application/x-www-form-urlencoded 1.1 String 参数值=reqeust.getParameter("参数名"); 1.2 Map<String,String[]> paramMap=request.getParameterMap(); 2.multipart/form-data 3.text/xml 4.application/json 4.1 页面请求的数据获取 4.1.1 页面js请求如下 4

  • SpringMVC中Controller类数据响应的方法

    目录 1. 方法返回值类型 2. 页面跳转 2.1 直接返回字符串 2.2 返回 ModelAndView 对象 2.3 视图前缀和后缀 2.3 重定向和转发 3. 回写数据 3.1 直接返回字符串 3.2 返回对象或集合 上篇博客我们了解了请求参数的获取,那么获取到请求参数之后,需要对参数进行出来,然后进行数据响应.那么这篇博客我们就来了解 Controller 类如何进行数据响应. 1. 方法返回值类型 在 web 阶段我们也了解过数据响应,我们可以简单的将数据响应分为:页面跳转和回写数据

  • 关于Spring MVC在Controller层中注入request的坑详解

    前言 记一次为了节省代码没有在方法体中声明HttpServletRequest,而用autowire直接注入所钻的坑 结论:给心急的人. 直接在Controller的成员变量上使用@Autowire声明HttpServletRequest,这是线程安全的! @Controller public class TestController{ @Autowire HttpServletRequest request; @RequestMapping("/") public void test

  • 基于spring mvc请求controller访问方式

    目录 spring mvc请求controller访问 1.一个Controller里含有不同的请求url 2.采用一个url访问 3.RequestMapping在Class上 4.在SpringMVC中常用的注解 springmvc请求一次,访问多个controller方法 举例 结论 spring mvc请求controller访问 1.一个Controller里含有不同的请求url @Controller //类似Struts的Action public class TestContro

  • 基于Spring MVC 简介及入门小例子(推荐)

    一.什么是 Spring MVC Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面,是一个强大灵活的 Web 框架.Spring MVC 提供了一个 DispatcherServlet 作为前端控制器来分配请求.通过策略接口,Spring 框架是高度可配置的.Spring MVC 还包含多种视图技术,如 Java Server Pages(JSP).Velocity.Tiles.iText 和 POI 等.Spring MV

  • Java spring mvc请求详情介绍

    目录 一.源码执行流程 二.源码执行流程图 三.spring mvc中的一核心组件 四.源码分析 五.获取组件相关逻辑: 六.获取参数,执行方法源码分析 七.渲染视图逻辑 前言: 本文源码基于spring-framework-5.3.10. mvc是spring源码中的一个子模块! 一.源码执行流程 用户发送请求至前端控制器DispatcherServlet. DispatcherServlet收到请求调用处理器映射器HandlerMapping.处理器映射器根据请求url找到具体的处理器,生成

  • 完整的医院就诊挂号系统基于Spring MVC + Spring + MyBatis实现

    目录 一.语言和环境 二.实现效果 三.实现代码 资源下载:点此下载 一.语言和环境 1.实现语言: JAVA语言. 2.环境要求: MyEclipse/Eclipse + Tomcat + MySQL. 3.使用技术: Spring MVC + Spring + MyBatis 或 JSP + Servlet + JavaBean + JDBC. 二.实现效果 实现能够对患者姓名,医师类别.科室的模糊查询,用户点击核销以后状态变为已就诊. 点击挂号实现基本信息的添加 三.实现代码 数据库: S

  • Spring MVC请求参数的深入解析

    请求参数解析 客户端请求在handlerMapping中找到对应handler后,将会继续执行DispatchServlet的doPatch()方法. 首先是找到handler对应的适配器. HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); 进入到getHandlerAdapter(mappedHandler.getHandler())方法中 protected HandlerAdapter getHandler

  • Spring MVC中@Controller和@RequestMapping注解使用

    目录 @Controller和@RequestMapping注解使用 RequestMapping注解类型 通过@RequestParam接收请求参数 SpringMVC应用@Autowired和@Service进行依赖注入 通过org.springframework.web.bind.annotation.ModelAttribute 拦截器的配置 @RequestMapping和Controller方法返回值 @RequestMapping Controller方法返回值 @Controll

  • 基于Spring Mvc实现的Excel文件上传下载示例

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring mvc的项目如何搭建,传送门在这里. 这次就基于这个工程,继续实现上传下载的小例子.需要做下面的事情: 1 增加index.html,添加form提交文件 2 引入commons-fileupload.commons-io.jxl等工具包 3 创建upload download接口 4 注入mul

  • Spring MVC传递接收参数方式小结

    目录 一.通过实体Bean接收请求参数 二.通过处理方法的形参接收请求参数 三.通过HttpServletRequest接收请求参数 四.通过@PathVariable接收URL中的请求参数 五.通过@RequestParam接收请求参数 六.通过@ModelAttribute接收请求参数 大家在开发中经常会用到Spring MVC Controller来接收请求参数,主要常用的接收方式就是通过实体对象以及形参等方式.有些用于GET请求,有些用于POST请求,有些用于两者. 下面的几种常见的后台

  • Spring MVC请求参数接收的全面总结教程

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentResolver,此接口有众多子类,分别处理不同(注解类型)的参数,下面只列举几个子类: RequestParamMethodArgumentResolver:解析处理使用了@RequestParam注解的参数.MultipartFile类型参数和Simple类型(如long.int)参数. Reques

  • Spring MVC请求参数与响应结果全局加密和解密详解

    前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.timestamp,long类型,时间戳. 2.data,String类型,实际的业务请求数据转化成的Json字符串再进行加密得到的密文. 3.sign,签名,生成规则算法伪代码是SHA-256(data=xxx&timestamp=11111),防篡改. 为了简单起见,加密和解密采用AES,对称秘钥

随机推荐