2016-01-15 55 views
1

我已成功将我的.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

好吧,现在我知道如何去做。第一步是这样的:https://stackoverflow.com/a/23981486/4828463尽管将我的.war文件重命名为ROOT.war非常重要,但我在重要的位置丢失了一个重要的.jsp文件(现在这个解决方案对我的问题非常重要,可能对我有用你也是)。我在我的Web应用程序的根目录中添加了“index.jsp”。并在里面它我有

<%@ 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页面中指定了此代码,则表示会话对象将不可用于该页面。因此会话无法维护该页面。 (只是把它放在那里没有为我的问题neccassary)。

我会告诉你我的项目结构看起来像现在:

Eclipse Project Director Structure

在我询问我是否需要修改web.xml中的任何问题早。不,我不知道。那里一切都很好。

如果您觉得此内容有帮助,则表明回答问题。谢谢

1

与通常的Spring应用程序建议的是使用诸如URL的重写:默认情况下

在web.xml

<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使用同样的配置部署!并以您想要的方式工作

+0

亲爱的主席先生,这看起来如此复杂和太多我的要求。我认为我只缺少'/'或一些。非常容易但容易忽略的东西。在其他尝试失败后,我会研究您的解决方案。感谢您的回答,虽然 –

+0

我的问题解决了。检查下面的答案xD –