关于springboot转发重定向以及受保护目录的一些规律

今天闲来无事,又研究了一下springboot,涉及到了Thymeleaf模板引擎,因为之前接触过jsp,所以上手很快,但是也思考了一些关于转发以及重定向的问题,总结出以下规律

项目结构

这里写图片描述

首先解释一下每个文件夹的作用,如果你是用的是idea创建的springboot项目,会在项目创建的一开始resources文件夹下自动创建static以及templates文件夹。也就是说项目初始时有java、resource、static以及templates 这几个文件夹。
一般static下存放js以及css样式文件,templates存放html页面。
以上是默认会创建的文件夹以及其作用
下面我们来说一下转发和重定向的规律。
首先static文件夹以及templates文件夹是受保护的,也就是说相当于你将文件放到了传统的ssh或ssm项目的WEB-INF下了。所以也就是说这两个文件夹下的文件是无法通过url直接访问的,以至于在springmvc下使用重定向会报404。

那么希望直接访问的html或者css该如何存放呢?

方式一
我们可以在resources下创建一个名为public的文件夹,顾名思义,放在此文件夹下的文件是共有的,可以直接通过url访问,当然也可以springmvc重定向访问啦。
方法二
在main下创建webapp文件夹,将文件放到此文件夹下,效果同上
注!文件夹名字是固定的,起别的名字还是会报404或者无效
好,说到这里,有的同学应该就会有疑问了,我分别创建了public和webapp而且还起了相同名字的html页面,我访问会进到哪一个?
首先:最好还是不要这么做,明明两个文件夹效果一样,又何必呢?看个人需求选择一种方式就好啦。
但是:事实结果告诉我们,被优先选择的是webapp下的文件,如图
这里写图片描述

关于springmvc控制转发还是重定向的写法问题。

转发

/**
 * Created by beyondLi on 2017/6/2.
 */
@Controller
public class ThymeleafController {
    @RequestMapping(value = "cs")
    public String cs(Model model) {
        return "index";
    }
}

转发是不需要手动加html的,此时springboot发现是转发,默认配置下他会自动去templates文件夹下找到对应的文件进行转发,如果return后写的是index.html会报404

重定向

@Controller
public class ThymeleafController {
    @RequestMapping(value = "cs")
    public String cs(Model model) {

        return "redirect:index.html";
    }

首先,添加redirect:这个毋庸置疑是mvc的语法问题,其次这里需要注意的是需要手动添加.html,否则会报404,而重定向则会自动去public文件夹下寻找。至于与webapp优先级别则同上述。

结论

以上为本人在研究springboot时所想到的问题以及找到的一些规律(默认配置下)。至于上述规律的一些原因如果有兴趣的同学可以研究一下,毕竟本人研究的还比较浅显,如果有什么错误,还望提出,共同学习。

### 实现 Spring Boot 中 JSP 页面的重定向跳转 在 Spring Boot 应用程序中处理 JSP 页面之间的重定向可以通过控制器中的 `redirect:` 前缀来完成。当返回字符串前加上此前缀时,Spring 将其解释为重定向指令。 #### 控制器方法示例 为了展示如何执行重定向操作,在控制器类里定义的方法可以如下所示: ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @Controller public class TodoController { @PostMapping("/addTodoItem") public String addNewTodo(RedirectAttributes redirectAttrs) { // 处理新增待办事项逻辑... // 添加闪存属性以便于目标页面访问数据 redirectAttrs.addFlashAttribute("message", "成功添加新项目"); // 返回带 'redirect:' 前缀的目标 URL 或视图名称 return "redirect:/todoList"; } } ``` 上述代码片段展示了向 `/addTodoItem` 发送 POST 请求后会触发该方法,并最终重定向到名为 `/todoList` 的路径上[^1]。 #### 使用 Flash 属性传递消息 有时希望在一次请求之后立即显示某些临时性的通知给用户,比如确认信息或错误提示。这可通过 `RedirectAttributes` 对象实现,它允许设置一次性使用的模型属性——即所谓的“flash attributes”。这些属性仅能在下一次 HTTP 请求期间被读取并自动清除。 #### 配置 Thymeleaf 和 JSP 支持 (如果尚未配置) 尽管本案例专注于 JSP 技术栈,但值得注意的是,默认情况下 Spring Boot 更倾向于像 Thymeleaf 这样的模板引擎而非传统的 JSP 文件作为前端渲染工具。因此,对于那些想要继续沿用 JSP 来构建界面的人来说,可能还需要额外调整应用程序的相关依赖项以及配置文件以确保正确加载和解析 JSP 资源
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值