假设以下应用程序格局:
+-----------------+
| App server |
+-----------------+
| | +-------+
| ear1 | | |
| +-web1 (/ctx1) +--<-- http://localhost/ctx1/xxx/ --+ +--<-- http://www.example.com/xxx/
| | | |
| | | proxy |
| ear2 | | |
| +-web2 (/ctx2) +--<-- http://localhost/ctx2/yyy/ --+ +--<-- http://abc.example.com/yyy/
| | | |
+-----------------+ +-------+
如您所见,代理(nginx
在我的情况下)是将请求转发到单个应用程序服务器实例,该实例又具有多个具有不同上下文路径的Web模块。当然,我不希望我的公共服务器公开内部上下文根,并且代理服务器可以很好地完成工作,包装和拆开http请求等。但是仍然存在一个大问题:JSF生成的html代码(链接,css,js资源,表单动作)包含上下文路径,/ctx1
并/ctx2
在我的情况。那就是我要避免的。
除了使用越来越多的应用服务器实例(域),导致我的硬件资源逐渐消失之外,我目前没有任何解决方案。据我了解,我需要用一些包装器扩展我的JSF应用程序,这些包装器可能已在中注册faces- config.xml
,这将删除生成的html中的上下文前缀。也欢迎任何其他解决方案。
请指出正确的方向。
我正在发布解决方案,这可能会对其他面临相同问题的人有所帮助。我要做的就是实现自己的javax.faces.application.ViewHandler
并将其注册到faces- config.xml
:
public class CustomViewHandler extends ViewHandlerWrapper {
private ViewHandler wrappped;
public CustomViewHandler(ViewHandler wrappped) {
super();
this.wrappped = wrappped;
}
@Override
public ViewHandler getWrapped() {
return wrappped;
}
@Override
public String getActionURL(FacesContext context, String viewId) {
String url = super.getActionURL(context, viewId);
return removeContextPath(context, url);
}
@Override
public String getRedirectURL(FacesContext context, String viewId, Map<String, List<String>> parameters, boolean includeViewParams) {
String url = super.getRedirectURL(context, viewId, parameters, includeViewParams);
return removeContextPath(context, url);
}
@Override
public String getResourceURL(FacesContext context, String path) {
String url = super.getResourceURL(context, path);
return removeContextPath(context, url);
}
private String removeContextPath(FacesContext context, String url) {
ServletContext servletContext = (ServletContext) context.getExternalContext().getContext();
String contextPath = servletContext.getContextPath();
if("".equals(contextPath)) return url; // root context path, nothing to remove
return url.startsWith(contextPath) ? url.substring(contextPath.length()) : url;
}
}
faces-config.xml:
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<view-handler>test.CustomViewHandler</view-handler>
</application>
</faces-config>
"The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Send
请参考:http://www.kancloud.cn/manual/thinkphp/1866
Apache 提供了基于正则表达式规则动态修改传入的请求的 URL 的方法。这用于以自己喜欢的任意方法映射任意 URL 到你的内部 URL 结构。 它支持无限的规则,以及为每个规则附加条件,从而提供了一个真正灵活且强大的 URL 操作机制。URL 操作可以依赖于各种测试,例如服务器变量,环境变量,HTTP 头,时戳,甚至外部数据库查询等,以便完成 URL 单元匹配。 这个模块在服务器上下文 (),
在我的大数据项目中,我必须开发一个JSOUP脚本来获取巴黎2018年气象数据并存储它们 我尝试了user\u Agent的所有解决方案,但都有相同的错误(URL在浏览器上工作) 错误显示在第8天,这样他可以在8次请求后检测到这是一个机器人。
我正在尝试解决类似于员工名册的问题。我面临的问题是,每次我运行求解器时,它都会生成不同的任务。这使得更难调试为什么选择特定案例而不是另一个案例。为什么会这样? 附注:我的任务有许多硬性限制,可能无法全部满足(大多数情况下,我仍然看到一些负面的硬性评分)。所以我的终止策略是基于< code > unimprovedSecondsSpentLimit 。会不会是这个原因?
当我们基本完成程序的设计,我们就可以编写代码了,它是对我们的解决方案的实施。 版本一 例10.1 备份脚本——版本一 #!/usr/bin/python # Filename: backup_ver1.py importos importtime # 1. The files and directories to be backed up are specified in a list. sour