这是我的项目包:
然后,我单独通过tomcat来运行这个项目,注意,该项目在IDE下运行时木有问题的,代码没有问题。
这是Tomcat的配置文件,指向这个项目demo下:
好吧,现在运行startup.bat
项目能够打开如下:能够打开,就是不停不停不停地请求首页。
以下是springmvc的home请求的一个代码:在tomcat的控制器有输出这句话,说明是运行到了controller中的,但是却无法返回解析的网页
看看返回的页面,按理说,应该返回home.jsp的,这说明无法解析:
无法进入springmvc的解析器:
<bean id = "myRelover" class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value = "/WEB-INF/views/" />
<property name = "suffix" value = ".jsp" />
</bean>
是不是直接通过配置tomcat服务器来运行项目的配置有错误呢??
求大神啊,大神在哪里啊帮解决一下啦。能解决这个问题真是大神。
最后说一遍,项目在IDE下是没问题的。第一次部署项目到服务器,不太懂啊。
=====================================================
返回视图的代码:
@RequestMapping(value = {"/one.req", "/two.req", "/home.req", "/poiTest.req"}, method = RequestMethod.GET)
public String requests() {
System.out.println("测试数据来的呀!@");
String s = request.getRequestURI();
if (s.equals("/one.req")) {
return "one";
} else if (s.equals("/two.req")) {
return "two";
} else if (s.equals("/home.req")) {
System.out.println("homesdfsdfd");
return "default";
} else if (s.equals("/poiTest.req")) {
return "poiTest";
} else {
return "";
}
}
springmvc的代码:解析器:
<bean id = "myRelover" class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value = "/WEB-INF/views/" />
<property name = "suffix" value = ".jsp" />
</bean>
=========================================
后来,我给上面的代码,加了点提示,果然,返回的是空:
@RequestMapping(value = {"/one.req", "/two.req", "/home.req", "/poiTest.req"}, method = RequestMethod.GET)
public String requests() {
System.out.println("测试数据来的呀!@");
String s = request.getRequestURI();
if (s.equals("/one.req")) {
System.out.println("requesturl--one" + s);
return "one";
} else if (s.equals("/two.req")) {
System.out.println("requesturl--two" + s);
return "two";
} else if (s.equals("/home.req")) {
System.out.println("requesturl---home" + s);
System.out.println("homesdfsdfd");
return "default";
} else if (s.equals("/poiTest.req")) {
return "poiTest";
} else {
System.out.println("requesturl---null" + s);
return "";
}
}
那么问题来了,为什么在IDE这段代码没事,在tomcat下就跑到最后一个判断条件去了呢?????
==========================================
我是看出来了,在Tomcat下单独跑,请求路径多了 /demo/home.req
而在IDE下跑,请求地址就是/home.req
那么问题来了,如何解决这个不一样的问题呢??
好了看到新的内容知道问题所在了,更新一下答案。
原因出在了项目名上。
项目的路径
使用IDE工具部署,它会自动替换项目路径到根目录,所以项目路径就是"/"。
而war部署到tomcat时,则项目路径就是war解压后的文件夹名称。
而你上面使用的是通过配置文件加载项目的方式,这种方式就需要你手动指定项目路径了,即
path
参数。request.getRequestURI()包括哪些
request.getRequestURI()
返回的是当前请求的相对地址,即不包含 协议、主机、和端口 的其他部分当你的项目根路径为"/" 时,你的请求URI自然是
/home.req
当你的项目根路径为"/demo"时,你的请求URI就变成了
/demo/home
解决方案
war包方式部署的 将项目文件夹改为ROOT,覆盖掉tomcat里原来那个
配置方式的,将
path
填为"" 或者"/"修改代码,
String s = request.getRequestURI().subString(request.getRequestURI().lastIndexOf("/"),request.getRequestURI().length())
或者改一下判断条件
if(request.getRequestURI().contains('/home.req')){}
其实我更倾向于第三种改代码的方式。
毕竟java的口号就是"一次编译到处运行"。
虽然被人调侃为"一次编译到处debug"...