Fork me on GitHub

JackLin的博客

当前位置:首页 > 标签

SpringBoot 14 Spring 2 SpringMVC 3 MyBatis 2 Linux 4 阿里云 13 宝塔 1 Docker 3 ElasticSearch 2 Redis 4 Shiro 0 Dubbo 0 Swagger 0 Thymeleaf 6 数据库 11 MySQL 11 外键 2 Gradle 1 Test 0 Tomcat 1 JavaWeb 7 Ajax 1 注解 3 css 2 报错 3 多数据源 1 Java基础 1 源码 2 Servlet 1 JSP 1 环境搭建 8 RabbitMQ 1 七牛云 1 Edit.md 1 图像识别 4 英语 2 Zookeeper 1

SpringBoot中Controller返回路径问题

  • 2020-04-15
  • 138
  • SpringBoot
### SpringBoot是如何根据路径寻址文件的 要想知道Controller中的返回路径究竟如何填写,我们就必须知道SpringBoot是如何解析我们写的路径的。 关于这部分内容,我们得首先从SpringMVC开始说起。 #### (1)SpringMVC中路径问题 熟悉SpringMVC的小伙伴都知道SpringMVC的基本访问流程,如何不熟悉的话可以参考我的这篇博客:xxx #### (2)SpringBoot中解析路径 和SpringMVC类似,我们也是需要找到他的视图解析器相关的配置文件。 `WebMvcAutoConfiguration` `ResourceProperties` 这类配置文件再SpringBoot中一般是xxxProperties.java 的格式;所以我们找到 `ThymeleafProperties.java` 在这个类里面我们可以很清楚的看到如下代码: ``` @ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8; public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html"; // 剩余代码... } ``` 是不是有种似曾相识的感觉,这里的 prefix = "spring.thymeleaf" 表示我们在 application.yaml 文件中进行相关的配置,需要以 spring.thymeleaf 开头。 接下来有3个常量: - DEFAULT_ENCODING 设置了一下Thymeleaf的默认编码 - DEFAULT_PREFIX 设置了解析时的前缀 - DEFAULT_SUFFIX 设置了解析时的后缀 就是说如果我们在Controller中直接返回一个字符串,例如 return "main"; 那么SpringBoot就会去 templates/static 目录下面去寻找以 main 开头, .html 结尾的文件,也就是去寻找 main.html 文件。 #### (3)关于重定向 如果在Controller中需要重定向,那么在开头尽量添加上 / ,避免出现不必要的麻烦,因为 / 代码根目录。 如果不加的话,而且在Controller类上面又添加l @ ResponeBody 注解,如下所示,可能出现资源找不到情况。 ``` @Controller @RequestMapping("/admin") public class BlogController { @RequestMapping("/addBlog") public String addBlog() { return "redirect:/admin/Blog"; } } ``` - 如果是 `return "redirect:/admin/Blog";` 那么地址栏将会显示 http://localhost/admin/Blog - 如果是 `return "redirect:admin/Blog";` 那么地址栏将会显示 http://localhost/admin/admin/Blog 前面多了一个 amdin,就是因为我们在类上面添加了 @ RequestMapping("/admin") 造成的原因 #### (4)关于部署到服务器上(本地可以运行,服务器上报500错误) ##### 1. 部署到服务器上的时候, return 语句前面不需要加上 /,否则会报错 ``` @RequestMapping("/Blog") public String blog(Model model) { // 逻辑代码 return "main/blog"; } ``` - 如上面代码所示,直接返回 "main/blog" 就行了,如果返回 "/main/blog" 就或报错 ##### 2. 需要严格的遵守Thymeleaf的相关规范 **例如,使用Thymeleaf抽取公共页面时,前面也不能加 / ** ``` <!-- 文章页面:头部导航栏--> <div th:replace="~{common/commonsfile::article-topbar}"></div> ``` - 第一个common前面不能加 /

SpringBoot项目中Ajax详解,结合@RequestBody和@ResponseBody

  • 2020-04-14
  • 153
  • SpringBoot
### 基本介绍 @ ResponseBody 和 @ RequestBody 经常在 Controller 层中使用,今天就结合Ajax来详解的介绍一下这两个注解。 #### @ RequestBody 用在参数前面 #####(1)前端Ajax传递的是JSON字符串 当前端发送的Ajax请求是传递的数据data是一个**JSON字符串**时,后端 Controller 层就可以使用 **@ ResponseBody** 注解结合 **Map** 来接收参数。 > 前端 ``` var inputTextObj = { "text": inputText }; $.ajax("/admin/tagGetSearchResult", { type: 'post', dataType: 'json', data: JSON.stringify(inputTextObj), //转换为字符串 contentType : "application/json", // 记得加上这个 }); ``` > 后端 ``` @RequestMapping("/tagGetSearchResult") @ResponseBody public String getSearchResult(@RequestBody HashMap<String, String> map) { String inputText = map.get("text"); // 获得Map里面的值(inputText) List<Tag> tags = tagService.queryLike(inputText); String str = JSON.toJSONString(tags); return str; } ``` #####(2)前端Ajax传递的是JSON对象 如果发送的Ajax的data是JSON对象,则后端可以直接使用 @ RequestParam 注解来接收参数,不需要使用 @ ResponseBody > 前端 ``` var dataObj = { "title": $('#article-title').val(), "blogid": tempBid, "my-editormd-markdown-doc": $("#my-editormd-markdown-doc").text(), "type": $('#my-type').val(), "original": original + '', "ifComment": ifComment + '', "tag": tagNames, // 标签名称 "published": '0', }; $.ajax("/admin/updateBlog", { type: "POST", data: dataObj, // 注意:这里传递的是一个 json 对象,后端需要利用 @RequestParam 注解 dataType: "text", // 返回的类型为纯文本字符串类型 traditional: true, }); ``` > 后端 ``` @RequestMapping("/updateBlog") @ResponseBody public String updateBlog(@RequestParam("blogid") String bid, @RequestParam("title") String title, @RequestParam("my-editormd-markdown-doc") String bcontent, @RequestParam("type") String typeName, @RequestParam("original") String orginal, @RequestParam("ifComment") String ifComment, @RequestParam("tag") String[] tags, @RequestParam("published") String published) { // 逻辑代码... } ``` #### @ ResponseBody 用在方法前面 表示直接返回一个字符串,处理Ajax请求时,如果后端查询出来的是一个 List 集合,那么可以转换为 JSON 字符串,结合 @ ResponseBody 返回。 - 具体可以看上面第(1)小点的后端代码 - 上面的 `JSON.toJSONString(tags);` 的 JSON 是使用的阿里巴巴的 FastJson,需要导入对应的依赖,如下: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> ```

SSM项目整合

  • 2020-03-21
  • 120
  • SSM
## 1. SSM 项目整合时遇到的问题 #### ==**(1) "通配符的匹配很全面,但无法找到元素 XXXXX"**== <img src="Images\image-20200314115528515.png" alt="image-20200314115528515" /> - 很可能是 Spring 的 xml 文件配置有问题,检查开头的 那几个地址,看是否有问题 > 解决办法,开头的地址做到一一匹配即可 > #### ==**(2)Failed to obtain JDBC Connection**== - 很可能是网络的原因或者这是 jdbc 的 url 的问题 > (1)修复网络问题,使得能连上互联网 > > > (2)URL 中的 useSSL 改为 false > #### **==(4) java.lang.NoClassDefFoundError java.lang.ClassNotFoundException==** - 很可能是添加了新的依赖之后,没有将对应的 jar 包添加的 WEB—INF的 lib 目录里面 > 重新添加一次,将所有的 jar 包添加的 WEB-INF 的 lib 目录里面 > #### (4) JDBC 更新数据失败 - 很可能是由于更新的时候忘记传递 id 属性了,导致找不到对象 > 可以利用隐藏域解决,在传递参数时同时传递id,但是用户不需要看到 (5)静态资源不能输出到 out 目录 - 还不知道是什么原因,但是在 pom.xml 中配置静态资源过滤时需要做一定的修改,改为false就行 ```xml <filtering>false</filtering> ``` (6)文件编码问题 说明创建的 xml 文件编码有问题,需要全部设置为 utf-8 ### 2. 原生 Servlet 项目