SpringMVC之注解RequestMapping

一、@RequestMaapping的基本介绍

            @RequestMaapping的功能就是将请求和处理请求和处理请求的控制器关联起来,建立映射关系,当DispathcerServlet接收到请求,会从Controller中找对应的方法来处理该请求。

eg:

@Controller
@RequestMapping("/test")
public class TestRequestMappingController {@RequestMapping("/hello")public String hello(){return "success";}
}

当浏览器中的请求是url/test,此时服务器端通过dispatcherservlet处理之后从此项目的配置文件中寻找控制器中与之对应的路径。

1、位置

可以放在类上也可以放在方法上:

        放在类上声明就是请求路径的初始信息

        放在方法上声明就是请求路径的具体信息

比如上面的例子,当想要实现hello页面的时候,具体的路径应为:url/test/hello,而不是url/hello。

  <a th:href="@{/test/hello}">测试RequestMapping</a><br/>

2、属性

        该注解中还有几个属性,这里只说说:value、method

        Value:

        其就是通过value属性的值匹配请求地址中的url。相当于

 @RequestMapping(value = {"/testRequestMapping", "/test"})

        method:

        与请求中的请求方式进行匹配,当满足时才可以调用对应的方法。

@RequestMapping( value = {"/testRequestMapping", "/test"}, method = {RequestMethod.GET, RequestMethod.POST} )

3、占位符

之后在SpringMVC中路径都是以RestFul的形式发送:
       
 原始方式:/deleteUser?id=1
 rest方式:/user/delete/1
        即就是不通过“?”来作为路径和属性了分割的标志了。所以对应的映射需要重新设置为如下格式:
        通过@PathVariable注解将请求中的数据赋给形参了。
<a th:href="@{/testRest/1/admin}">测试路径中的占位符-->/testRest</a><br>
@RequestMapping("/testRest/{id}/{username}") 
public String testRest(@PathVariable("id") String id,@PathVariable("username") String username)
{ System.out.println("id:"+id+",username:"+username); return "success"; }

当我们想要从一个页面上直接访问到一个特定的信息中可以用此方法。

比如QQ空间这类项目,在我们的空间中想要访问到指定好友的空间,就需要点击一些图片类的超链接,然而超链接中就有这些数据,我们只需要想办法接收即可。

二、获取请求参数

1、通过ServletAPI获取(老方法)

  <form th:action="@{/param/servletAPI}" method="get">用户名:<input type="text" name="username"><br/>密码:<input type="password" name="password"><br/><input type="submit" value="登录"><br/></form>
    @RequestMapping("/param/servletAPI")public String getParamByServletAPI(HttpServletRequest request){String username = request.getParameter("username");String password = request.getParameter("password");System.out.println("username:"+username+",password:"+password);return "success";}

2、通过控制器方法的形参直接获取        

    @RequestMapping("/param")public String getParam(@RequestParam(value = "userName",required = false,defaultValue = "hello") String username, String password){System.out.println("username:"+username+",password:"+password);return "success";}

        最简单的时候,我们都不需要设置@RequestParam这个注释来处理。只将控制器方法中的i形参和发送过来数据的name一致就能匹配上。

        @RequestParam是为了处理方法中的形参和name值不一致的时候,我们手动设置。

        value:请求中的name,具体指要将哪个值赋予方法中的形参。

        Required:指是否需要有值,当为true的时候,若没有值传过来就会报错。

        dafalueValue:是指当没有对应的值在请求中时我们赋予的默认参数,不管required的值时啥。只要没有值,就默认赋值。

3、通过pojo类获取

        这个很简单,只需要请求中的参数和参数名一一匹配即可。

    @RequestMapping("/param/pojo")public String getParamByPojo(User user){System.out.println(user);return "success";}

4、处理乱码的问题:

        需要有一个认知:最初只有serlvet的时候,我们都是通过Servlet的API:charactersetEncoding这段代码,放在代码的最初,来设置字符类型。但在SpringMVC下,我们的dispatcherServlet会处理所有的请求然后在通过配置文件扫描到我们对应的控制器中,然后匹配对应的方法。所以请求信息中有参数的时候,如果我们在方法里设置字符类型,已经不起作用了(因为已经接收到了,就差赋值给形参这一步了)。所以我们需要在web.xml配置文件中早早的设置这个字符类型。

        通过过滤器的方式来设置的:

 <filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><!--不但会设置请求的编码类型,也会设置响应的编码类型--><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/</url-pattern></filter-mapping>

三、域对象共享数据

现在只需要处理三个域类型即可,把page删了。

1、请求域:

        方法一:通过ServletAPI

@RequestMapping("/testServletAPI") 
public String testServletAPI(HttpServletRequest request)
{ request.setAttribute("testScope", "hello,servletAPI");return "success"; }

        方法二:使用ModelAndView(也是SpringMVC底层的代码)

  @RequestMapping("/test/mav")public ModelAndView testMAV(){/** modelAndView   包含model和view功能* model:向请求域中共享数据* view:设置逻辑视图实现页面跳转* */ModelAndView mav = new ModelAndView();//向请求域中共享数据mav.addObject("testRequestScope","hello.modelandView");//设置逻辑视图mav.setViewName("success");return mav;}

        方法三:使用Model(其实也是方法二的子类(或者是实现类))

    @RequestMapping("/test/model")public String testModel(Model model){model.addAttribute("testRequestScope","hello,model");return "success";}

2、Session和Application

        这两个一样,都是通过ServletAPI中的方法即可(老师讲说这个最简便)

@RequestMapping("/testSession") 
public String testSession(HttpSession session)
{ session.setAttribute("testSessionScope", "hello,session"); return "success"; }@RequestMapping("/testApplication") 
public String testApplication(HttpSession session)
{ 
ServletContext application = session.getServletContext(); application.setAttribute("testApplicationScope", "hello,application");return "success"; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVa11988 Broken Keyboard(练习链表使用)

向量和数组的优势是可以随机的存取元素和在末尾添加删除元素&#xff0c;而当插入元素时&#xff0c;需要移动大量的数据&#xff0c;消耗大量的时间。而链表的优势是可以在O(1)删除和插入数据。所以在频繁移动元素时&#xff0c;可以使用链表。 分析&#xff1a;如果用一个数组…

virtualbox配置apache_virtualbox 网络配置 (转)

http://www.vmbest.com/school/2-virtualbox-school/13-virtualbox-net-config-four-plan“网络”配置页面有4个方案&#xff1a;1&#xff1a;NAT 网络地址转换(Network Address Translation)2&#xff1a;Birdged Network 桥接3&#xff1a;Internal Network 内部网络(可以…

请领导批阅文件怎么说_领导说“谢谢”,该怎么回?低情商才说不客气,高情商的都这样说!...

职场中&#xff0c;当我们顺手帮了领导个小忙或者领导跟我们要工作资料&#xff0c;我们发给领导的时候&#xff0c;领导可能会顺口说“收到&#xff0c;谢谢”&#xff0c;这样的时候&#xff0c;其实领导就是表示收到了。我们如何回复&#xff0c;才不至于失了礼貌&#xff0…

387. First Unique Character in a String

Given a string, find the first non-repeating character in it and return its index. If it doesnt exist, return -1. Examples: s "leetcode" return 0.s "loveleetcode", return 2. 思路&#xff1a;扫一遍&#xff0c;用array记录char的重复次数。…

vue的简单学习

vue和thymeleaf &#xff1a; 若先显示框架后加载数据则用vue 若后端处理好之后发送给前端页面显示用thymeleaf (弹幕) 对于前后端分离的认识&#xff1a; 使用vue 将前端页面、框架等建立好&#xff0c;只需要后端发送数据即可 但thymeleaf就需要在服务器启动之前将数据保存到…

easyui下拉框option写死_JavaScript_jQuery+easyui中的combobox实现下拉框特效,1.第一种写法:Input框中显示: - phpStudy...

jQueryeasyui中的combobox实现下拉框特效1.第一种写法&#xff1a;Input框中显示&#xff1a;2. 第二种用法&#xff0c;在list列表中显示&#xff1a;类别3. 第二种的另一种写法&#xff1a;类别以上3种方法均可实现jQuery.easyui的下拉框特效&#xff0c;大家自由选择&#x…

Selleck --- 01Cookie

1. //1.设置Cookie function setCookie(name,value,days) {var date new Date();date.setDate(date.getDate() days);document.cookie name "" value ";expires" date; } console.log(setCookie("pwd","5566778899",1)); //获取c…

audino python_用 Python 实现 PowerDesigner 数据模型文件的处理

简述目前在银行研发中心做项目管理工作。我们单位的项目经理从需求、设计、编码到测试以及上线&#xff0c;都要有很大程度的参与。没有工具支持&#xff0c;很多事根本忙不过来、或者没法在有限的时间里保证项目质量。大概半年前开始接触PYTHON&#xff0c;多多少少写了一些能…

JS~~~ 前端开发一些常用技巧 模块化结构 命名空间处理 奇技淫巧!!!!!!...

前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;2016-09-29 17:16:39 #####背景&#xff1a; 前端开发过程中&#xff0c;创建js对象…

会移动的文字(Marquee)

Marquee标记用于在可用浏览区域中滚动文本。这个标记只适用于IE3以后的版的浏览器。 ??   格式&#xff1a; ??   <MARQUEE ALIGN"…" ??   BEHAVIOR"…" ??   BGCOLOR"…" ??   DIRECTION"…" ??   HEIGH…

vscode 英伟达tk1_英伟达的未来,不只是GPU

成立于1993年的英伟达&#xff0c;最为人熟知的就是他们的GPU。尤其是进入最近几年&#xff0c;因为AI的火热&#xff0c;英伟达GPU的关注度暴增&#xff0c;行业对他们在这个领域的认可程度也达到了前所未有的高度。但其实GPU只是英伟达的根本。历经过去几年的收购和产品线拓展…

语法2

页面(PAGE)标记(TAGS) HTML 文件结构(Document Structures)<html>...</html><head>...</head><body>...</body><HTML><HEAD> <title>, <base>, <link>, <isindex>, <meta></HEAD><…

生成n对括号的合法全排列

生成n对括号的合法全排列&#xff1a; 给定一整数N&#xff0c;输出N对括号的合法全排列 例&#xff1a; 2 3 ()() (()) ()()() (())() ()(()) ((())) 分析&#xff1a; 很经典的需要迭代来进行实现。 迭代的关键在于找到跳出迭代的条件&#xff0c;以及每次迭代的策略。 出口&…

springMVC 源码学习-请求映射原理

一、DispatcherServlet的继承关系 1、FrameworkServlet HttpServlet中的doGet等方法在FrameworkServlet之中重写了&#xff0c;都是调用该方法&#xff1a; 在这个方法内部调用doServlce的方法 这个doService的方法在FrameworkServlet中是一个抽象方法&#xff0c;说明是交给它…

constraintlayout布局新特性_AMD发布Ryzen PRO 4000系列移动处理器:多了超线程和商用安全特性...

昨日晚间&#xff0c;AMD正式发布了基于Renoir的最新一代商用移动处理器Ryzen PRO 4000系列&#xff0c;本次共发布3款处理器&#xff0c;分别是Ryzen 7 PRO 4750U、Ryzen 5 PRO 4650U和Ryzen 3 PRO 4450U&#xff0c;我们制作了规格对比表&#xff0c;如下&#xff1a;从规格对…

网页设计中HTML常范的五个错误

1.网页背景色的设置犯错机率&#xff1a;很大普遍性&#xff1a;较广犯错可能性&#xff1a;懒/不知道约2年前我曾发现21cn上出现过一次没有设置背景色的情况&#xff0c;当时我用Email通知了他们&#xff0c;自此之后这个问题我从没犯过。绝大部分人的窗口背景颜色都是白色&am…

mkdir与mkdirs的区别

项目中需要在代码中读取或创建文件保存路径&#xff0c;用到了mkdir&#xff0c;查看还有个mkdirs方法&#xff0c;这里记录一下两者的区别。 1、关于两者的说明如下&#xff1a; boolean mkdir() : 创建此抽象路径名指定的目录。 boolean mkdirs() : 创建此抽象路径名指定…

易支付系统源码_刷脸支付系统源码,插件源码合作模式有哪些,采购源码需要注意什么...

对刷脸支付比较关注的朋友&#xff0c;应该都知道源码。当拥有这个&#xff0c;就意味着有了独立的系统。也意味着可以打造自己的品牌&#xff0c;转化自己资源&#xff0c;获取更多的利润。但是想拥有一套源码也是不简单的&#xff0c;不仅因为编写的难度和价格&#xff0c;也…

网吧修改

Windows Registry Editor Version 5.00 (打开任务管理器) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]"DisableTaskMgr"dword:00000000 (恢复桌面右键菜单) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Poli…

SpringMVC源码-不同类型的参数解析

随便写一个demo: RequestMapping("/car/{id}")public Map<String, Object> getCar(PathVariable("id") Integer id,RequestParam("type") String type,RequestParam("hobby") List<String> hobby){Map<String, Object&…