新纪录学习创作1(@RequestMapping、HttpServletRequest)

2023-11-15

1、@RequestMapping

用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需注意@RequestMapping用在类上可以没用,但是用在方法上必须有。

@Controller
@RequestMapping("device/")
public class DeviceController {
	@Autowired
	DeviceService deviceService;
 
	@RequestMapping("toDeviceImportPage")
	public String toDeviceImportPage() {
		return "page/deviceRecord/deviceImport";
	}
  1. @RequiresPermissions 权限
@RequestMapping("/getRoleList")
	@RequiresPermissions("sys:role:list")
	@ResponseBody
	public ResultUtil getRoleList(Integer page,Integer limit) {
		return adminServiceImpl.selRoles(page, limit);
	}
  1. @Autowired 与@Resource的区别?

两者均可装配bean或写在setter方法上。

@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false),如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired() @Qualifier("baseDao")
 
private BaseDao baseDao;

@Resource(这个注解属于J2EE的)默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

@Resource(name="baseDao")
private BaseDao baseDao;
  1. @RequestParam和@RequestBody的区别?
    RequestParam注解接收的参数是来自于requestHeader中,即请求头,也就是在url中,格式为xxx?username=123&password=456

RequestBody注解接收的参数则是来自于requestBody中,即请求体中。

如果为get请求时,后台接收参数的注解应该为RequestParam,如果为post请求时,则后台接收参数的注解就是为RequestBody。
get请求
在这里插入图片描述
post请求
在这里插入图片描述
5. @RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

6.HttpServletRequest介绍:
  HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
getRequestURL方法返回客户端发出请求时的完整URL。
 getRequestURI方法返回请求行中的资源名部分。

  String requestUrl = request.getRequestURL().toString();//得到请求的URL地址
     String requestUri = request.getRequestURI();//得到请求的资源

获得客户机请求头

getHeader(string name)方法:String
  getHeaders(String name)方法:Enumeration
  getHeaderNames()方法
  
  String headValue = request.getHeader(headName);//根据请求头的名字获取对应的请求头的值

获得客户机请求参数(客户端提交的数据)
getParameter(String)方法(常用)
getParameterValues(String name)方法(常用)
getParameterMap()方法(编写框架时常用)

/**

10

* 获取客户端通过Form表单提交上来的参数
11  */
12 public class RequestDemo03 extends HttpServlet {
13 
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16         //客户端是以UTF-8编码提交表单数据的,所以需要设置服务器端以UTF-8的编码进行接收,否则对于中文数据就会产生乱码
17         request.setCharacterEncoding("UTF-8");
18         /**
19          * 编  号(文本框):
20            <input type="text" name="userid" value="NO." size="2" maxlength="2">
21          */
22         String userid = request.getParameter("userid");//获取填写的编号,userid是文本框的名字,<input type="text" name="userid">
23         /**
24          * 用户名(文本框):<input type="text" name="username" value="请输入用户名">
25          */
26         String username = request.getParameter("username");//获取填写的用户名
27         /**
28          * 密&nbsp;&nbsp;码(密码框):<input type="password" name="userpass" value="请输入密码">
29          */
30         String userpass = request.getParameter("userpass");//获取填写的密码
31         String sex = request.getParameter("sex");//获取选中的性别
32         String dept = request.getParameter("dept");//获取选中的部门
33         //获取选中的兴趣,因为可以选中多个值,所以获取到的值是一个字符串数组,因此需要使用getParameterValues方法来获取
34         String[] insts = request.getParameterValues("inst");
35         String note = request.getParameter("note");//获取填写的说明信息
36         String hiddenField = request.getParameter("hiddenField");//获取隐藏域的内容
37         
38         String instStr="";
39         /**
40          * 获取数组数据的技巧,可以避免insts数组为null时引发的空指针异常错误!
41          */
42         for (int i = 0; insts!=null && i < insts.length; i++) {
43             if (i == insts.length-1) {
44                 instStr+=insts[i];
45             }else {
46                 instStr+=insts[i]+",";
47             }
48         }
49         
50         String htmlStr = "<table>" +
51                             "<tr><td>填写的编号:</td><td>{0}</td></tr>" +
52                             "<tr><td>填写的用户名:</td><td>{1}</td></tr>" +
53                             "<tr><td>填写的密码:</td><td>{2}</td></tr>" +
54                             "<tr><td>选中的性别:</td><td>{3}</td></tr>" +
55                             "<tr><td>选中的部门:</td><td>{4}</td></tr>" +
56                             "<tr><td>选中的兴趣:</td><td>{5}</td></tr>" +
57                             "<tr><td>填写的说明:</td><td>{6}</td></tr>" +
58                             "<tr><td>隐藏域的内容:</td><td>{7}</td></tr>" +
59                         "</table>";
60         htmlStr = MessageFormat.format(htmlStr, userid,username,userpass,sex,dept,instStr,note,hiddenField);
61         
62         response.setCharacterEncoding("UTF-8");//设置服务器端以UTF-8编码输出数据到客户端
63         response.setContentType("text/html;charset=UTF-8");//设置客户端浏览器以UTF-8编码解析数据
64         response.getWriter().write(htmlStr);//输出htmlStr里面的内容到客户端浏览器显示
65     }
66 
67     public void doPost(HttpServletRequest request, HttpServletResponse response)
68             throws ServletException, IOException {
69         doGet(request, response);
70     }
71 }

在服务器端使用getParameterMap方法接收表单参数,代码如下:

           //request对象封装的参数是以Map的形式存储的
 2         Map<String, String[]> paramMap = request.getParameterMap();
 3         for(Map.Entry<String, String[]> entry :paramMap.entrySet()){
 4             String paramName = entry.getKey();
 5             String paramValue = "";
 6             String[] paramValueArr = entry.getValue();
 7             for (int i = 0; paramValueArr!=null && i < paramValueArr.length; i++) {
 8                 if (i == paramValueArr.length-1) {
 9                     paramValue+=paramValueArr[i];
10                 }else {
11                     paramValue+=paramValueArr[i]+",";
12                 }
13             }
14             System.out.println(MessageFormat.format("{0}={1}", paramName,paramValue));
15         }

POST方式提交中文数据乱码产生的原因和解决办法
客户端是以UTF-8编码传输数据到服务器端的,所以需要设置服务器端以UTF-8的编码进行接收,否则对于中文数据就会产生乱码

request.setCharacterEncoding("UTF-8");
String userName = request.getParameter("userName");

GET方式提交中文数据乱码产生的原因和解决办法
对于以get方式传输的数据,request即使设置了以指定的编码接收数据也是无效的(至于为什么无效我也没有弄明白),默认的还是使用ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /**
         *
         * 对于以get方式传输的数据,request即使设置了以指定的编码接收数据也是无效的,默认的还是使用ISO8859-1这个字符编码来接收数据
         */
        String name = request.getParameter("name");//接收数据
        name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题
        System.out.println("name:"+name);
}

@Param和@RequestParam是什么关系呢?其实它们没有关系,就跟Java和JavaScript,雷锋和雷锋塔一样,拥有相似的外表,其实作用是不一样的,@Param是地处Dao层,是为了传递多个参数,解决的是可读性和直观性;而@RequestParam是位列Controller层,作用是为获取前端参数,解决的是前后端参数不一致的问题。所以它们没有关系!

正则表达式:.eq(applet::getid) 表示类applet中的getid属性(可能其他类中也有这个属性,所有 指定一个类)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新纪录学习创作1(@RequestMapping、HttpServletRequest) 的相关文章

  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

    我创建了一个 RestController 如下所示 RestController public class GreetingController RequestMapping value greetings method RequestM
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 通过 appassembler-maven-plugin 生成的脚本无法在 Spring Boot 应用程序中找到主类

    我使用 appassembler maven plugin 生成的启动脚本有问题 我有一个基本的 spring boot 应用程序 只有一个类 SpringBootApplication public class ScriptDemoApp
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu

随机推荐

  • linux下安装jenkins

    参考文档 如何在Linux CentOS7 环境搭建 Jenkins 服务器环境 爱码网 1 官网下载安装 官网 Redhat Jenkins Packages sudo wget O etc yum repos d jenkins rep
  • Linux安全扫描工具ClamAV安装及使用

    导语 Clam AntiVirus ClamAV 是免费而且开放源代码的防毒软件 软件与病毒码的更新皆由社群免费发布 ClamAV在命令行下运行 它不将杀毒作为主要功能 默认只能查出系统内的病毒 但是无法清除 需要用户自行对病毒文件进行处理
  • Csharp:WebClient and WebRequest use http download file

    Csharp WebClient and WebRequest use http download file 20140318 塗聚文收錄 string filePath 20140302 pdf string fileName http
  • Unity - 射线检测

    Unity 射线检测 本文简要分析了Unity中各类 射线检测 的基本原理及用法 及不同检测手段的性能对比 内容包括 Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 BoxCast SphereCast Ca
  • 学习黑马JVM的笔记

    JVM详解 一 JVM介绍 1 什么是JVM 2 有什么好处 3 学习路线 二 内存结构 1 程序计数器 Program Counter Registe 1 定义 2 作用 3 特点 4 演示 2 虚拟机栈 Java Virtual Mac
  • 通过socket获取对方ip地址

    struct sockaddr in sa int len sizeof sa if getpeername sockfd struct sockaddr sa len printf 对方IP s inet ntoa sa sin addr
  • GDI/GDI+/D2D/D3D

    GDI GDI D2D D3D 标签 GDID3D 2015 07 27 11 28 503人阅读 评论 0 收藏 举报 分类 Windows系统 7 原文链接 2D Drawing APIs in Windows 在 Windows 7
  • 微服务之服务网关(GateWay)

    服务网关 概述 什么是网关 为什么需要网关 GateWay实现网关 spring cloud 2 0 概念 Route 路由 工作流程 搭建 动态路由 Predicate 断言 注意 Filter 过滤 自定义过滤器 todo gatewa
  • 亲测有效!电脑系统自己停止或休眠了怎么办?如何禁止系统休眠断网?

    亲测有效 电脑系统自己停止或休眠了怎么办 如何禁止系统休眠断网 新安装的操作系统 在开启一段时间无人操作的情况下 经常发现电脑休眠了 或者网络断开了 这种情况如何解决 上干货 电脑休眠 睡眠问题 1 打开控制面板 找到 电源选项 2 更改电
  • 前端神器avalonJS入门(一)

    http www 360doc com content 14 1031 20 21412 421521791 shtml avalonJS是司徒正美开发和维护的前端mvvm框架 可以轻松实现数据的隔离和双向绑定 相比angularJS等前端
  • vscode使用ftp-sync快速上传项目代码到服务器(宝塔ftp为例)

    使用vscode开发工具小伙伴们可以在vscode搜一下ftp sync这个插件 然后点击下载安装 2 使用快捷键 Ctrl Shift P命令 输入ftp sync Init 然后选中执行 3 执行上述命令快速生成 vscode ftp
  • 面向对象编程三大特征

    面向对象三大特征 封装 继承 多态的概述以及其优点 static static表示静态 是Java中的一个修饰符 可以修饰成员方法 成员变量 可以直接通过类名调用 静态变量 特点 被该类所有对象共享不属于对象 属于类 静态变量随着类的加载而
  • Scanner中nextInt()和nextLine()详解(秒懂)

    直接上代码 输出结果 结果分析 nextInt 和nextLine 顺序互换代码如下 输出结果 结果分析 解决方法 可以将nextLine 用next 替换 两者nextLine 执行之前再加一个空nextLine 让这个空的清楚掉回车符再
  • 【Xilinx Vivado时序分析/约束系列5】FPGA开发时序分析/约束-IO时序分析

    在之前介绍的是FPGA内部的时序分析 包括以下几种情况 寄存器与寄存器之间 输入PAD 输入时钟 与寄存器之间 寄存器与输出 PAD 输出时钟 之间 输入PAD 输入时钟 与输出PAD 输出时钟 现在就开始分析FPGA与外部的其他器件的连接
  • python numpy格式化打印

    1 问题描述 在使用numpy的时候 我们经常在debug的时候将numpy数组打印下来 但是有的时候数组里面都是小数 数组又比较大 打印下来的时候非常不适合观察 这里主要讲一下如何让numpy打印的结果更加简洁 2 问题解决 这里需要使用
  • matlab参数方程画曲线

    求x2 3x 1 0 x 5 0 1 5 y1 x x 3x 1 y2 zeros size x plot x y1 x y2 f x xx 3x 1 x1 fzero f 0 5 x2 fzero f 2 5 x 0 2 1 8 2 5
  • vue获取url中的参数值,this.$route.query

    如果有的参数可传可不传 可以使用 传参 例如 http 192 168 1 12 8080 detail id 123 获取的时候 let id this route query id 一 在vue组件单页面中获取页面参数 watch ro
  • devops(后端)

    1 前言 该devpos架构为gitlab jenkins harbor k8s 项目是java项目 流程为从gitlab拉取项目代码到jenkins jenkins通过maven将项目代码打成jar包 通过dockerfile构建jdk环
  • WINDBG 驱动调试命令

    windbg 符号加载 首先添加符号 打开 windbg 工具栏 file gt Symbol File Path 写入路径如下所示 SRV E tools win7 sp1 x86 然后勾选左下角的Reload 确定 执行下面执行强制加载
  • 新纪录学习创作1(@RequestMapping、HttpServletRequest)

    1 RequestMapping 用来处理请求地址映射的注解 可用于类或方法上 用于类上 表示类中的所有响应请求的方法都是以该地址作为父路径 用于方法上 表示在类的父路径下追加方法上注解中的地址将会访问到该方法 此处需注意 RequestM