服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 基于spring mvc请求controller访问方式

基于spring mvc请求controller访问方式

2021-12-23 13:13攻城狮_java Java教程

这篇文章主要介绍了spring mvc请求controller访问方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

spring mvc请求controller访问

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

?
1
2
3
4
5
6
7
8
9
10
11
12
@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参数来区分访问不同的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@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进行匹配

?
1
2
3
4
5
6
7
8
9
10
11
@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标记在方法的参数上,利用它标记的参数可以利用请求路径传值

?
1
2
3
4
5
6
@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页面

?
1
2
3
4
5
6
7
8
9
10
<%@ 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页面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@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域对象,会将参数从第一个业务控制方法传入第二个业务控制方法

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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/u011332918/article/details/50600958

延伸 · 阅读

精彩推荐
  • Java教程选择Spring Boot项目的内嵌容器的理由

    选择Spring Boot项目的内嵌容器的理由

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了选择Spring Boot项目的内嵌容器,需...

    jianshu6072021-01-30
  • Java教程浅谈常用字符串与集合类转换的工具类

    浅谈常用字符串与集合类转换的工具类

    下面小编就为大家带来一篇浅谈常用字符串与集合类转换的工具类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    java教程网3842020-06-07
  • Java教程我们一起了解 Spring 中的 AOP !

    我们一起了解 Spring 中的 AOP !

    AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。它是面向对象编程(OOP)的一种补充,目前已成为一种比较成熟的编程方式。...

    程序员千羽10562021-10-27
  • Java教程详解Spring整合Ehcache管理缓存

    详解Spring整合Ehcache管理缓存

    本文先通过Ehcache独立应用的范例来介绍它的基本使用方法,然后再介绍与Spring整合的方法。...

    静默虚空5362020-09-03
  • Java教程详解Java修饰符

    详解Java修饰符

    Java语言提供了很多修饰符,主要分为以下两类:访问修饰符;非访问修饰符。修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的...

    请叫我头头哥2992020-07-18
  • Java教程优化Java虚拟机总结(jvm调优)

    优化Java虚拟机总结(jvm调优)

    这篇文章主要介绍了优化Java虚拟机总结(jvm调优),具有一定借鉴价值,需要的朋友可以参考下...

    Jack2048992021-03-14
  • Java教程Java File类的详解及简单实例

    Java File类的详解及简单实例

    这篇文章主要介绍了Java File类的详解及简单实例的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下...

    sunzone4502020-12-24
  • Java教程Springboot Websocket Stomp 消息订阅推送

    Springboot Websocket Stomp 消息订阅推送

    本文主要介绍了Springboot Websocket Stomp 消息订阅推送,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    代码大师麦克劳瑞8822021-09-30