如何映射首页url(/)
How to map home url (/)
我已成功将我的 .WAR 文件部署到 openshift.com。
为了访问我的网站,我必须输入 url: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");
}
感谢任何帮助。谢谢
与 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/</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/</to>
</rule>
<rule>
<from>/j_spring_security_logout**</from>
<to last="true">/j_spring_security_logout/</to>
</rule>
<rule>
<from>/**</from>
<to>/app/</to>
</rule>
<outbound-rule>
<from>/app/**</from>
<to>/</to>
</outbound-rule>
</urlrewrite>
这应该足够了,我在 openshift 中使用这个完全相同的配置进行部署!并按照您想要的方式工作
好的,现在我知道怎么做了。第一步是这样的: 虽然将我的 .war 文件重命名为 ROOT.war 很重要,但我在重要位置丢失了一个重要的 .jsp 文件(现在这个解决方案是特别是我的问题。它可能对你也有帮助)。我在 Web 应用程序的根目录下添加了 "index.jsp"。在里面我有
<%@ page session="false" %>
<c:redirect url="/main" />
这里主要需要的是第二行。它将所有呼叫重定向到 http://app-domain.rhcloud.com/ to http://app-domain.rhcloud.com/main, which I actually need. I just type http://demo-farazdurrani.rhcloud.com/ and it redirects it to http://demo-farazdurrani.rhcloud.com/main
第一行是可选的(我的解决方案不需要)并且这样做:这是不需要参与会话的页面。或者,如果此代码在 JSP 页面中指定,则意味着会话对象将不可用于该页面。因此无法为该页面维护会话。 (虽然我的问题不需要把它放在那里)。
我现在将向您展示我的项目结构:
在问题的前面,我问我是否需要更改 web.xml 中的任何内容。不,我不知道。那里一切都很好。
如果您认为这有帮助,请为问题和答案投票。谢谢
我已成功将我的 .WAR 文件部署到 openshift.com。 为了访问我的网站,我必须输入 url: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");
}
感谢任何帮助。谢谢
与 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/</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/</to>
</rule>
<rule>
<from>/j_spring_security_logout**</from>
<to last="true">/j_spring_security_logout/</to>
</rule>
<rule>
<from>/**</from>
<to>/app/</to>
</rule>
<outbound-rule>
<from>/app/**</from>
<to>/</to>
</outbound-rule>
</urlrewrite>
这应该足够了,我在 openshift 中使用这个完全相同的配置进行部署!并按照您想要的方式工作
好的,现在我知道怎么做了。第一步是这样的: 虽然将我的 .war 文件重命名为 ROOT.war 很重要,但我在重要位置丢失了一个重要的 .jsp 文件(现在这个解决方案是特别是我的问题。它可能对你也有帮助)。我在 Web 应用程序的根目录下添加了 "index.jsp"。在里面我有
<%@ page session="false" %>
<c:redirect url="/main" />
这里主要需要的是第二行。它将所有呼叫重定向到 http://app-domain.rhcloud.com/ to http://app-domain.rhcloud.com/main, which I actually need. I just type http://demo-farazdurrani.rhcloud.com/ and it redirects it to http://demo-farazdurrani.rhcloud.com/main
第一行是可选的(我的解决方案不需要)并且这样做:这是不需要参与会话的页面。或者,如果此代码在 JSP 页面中指定,则意味着会话对象将不可用于该页面。因此无法为该页面维护会话。 (虽然我的问题不需要把它放在那里)。
我现在将向您展示我的项目结构:
在问题的前面,我问我是否需要更改 web.xml 中的任何内容。不,我不知道。那里一切都很好。
如果您认为这有帮助,请为问题和答案投票。谢谢