我已成功将.WAR文件部署到openshift.com。 要访问我的网站,我必须输入此网址:http://demo-farazdurrani.rhcloud.com/main
你看到" .com"我必须键入" / main"。当我只输入没有' / main'的网站名称时,它会抛出未找到的404资源'错误。我只想输入http://demo-farazdurrani.rhcloud.com/(或者更好地删除' /')它应该会自动打开我的主页面。
这是我的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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-app_3_0.xsd"
metadata-complete="false">
<display-name>Advanced Mappings Demo Application</display-name>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspf</url-pattern>
<page-encoding>UTF-8</page-encoding>
<scripting-invalid>true</scripting-invalid>
<include-prelude>/WEB-INF/jsp/base.jspf</include-prelude>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
<default-content-type>text/html</default-content-type>
</jsp-property-group>
</jsp-config>
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
这是我的onStartUp方法(我以编程方式配置):
@Override
public void onStartup(ServletContext container) throws ServletException
{
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(RootContextConfiguration.class);
container.addListener(new ContextLoaderListener(rootContext));
AnnotationConfigWebApplicationContext servletContext =
new AnnotationConfigWebApplicationContext();
servletContext.register(WebServletContextConfiguration.class);
ServletRegistration.Dynamic dispatcher = container.addServlet(
"springDispatcher", new DispatcherServlet(servletContext)
);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
container.getServletRegistration("default").addMapping("/resources/*", "*.css", "*.js", "*.png", "*.gif", "*.jpg");
}
感谢任何帮助。感谢
答案 0 :(得分:1)
使用spring应用程序通常建议使用url的重写器,如:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>yourservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>yourservlet</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
默认情况下,将读取您的WEB-INF目录中的urlrewrite.xml,其中包含类似的内容:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite default-match-type="wildcard">
<rule>
<from>/resources/**</from>
<to>/resources/$1</to>
</rule>
<rule>
<from>/spring_security_login</from>
<to last="true">/spring_security_login</to>
</rule>
<rule>
<from>/j_spring_security_check**</from>
<to last="true">/j_spring_security_check/$1</to>
</rule>
<rule>
<from>/j_spring_security_logout**</from>
<to last="true">/j_spring_security_logout/$1</to>
</rule>
<rule>
<from>/**</from>
<to>/app/$1</to>
</rule>
<outbound-rule>
<from>/app/**</from>
<to>/$1</to>
</outbound-rule>
</urlrewrite>
这应该足够了,我在openshift中使用这个相同的配置进行部署!并以你想要的方式工作
答案 1 :(得分:0)
好的,现在我知道怎么做了。第一步是这样的:https://stackoverflow.com/a/23981486/4828463虽然将我的.war文件重命名为ROOT.war很重要,但我在一个重要位置缺少一个重要的.jsp文件(现在这个解决方案特别适用于我的问题。它可能是也可能对你有所帮助)。我添加了&#34; index.jsp&#34;在我的Web应用程序的根目录。在里面我有
<%@ page session="false" %>
<c:redirect url="/main" />
这里需要的主要内容是第二行。它会将所有调用重定向到http://app-domain.rhcloud.com/到http://app-domain.rhcloud.com/main,这实际上是我需要的。我只需输入http://demo-farazdurrani.rhcloud.com/,然后将其重定向到http://demo-farazdurrani.rhcloud.com/main
第一行是可选的(我的解决方案不需要)并且正在执行此操作:需要的页面不需要参与会话。或者,如果在JSP页面中指定了此代码,则意味着会话对象将不可用于该页面。因此,无法为该页面维护会话。 (只是把它放在那里而不是我的问题的必要)。
我将向您展示我的项目结构现在如何:
在问题的早期,我问我是否需要在web.xml中更改任何内容。不,我不是。那里一切都很好。
如果您认为这有用,请提出问题和答案。感谢