如何映射主页(/)

时间:2016-01-15 15:05:20

标签: openshift

我已成功将.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");

}

感谢任何帮助。感谢

2 个答案:

答案 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页面中指定了此代码,则意味着会话对象将不可用于该页面。因此,无法为该页面维护会话。 (只是把它放在那里而不是我的问题的必要)。

我将向您展示我的项目结构现在如何:

Eclipse Project Director Structure

在问题的早期,我问我是否需要在web.xml中更改任何内容。不,我不是。那里一切都很好。

如果您认为这有用,请提出问题和答案。感谢