我有一个基于Spring的Web应用程序。下面是web.xml
<display-name>testapp</display-name>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
我有一个index.jsp,其中包含以下代码。
<%response.sendRedirect("login");%>
现在,如果我使用网址http://localhost:8080/myapp访问我的应用,则会收到错误404,但如果我使用网址http://localhost:8080/myapp/访问我的应用,则可以访问登录页面。
在我的控制器类中,我有以下方法来处理/登录请求。
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loadLogin(Model model) {
model.addAttribute("loginForm", new LoginForm());
return "login";
}
这有什么区别?如何让http://localhost:8080/myapp(没有/)工作?我正在使用Internet Explorer访问应用程序。
答案 0 :(得分:0)
这里的问题是网址http://localhost:8080/myapp
不存在,因为您已在/
这是你的代码:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
然后当您尝试访问http://localhost:8080/myapp
时,您的服务器正在寻找任何不存在的/myapp
请求。
现在,如果您想要在应用程序结束时没有/
的情况下访问您的应用程序
你需要像这样改变你的定义servlet:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/myapp/*</url-pattern>
</servlet-mapping>
但你会创建一个新的控制器来处理这个/ myapp寻找你的视图。
[编辑]
@RequestMapping(value = "/myapp/login", method = RequestMethod.GET)
public String loadLogin(Model model) {
model.addAttribute("loginForm", new LoginForm());
return "login";
}