Java 已调用Spring MVC控制器,但获取404渲染视图
如果有人在其他地方回答了我的问题,我首先表示歉意,但是一些广泛的谷歌搜索网站到目前为止没有发现任何对我有帮助的东西,所以我想在这里问一下 因此,我有一个SpringMVC应用程序,我正在尝试使用注释来映射它,虽然对于某些请求它工作正常,但对于其他请求,即使在控制器被调用之后,我也会得到404 所以,这是我的设置 web.xml:Java 已调用Spring MVC控制器,但获取404渲染视图,java,spring,jsp,spring-mvc,tomcat,Java,Spring,Jsp,Spring Mvc,Tomcat,如果有人在其他地方回答了我的问题,我首先表示歉意,但是一些广泛的谷歌搜索网站到目前为止没有发现任何对我有帮助的东西,所以我想在这里问一下 因此,我有一个SpringMVC应用程序,我正在尝试使用注释来映射它,虽然对于某些请求它工作正常,但对于其他请求,即使在控制器被调用之后,我也会得到404 所以,这是我的设置 web.xml: <listener> <listener-class>org.springframework.web.context.ContextLo
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>requiredVariableFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>requiredVariableFilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>requiredVariableFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我可以向您保证,我在/WEB-INF/pages/user/baseinfo.jsp上有相关的jsp,所以并不是jsp不在那里
另外,我的日志显示控制器中的日志消息正在被触发,因此它返回视图,然后Tomcat给我一个非常漂亮的404页面,我的日志只说/user返回404
不过,我还有另一个控制器,在这里工作得非常好:
@Controller
public class BaseController {
static Logger log = Logger.getLogger(BaseController.class);
@Autowired
private UserService userService;
@Autowired
private MailChimpService mailChimpService;
@RequestMapping(value="/", method=RequestMethod.GET)
public ModelAndView getHomePage(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = new ModelAndView("index");
User user = this.userService.getCurrentUser();
mav.addObject("welcomeMessage", "Hey There!");
if(user != null) {
mav.addObject("user", user);
}
mav.addObject("newsBlasts", this.mailChimpService.getEmailBlasts());
return mav;
}
@RequestMapping(value="/login")
public ModelAndView getLoginPage (HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value="error", required=false, defaultValue=StringUtils.EMPTY) String error) {
ModelAndView mav = new ModelAndView("login");
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
if(StringUtils.isNotEmpty(error)) {
mav.addObject("badLogin", true);
}
mav.addObject("returnUrl", savedRequest.getRedirectUrl());
return mav;
}
}
该控制器中的两种方法返回的结果都非常好,并且都是现场网格化的,所有这些都没有问题。我在这个网站上看到了很多不同的建议,但到目前为止,似乎没有任何效果
我对待这些控制器的唯一区别是,第一个控制器最终将具有嵌套的@RequestMapping,因此它将处理/user模式(/user/edit,/user/throwparty,等等)下的任何内容而第二个控制器只是处理一次过的URL,这些URL并不特定地绑定到一组特定的功能(在本例中,是主页和登录页)
有人有什么建议吗?错误在视图中。必须添加一个错误页面来查看异常,但一旦添加,我就能够解决这个问题。sitemesh处理子目录中的视图难道不是问题吗?@SergeBallesta我想到了这一点,但当我将文件移回与其他视图相同的目录时,它仍然无法在那里工作,因此我认为情况并非如此。我还(只是为了测试这一点)将index.jsp移到/pages/user文件夹中,修改了视图名称,它按预期工作(也就是说,它工作了)。那么问题似乎出在视图本身。。。“它与其他(哪些作品)有什么不同?”SergeBallesta实际上,我得出了相同的结论。结果我出现了一些错误,Tomcat没有显示错误,而是显示了404。在“我的视图”中添加了一个错误页,并能够对此进行调试。
@Controller
@RequestMapping("/user")
public class UserController {
static Logger log = Logger.getLogger(UserController.class);
@Autowired
private UserService userService;
@RequestMapping(method = RequestMethod.GET)
public ModelAndView getBaseUserInfo(HttpServletRequest request, HttpServletResponse response) {
log.info("got into the user controller");
ModelAndView mav = new ModelAndView("user/baseinfo");
User user = this.userService.getCurrentUser();
mav.addObject("user", user);
log.info("passing off to view");
return mav;
}
}
@Controller
public class BaseController {
static Logger log = Logger.getLogger(BaseController.class);
@Autowired
private UserService userService;
@Autowired
private MailChimpService mailChimpService;
@RequestMapping(value="/", method=RequestMethod.GET)
public ModelAndView getHomePage(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = new ModelAndView("index");
User user = this.userService.getCurrentUser();
mav.addObject("welcomeMessage", "Hey There!");
if(user != null) {
mav.addObject("user", user);
}
mav.addObject("newsBlasts", this.mailChimpService.getEmailBlasts());
return mav;
}
@RequestMapping(value="/login")
public ModelAndView getLoginPage (HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value="error", required=false, defaultValue=StringUtils.EMPTY) String error) {
ModelAndView mav = new ModelAndView("login");
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
if(StringUtils.isNotEmpty(error)) {
mav.addObject("badLogin", true);
}
mav.addObject("returnUrl", savedRequest.getRedirectUrl());
return mav;
}
}