今天在使用ssm框架时,遇到了一个小问题,但是费了不少时间,于是记录一下,防止犯同样的错误。
我在配置spring-config.xml文件时
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
配置成了这个样子,结果运行时发生,下面的错误:
HTTP Status 404 – Not Found
Type Status Report
Message /demo/WEB-INF/jsp/index.jsp
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
很显然上面的URL是不正确的。
当我改成:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
结果就正常显示了
我在页面加了一句
````html
<%=request.getRequestURI().toString()%>
````
其显示路径为:
/WEB-INF/jsp/index.jsp
举个简单的例子
@Controller
@RequestMapping("/demo")
public class BookController {
private Logger logger=LoggerFactory.getLogger(this.getClass());
@Autowired
private TestService tsetService;
@RequestMapping(value = "/list",method = RequestMethod.GET)
private String list(Model model){
List<Obj> list=testService.getAll();
model.addAttribute("list",list);
return "indext";
}
}
不加 /
的WEB-INF他是跳转到和自己同级目录下的页面。
加/
,的话他会跳转到整个网站的根目录下,如果在自己电脑上测试的的话,就是跳转到http://localhost:8080/
按照上面的事例来讲的话,我在页面输入:
http://localhost:8080/demo/list
的话,他应该会给我跳转到我的index.jsp页面,结果却找不到这个页面,但从返回页面可以分析出,是url错误了,因为他报错说:找不到这个/demo/WEB-INF/jsp/index.jsp,实际上我们的页面路径应该是:/WEB-INF/jsp/index.jsp。我们输入http://localhost:8080/demo/list
他会进入到demo目录下的list,然后最后转发到index.jsp页面,加上我们配置文件配置的url前后缀,我们转发的路径就变成WEB-INF/jsp/index.jsp
,但是由于我们没加 /
,他会在和list目录同级的目录下查找 WEB-INF/jsp/index.jsp
,于是就变成了/demo/WEB-INF/jsp/index.jsp
,而实际上我们根本没有demo目录,所以找不到我们要找的页面,加/
的话,应该就不用多讲了。