大家好,感谢邀请,今天来为大家分享一下contextpath的问题,以及和contextpath有什么用的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

在同一个页面中为什么contextpath会不同

${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%>。

contextpath(contextpath有什么用)

也就是取出部署的应用程序名或者是当前的项目名称

比如我的项目名称是demo1在浏览器中输入为${pageContext.request.contextPath}或<%=request.getContextPath()%>取出来的就是/demo1,而"/"代表的含义就是

故有时候项目中这样写${pageContext.request.contextPath}/a.jsp

绝对路径与相对路径的比较

1)采用相对路径遇到的问题

contextpath(contextpath有什么用)

相对路径固然比较灵活,但如果想**页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,**后必须修改每一个连接的路径。

如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。

如果采用Struts的Action返回页面,那么由于页面路径与 Action路径不同,使得浏览器无**确解释页面中的路径,如页面为/pages/cust/cust.jsp,图片所有目录为/images/title.gif,这时在/pages/cust/cust.jsp中的所用的路径为””,但是如果某一个Action的Forward指向这个JSP文件,而这个Action的路径为/cust/manage.do,那么页面内容中””就不再指向正确的路径了。

解决以上问题似乎只有使用绝对路径了。

2)采用绝对路径遇到的问题

着不同的Web应用发布方式,绝对路径的值也不同。如Web应用发布为MyApp,则路径”/MyApp/images/title.gif”是正确的,

但发布为另一应用时如MyApp2,这个路径就不对了,也许这个情况比较少,但以default方式发布Web应用时以上绝对路径也不

同:”/images/title.gif”。

二.解决方案

1)采用绝对路径,但为了解决不同部署方式的差别,在所有非struts标签的路径前加${pageContext.request.contextPath},如原路径为:

”/images/title.gif”,改为

“${pageContext.request.contextPath}/images/title.gif”。

代码”${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。

缺点:

操作不便,其他工具无**确解释${pageContext.request.contextPath}

2)采用相对路径,在每个JSP文件中加入base标签,如:

<base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp"/>

这样所有的路径都可以使用相对路径。

缺点:

对于被包含的文件依然无效。

真正使用时需要灵活应用1)和2),写出更加健壮的代码。

在使用的时候可以使用${pageContext.request.contextPath},也同时可以使用<%=request.getContextPath()%>达到同样的效果,同时,也可以将${pageContext.request.contextPath},放入一个JSP文件中,将用C:set放入一个变量中,然后在用的时候用EL表达式取出来。

springboot实现特定接口跳过context-path

答案:

在Spring Boot中要实现特定接口跳过context-path,可以通过配置来实现。

首先,在application.yml或application.properties文件中添加如下配置:

server.servlet.context-path=/yourContextPath

然后,对于特定接口,可以通过自定义RequestMappingHandlerMapping来实现。创建一个继承自RequestMappingHandlerMapping的类,例如:

public class CustomRequestMappingHandlerMapping extends RequestMappingHandlerMapping{

@Override

protected RequestCondition<?> getCustomTypeCondition(Class<?> handlerType){

return null;

}

@Override

protected RequestCondition<?> getCustomMethodCondition(Method method){

//这里可以根据方法名或其他条件判断是否是特定接口

if("特定接口方法名".equals(method.getName())){

return new CustomRequestCondition();

}

return null;

}

private static class CustomRequestCondition implements RequestCondition<CustomRequestCondition>{

@Override

public CustomRequestCondition combine(CustomRequestCondition other){

return this;

}

@Override

public int compareTo(CustomRequestCondition other, HttpServletRequest request){

return 0;

}

@Override

public RequestCondition<CustomRequestCondition> getMatchingCondition(HttpServletRequest request){

//这里设置跳过context-path

request.setAttribute(ServerWebExchangeUtils.ORIGINAL_REQUEST_URI_ATTR, request.getRequestURI());

request.setAttribute(ServerWebExchangeUtils.ORIGINAL_CONTEXT_PATH_ATTR,"");

return this;

}

}

}

最后,将这个自定义的RequestMappingHandlerMapping注册到Spring容器中,可以通过在配置类中添加如下代码:

@Configuration

public class WebMvcConfig implements WebMvcConfigurer{

@Override

public void configureHandlerMapping(RequestMappingHandlerMapping registry){

registry.setMappingComparator(new CustomRequestMappingHandlerMapping());

}

}

解释:

1.第一步配置server.servlet.context-path是设置整个应用的上下文路径。

2.创建自定义的RequestMappingHandlerMapping类,通过重写getCustomMethodCondition方法来判断是否是特定接口。

3.在CustomRequestCondition类中,通过设置request的属性来跳过context-path。

4.最后在配置类中注册这个自定义的RequestMappingHandlerMapping,使其生效。这样就能实现特定接口跳过context-path。

request.getContextPath在PHP中怎么写

1. GET是从服务器上获取数据,POST是向服务器传送数据。

2. GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3.对于GET方式提交表单数据,服务器端用$_GET[‘name’]获取变量的值,对于POST方式提交表单数据,服务器端用$_POST[‘name’]获取提交的数据,当然,两者都可以通过$_REQUEST[‘name’]获得表单数据。对于REQUEST方式提交表单数据,服务器端用$_REQUEST[‘name’]获取变量的值,但这种方式很少用。

4. GET传送的数据量较小,不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。但理论上,一般认为不能超过100KB。

5. GET安全性非常低,POST安全性较高。

6. GET表单值可以通过_GET获取;但通过action的url设置的参数总是获取不到的,<form method="get" action="a.asp?b=b">跟<form method="get"action="a.asp">是一样的,也就是说,在这种情况下,GET方式会忽略action页面后边带的参数列表。POST表单值可以通过_POST获取;但通过action的url参数设置的参数则可以不能通过_POST获取到。action=test.php?id=1这种就是GET方式传值,可以用$_REQUEST和$_GET接受传值,但不能用POST方式获取到值,即使表单是POST方式提交。所在,在提交表单时,如果action中同时有参数,最好只能通过POST表单方式,对于表单内数据,直接通过POST获取,对于action中参数,童工GET获取。

在做数据查询时,建议用GET方式,而在做数据添加、修改或删除时,建议用POST方式。

request是先读取 get再读post的,同时存在,即覆盖掉前面的变量。

专题推荐:

2026年扣篮大赛相关资讯

樊振东最新动态

2026世界杯动态

欧锦赛2024动态

2024年欧洲杯资讯