Java Spring MVC页到页导航不工作
我有两个页面:home.jsp和stylechoosertable.jsp。home.jsp有一个指向stylechoosertable.jsp的简单链接。两者都在src-main-webapp-view中。启动应用程序运行正常,加载home.jsp也可以。但是,当我单击链接时,它会转到404未找到页面 这是HomeController.javaJava Spring MVC页到页导航不工作,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,我有两个页面:home.jsp和stylechoosertable.jsp。home.jsp有一个指向stylechoosertable.jsp的简单链接。两者都在src-main-webapp-view中。启动应用程序运行正常,加载home.jsp也可以。但是,当我单击链接时,它会转到404未找到页面 这是HomeController.java @Controller public class HomeController { private static final Logger
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
logger.info("Welcome home! The client locale is {}.");
return "home";
}
}
@Controller
public class CSSTableController {
private static final Logger logger = LoggerFactory.getLogger(CSSTableController.class);
private final CSSService cssService;
@Autowired
public CSSTableController(CSSService cssService) {
this.cssService = cssService;
}
@RequestMapping(value = "/stylechoosertable.jsp", method = RequestMethod.GET)
public List<StyleChooser> get() {
return cssService.getAllStyleChoosers();
}
}
这里是CSSTableController.java
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
logger.info("Welcome home! The client locale is {}.");
return "home";
}
}
@Controller
public class CSSTableController {
private static final Logger logger = LoggerFactory.getLogger(CSSTableController.class);
private final CSSService cssService;
@Autowired
public CSSTableController(CSSService cssService) {
this.cssService = cssService;
}
@RequestMapping(value = "/stylechoosertable.jsp", method = RequestMethod.GET)
public List<StyleChooser> get() {
return cssService.getAllStyleChoosers();
}
}
@控制器
公共类CSSTableController{
私有静态最终记录器Logger=LoggerFactory.getLogger(CSSTableController.class);
私人最终CSSService CSSService;
@自动连线
公共CSSTableController(CSSService CSSService){
this.cssService=cssService;
}
@RequestMapping(value=“/stylechoosertable.jsp”,method=RequestMethod.GET)
公共列表get(){
返回cssService.getAllStyleChoosers();
}
}
servlet-context.xml
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
web.xml
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
appServlet
/
我注意到了几件事:
我不明白为什么它没有“命中”我的stylechoosertable.jsp。有什么想法吗?好吧,我不认为我能够正确地回答您的问题,但是如果您想从home.jsp获得简单的导航功能,即单击链接,它应该转到stylechoosertable.jsp,那么一个明确的解决方案就是有一个如下链接
<a href="stylechoosertable">SomeName</a>
如果在/WEB-INF/views/中有任何stylechoosertable.jsp可用,则只需调用它即可
第二个问题
local:8080/myspringmvc/
工作,而不是local:8080/myspringmvc/home.jsp
的原因基本上是/home.jsp
缺少请求映射,而根URL即//code>,映射存在于HomeController
大多数Servlet容器注册一个Servlet
实现来处理JSP。他们看起来像
<servlet>
<servlet-name>jspServlet</servlet-name>
<servlet-class>com.example.JspServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jspServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
路径满足*.jsp
的扩展映射,因此容器使用JspServlet
来处理请求。这个JspServlet
试图找到合适的资源,但没有找到。请记住,WEB-INF
中的JSP不能公开/外部访问。因此,它返回404
当您将请求发送到
local:8080/myspringmvc/home.jsp
local:8080/myspringmvc/
选择默认servlet是因为没有任何其他内容可以匹配该路径。DispatcherServlet
查找其处理程序并找到
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
logger.info("Welcome home! The client locale is {}.");
return "home";
}
通过返回视图名home
,并且因为您已经注册了相应的InternalResourceViewResolver
,Spring将向该JSP执行RequestDispatcher#转发(…)
。Servlet容器将再次匹配该请求,但这次匹配到JspServlet
。因为这是一个内部调用(路径正确),所以请求将被完成
类似地,对于/stylechoosertable.jsp
,在您的DispatcherServlet
可以做任何事情之前,会选择JspServlet
它不会抛出任何org.springframework.web.servlet.PageNotFound
当我转到home.jsp或stylechoosertable.jsp时出错,因此我知道
地图就在那里
DispatcherServlet
从未涉及,因此它没有机会记录任何内容 请同时发布你的servlet context.xml
。发布了servlet-context.xml和web.xmlHmm,因为我在链接上有“.jsp”和@RequestMapping中的值,所以它不起作用?是的。。但这不是唯一的原因,因为RequestMapping
返回类型也不正确。它应该返回一个字符串
类型,当您返回列表