springmvc-210805-01---使用斜杠时路径问题

SpringBoot升级至2.7.x版本后,双斜杠路径报错404问题的解决 阅读详情

springmvc-210805-01—使用斜杠时路径问题


相对 / 绝对地址

举例:http://localhost:8080/springmvc_21080501/doSome01.do

绝对地址:http://localhost:8080/springmvc_21080501(带有协议名称的)
相对地址:doSome01.do

请求页面不使用 " / "

在页面中不使用 " / " 
提交表单<form action="user/doSome01.do" method="post">
访问的地址是  ----->  http://localhost:8080/springmvc_21080501/user/doSome01.do

================================================================================================

不使用 " / " 情况下,index.jsp 发起请求,返回index.jsp,下面案例doSome03中,
如果不做任何处理,点击两下按钮,会出现404错误,导致地址路径变成:
	http://localhost:8080/springmvc_21080501/user/user/doSome03.do
	
	解决方案01:
		前面加上${pageContext.request.contextPath}
		
	解决方案02:
		加入html语言中的<base>标签,
		表示页面中没有  “ / ” 开头的地址,都是以base标签中的地址为参考地址,
		也就是  base标签中的地址 + user/doSome03.do  来访问。

请求页面使用 " / "

在页面中使用 " / " 
提交表单<form action="/user/doSome02.do" method="post">
访问的地址是  ----->  http://localhost:8080/user/doSome02.do

    这种方式的参考地址变成了 ------>  http://localhost:8080(这是服务器地址)
    缺少了项目名,所以导致访问不到路径。
    解决方案:
    	加上${pageContext.request.contextPath}
    	---->  <form action="${pageContext.request.contextPath}/user/doSome02.do">
    	
当项目中使用斜杠 “ / ” ,它会替代tomcat中的default。
导致所有的静态资源都交给DispatcherServlet处理,
 默认情况下,DispatcherServlet没有处理静态资源的能力。所以导致访问静态资源(html,js,图片,css等)都是404。

案例演示

index.jsp(只看这个两个就可)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>springmvc</title>
    <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
    <base href="http://localhost:8080/springmvc_21080501/"/>
</head>
<body>
    <form action="user/doSome01.do" method="post">
        <span>测试路径不带斜杠</span>
        <br/>
        <span>姓名:</span><input type="text" name="name"/>
        <br/>
        <span>年龄:</span><input type="text" name="age"/>
        <br/>
        <input type="submit" value="提交"/>
    </form>

    <hr/>

    <form action="${pageContext.request.contextPath}/user/doSome02.do">
        <span>测试路径带斜杠</span>
        <br/>
        <span>姓名:</span><input type="text" name="name"/>
        <br/>
        <span>年龄:</span><input type="text" name="age"/>
        <br/>
        <input type="submit" value="提交"/>
    </form>

    <hr/>

    <!--
        如果访问两次这个路径,也就是点击两次doSome03的按钮,路径就会变成:↓↓↓↓↓
                http://localhost:8080/springmvc_21080501/user/user/doSome03.do
        导致地址找不到了,出现404错误。
    -->
    <form action="user/doSome03.do" method="post">
        <span>测试路径不带斜杠,返回index.jsp页面</span>
        <br/>
        <span>姓名:</span><input type="text" name="name"/>
        <br/>
        <span>年龄:</span><input type="text" name="age"/>
        <br/>
        <input type="submit" value="返回index.jsp页面"/>
    </form>
<%--    <a href="user/doSome03.do">返回index.jsp页面</a>--%>
</body>
</html>

MyController.java(只看这个两个就可)

package com.bgy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
//@RequestMapping("/test")
public class MyController {

    @RequestMapping(value = "/user/doSome01.do")
    public ModelAndView doSome01(String name , Integer age){

        ModelAndView mv = new ModelAndView();
        mv.addObject("u_name",name);
        mv.addObject("u_age",age);
        mv.addObject("message","测试路径不带斜杠");

        mv.setViewName("/WEB-INF/view/show01.jsp");

        System.out.println("doReturnStringView---->"+name+" : "+age);

        return mv;
    }

    @RequestMapping(value = "/user/doSome02.do")
    public ModelAndView doSome02(String name , Integer age){

        ModelAndView mv = new ModelAndView();
        mv.addObject("u_name",name);
        mv.addObject("u_age",age);
        mv.addObject("message","测试路径带斜杠");

        mv.setViewName("/WEB-INF/view/show02.jsp");

        System.out.println("doReturnStringView---->"+name+" : "+age);

        return mv;
    }


    @RequestMapping(value = "/user/doSome03.do")
    public ModelAndView doSome03(String name , Integer age){

        ModelAndView mv = new ModelAndView();
        mv.addObject("u_name",name);
        mv.addObject("u_age",age);
        mv.addObject("message","测试路径带斜杠,返回index页面");

        /**
         * 如果访问两次就会资源找不到,因为它是拼接的
         */
        mv.setViewName("/index.jsp");

        System.out.println("doReturnStringView---->"+name+" : "+age);

        return mv;
    }
}

show01.jsp / show02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>show</title>
</head>
<body>
    <span>message:${message}</span>
    <br/>
    <span>姓名:${u_name}</span>
    <br/>
    <span>年龄:${u_age}</span>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

  <!-- 配置过滤器,解决post请求中文乱码问题 -->
  <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>

    <!-- 强制请求对象(HttpServletResponse)使用encoding编码的值 -->
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>

    <!-- 强制应答对象(HttpServletRequest)使用encoding编码的值 -->
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>


  <servlet-mapping>
    <!--
        当项目中使用斜杠 “ / ” ,它会替代tomcat中的default。
        导致所有的静态资源都交给DispatcherServlet处理,
        默认情况下,DispatcherServlet没有处理静态资源的能力。所以导致访问静态资源(html,js,图片,css等)都是404。
    -->
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 开启组件扫描 -->
    <context:component-scan base-package="com.bgy.controller"></context:component-scan>

    <!-- 声明springmvc框架中的视图解析器,帮助开发人员设置视图文件的路径 -->
<!--    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
<!--        &lt;!&ndash; 前缀 &ndash;&gt;-->
<!--        <property name="prefix" value="/WEB-INF/view/"></property>-->
<!--        &lt;!&ndash; 后缀 &ndash;&gt;-->
<!--        <property name="suffix" value=".jsp"></property>-->
<!--    </bean>-->

    <!-- 注册驱动 -->
    <mvc:annotation-driven/>

    <!--
        第一种解决静态资源处理方式:
            需要在springmvc配置文件加入<mvc:default-servlet-handler>
            原理:
                加入这个标签后,框架会创建控制器对象DefaultServletRequestHandler(类似我们自己创建的MyController),
                DefaultServletRequestHandler这个对象再把请求转发给tomcat的default这个servlet

        这种方式的好处就是方便,不过它归根还是依赖于tomcat等服务的default的servlet。有局限性。
    -->
    <mvc:default-servlet-handler/>
</beans>
【ZZULIOJ】郑州轻工业大学oj题解整合 写在前面 关于ZZULIOJ题解 学习编程,想要巩固无非就是刷题或者做项目,然后因为我大一开始是刷郑轻的题目,就想着自己整合一下自己写的题目。既是复习也是笔记吧。 题解(内有题目描述) 1000 整数a+b 1001 植树问题 1002 简单多项式求值 1003 两个整数的四则运算 1004 三位数的数位分离 1005 整数幂 1006 求等差数列的和 1007 鸡兔同笼 1008 美元和人民币 1009 求平均分 1010 求圆的周长和面积 1011 圆柱体表面积 1012 求绝对值 1013 求两点间 阅读详情

相关推荐

手把手教你用示波器实测CAN总线波形:快速区分高速、低速及常见故障

本文详细介绍了如何使用示波器实测CAN总线波形,快速区分高速CAN总线和低速CAN总线,并诊断常见故障。通过实战案例和波形分析,帮助工程师掌握CAN总线信号特征,提升故障排查效率,适用于汽车电子和工业控制领域。

weixin_33217202的博客 410

关于URL路径中双斜杠的识别和转化

此外,根据[[3](https://stackoverflow.com/questions/39432945/is-there-a-way-to-handle-double-slash-in-url-in-spring-rest-controller)]的讨论,如果双斜杠在路径的中间,大多数 Web 服务器和框架都可以正确解析和转换。例如,根据[[1](https://aws.amazon.com/cn/api-gateway/faqs/)]的描述,AWS API 网关在安全方面对路径设置了较高的级别。

技术广场 2638

Tushare使用教程

@Tushare简易教程 Python财经数据接口Tushare 最近在看量化分析有关的东西,然后第一步先了解的就是如何获取股票交易数据。发现大部分教程都是关于Tushare的,于是在这里简单的介绍一下Tushare的用法吧。目前tushare有免费版本和升级的需要付费的Pro版本。大多数教程写的都是免费版本,但是pro版本提供的数据更多,但是由于本人入坑还不深,暂时还是用的免费版本,但是每次使用都收到提示,“本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/documen

kuangzhi9124的博客 2万+

SpringMVC请求(相对)路径中的斜杠(/)问题

在SpringMVC中,请求路径前(针对于相对路径)是否加上斜杠(/),会引起不同响应,从而对结果的正确性造成影响。这里就记录一下SpringMVC请求路径中的斜杠问题。

qq_29511515的博客 1万+

Ubuntu安装有线网卡驱动

问题:插入网线后,无法识别有线连接。 原因:主板有线网卡的型号和系统中网卡的驱动不匹配 解决 前提条件: 需要连wifi通网,因为需要安装dkms,和下载驱动。 删除原驱动 1、查看网卡型号 lspci | grep net 我的网卡型号是8125 2、查看网卡驱动 lspci -k 网卡驱动是r8169 3、卸载网卡驱动 找出位置 modinfo r8169 | grep filename 然后删除 rm path/r8169.ko 卸载驱动 rmmod r8169 查看是否卸载成功 lsm

weixin_43932656的博客 1万+

Navcat最新版的激活和安装教程(全网最靠谱,最快捷的方式)

现在最新版本navcat已经出到了16.3了,并且新版navcat也支持连接redis和图标等更多样化的功能,但是比较头疼的一件事就是,只能试用14天。那么接下来小编教大家如何用最简单的方式使用最新版navcat16.

weixin_50737119的博客 2万+

Spring MVC 路径前加斜杠(/)和不加斜杠的区别?

前言:昨天搭建完了springmvc项目的框架,但是发现自己访问页面始终访问不了,经过仔细看代码发现: 在路径跳转的时候我在路径的前面多加了一个/斜杠,这样导致请求的路径发生了错误,下面就来给大家分享一下关于路径前斜杠的问题 一、关于请求路径: 一个正确的请求路径才可以访问到服务器的资源,请求路径由资源路径和资源名称组成 例如:http://localhost:8080/springmvc/test/hello 其中http://localh...

立志欲坚不欲锐,成功在久不在速度 5145

【Dify】知识库智能检索应用

本文介绍了一个基于大语言模型的知识库检索系统,实现从自然语言提问到智能回答的自动化流程。该系统通过知识检索节点定位相关信息,利用重排序模型优化结果,最后由大语言模型生成自然语言答案。核心模型包括InternLM2-7B和BCE重排序模型。工作流程包含输入问题、检索重排序、智能生成和答案输出四个阶段,适用于企业知识管理、客户支持、教育培训等多种场景,能显著提升信息检索效率和准确性。文章还提供了相关开发文档链接,涵盖AIGC工具平台搭建、常见问题解决等内容。

Mr数据杨 1000

spring security关于URL中包含双斜杠被权限拦截的处理

今天测试提了个bug,说某个接口被权限拦截了,无法调用成功,但是接口明明已经过滤拦截了,postman亲测无问题,问什么还会导致被拦截呢,然后检查后发现,接口URL中包含一个双斜杠导致出现这个问题。 public class StrictHttpFirewall implements HttpFirewall { /** 省略甚多东西 */ /** * Checks wheth...

程冯冯的博客 2万+

《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记

软件工程任务:即时缺陷预测(涉及SE+AI知识)

weixin_43646592的博客 701

交换机四种光互联技术:OIO、OBO、NPO与CPO

在过去几十年里,数据中心交换机主要依赖电信号通过铜线进行数据传输。然而,随着数据传输速率从100Gbps向400Gbps、800Gbps甚至1.6Tbps迈进,传统电互联(Electrical Input & Output, EIO)面临三大瓶颈:信号衰减、功耗激增和空间限制。例如,高速信号在长距离铜线传输中会产生严重的信号失真,迫使设计者加入数字信号处理器(DSP)来补偿信号衰减,这进一步推高了功耗和成本。此外,传统可插拔光模块的体积较大,限制了端口密度,难以满足现代数据中心对高带宽密度的需求。

网络技术联盟站 3132

SpringMVC——控制器方法的返回值类型(ModelAndView、String、void、Object)

SpringMVC——控制器方法的返回值类型(ModelAndView、String、void、Object)

贝尔摩德苦艾酒 1万+

金融监管压力测试场景生成

压力测试是一种评估金融资产或机构在极端市场条件下的表现和风险承受能力的方法。它通过模拟各种不利的市场情景,测试金融机构在这些情景下的财务状况和运营能力。压力测试的作用在于帮助金融机构识别潜在风险,评估应对策略,并制定应急预案。总结压力测试场景生成系统的开发过程和实现效果,强调其在金融监管中的重要性和应用价值。随着金融市场的发展,实时压力测试将越来越重要。未来,压力测试需要更加注重实时性和动态性,及时反映市场的变化。本文详细介绍了金融监管压力测试的重要性、核心概念、算法原理、系统架构以及实战案例。

AI天才研究院 1208

关于SpringMVC返回数据带斜杠字符串问题之解决方案

关于SpringMVC返回数据带斜杠字符串问题之解决方案

10年职场两茫茫,35岁凄凉奈若何 304

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

四、配置SpringMVC文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.sp

weixin_45915206的博客 160

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

关于文件路径的反斜杠正斜杠和双斜杠问题

1 C文件路径为什么要用双斜杠 因为 \ 在 C/C++/C# 中是转义前导字符,例如 \n 代表换行。 如果路径中刚好有类似转义字符开头的,那么就会引起问题,所以路径中的 \ 必须用 \\ 的形式。   2 Windows的路径中表示文件层级为什么会用反斜杠「\」,而UNIX系统都用斜杠「/」? Windows 用反斜杠(“\”)的历史来自 DOS,而 DOS 的另一个传统是用斜杠

Studying…… 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java通俗易懂30天 第19天:多线程(下)

文章目录 文章目录文章目录第8章 多线程线程的生命周期线程的同步同步代码块处理实现Runnable的线程安全问题同步代码块处理继承Thread类的线程安全问题同步方法处理实现Runnable的线程安全问题同步方法处理继承Thread类的线程安全问题线程安全的单例模式之懒汉式死锁的问题Lock锁方式解决线程安全问题线程的通信sleep()和wait()的异同经典例题:生产者/消费者问题JDK5.0新增线程创建方式创建多线程的方式三:实现Callable接口使用线程池的好处创建多线程的方式四:使用线程池 ..

程序员小刘 1651

linux服务器双斜杠问题//导致找不到静态文件问题

springboot的controller返回view的html路径在linux部署的情况下找不到: 报错日志:找不到“checkresult//routine”的路径 原因:linux一般不支持双斜杠的//的路径 2020-11-27 21:56:51 | ERROR | http-nio-4251-exec-6 | TemplateEngine.java:1136 | org.thymeleaf.TemplateEngine | [THYMELEAF][http-nio-4251-exec-6] Exc

leomoon 1951

springmvc中关于相对路径前加不加斜杠‘/’的区别

一、请求路径 一个正确的请求路径应该是由资源路径+资源名称组成 http://localhost:8080/sk_war_exploded/login.do为绝对路径 http://localhost:8080/sk_war_exploded为资源路径 login.do为资源名称 相对路径:/login.do就是一个相对路径,相对路径会依赖于一个其他路径作为参照路径,与这个参照路径组合去定位一个资源,即参照路径+相对路径=绝对路径 二、相对路径前是否加上斜杠(/),会产生不同的效果 2.1、路径解析在

qq_52740442的博客 2797

spring 前台界面和control的交互 modelAndView

接收参数的方式: 1.HttpServletRequest方式接收 ? 1 2 3 4 5 6 7 public ModelAndView test1(HttpServletRequest req){ String userName = req.getParameter("userName"); String password = req.getParame...

dickzhu的专栏 529

SpringMVC请求路径问题(路径前面加不加/的问题)

一、请求路径 一个正确的请求路径应该是由资源路径+资源名称组成 http://localhost:8080/sk_war_exploded/login.do为绝对路径 http://localhost:8080/sk_war_exploded为资源路径 login.do为资源名称 相对路径:/login.do就是一个相对路径,相对路径会依赖于一个其他路径作为参照路径,与这个参照路径组合去定位一个资源, 绝对路径=参照路径+相对路径 二、相对路径前是否加上斜杠(/),会产生不同...

weixin_42672802的博客 9907

SpringMVC学习笔记(1)——DispatcherServlet中央调度器、创建第一个springmvc项目

SpringMVC简介 SpringMVC :是基于spring的一个框架, 实际上就是spring的一个模块, 专门是做 web 开发的。可以理解是servlet的一个升级。 web 开发底层是servlet , 框架是在servlet基础上面加入一些功能,让你做 web 开发方便。 SpringMVC就是一个Spring。 Spring是容器,ioc能够管理对象,使用<bean>, @Component, @Repository, @Service, @Controller SpringMV

weixin_43721056的博客 1214
上一篇: springmvc-210804-01---解决在web.xml中url-pattern使用斜杠访问静态资源
下一篇: springmvc-210805-02---ssm整合流程
白光一
博客等级 码龄9年 0粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值