首页 > 求大神springMVC项目部署在Tomcat下,无法进入InternalResourceViewResolver解析器

求大神springMVC项目部署在Tomcat下,无法进入InternalResourceViewResolver解析器

这是我的项目包:

然后,我单独通过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

那么问题来了,如何解决这个不一样的问题呢??


部署的正确方式应为build成war包,然后放到tomcat下的webapp目录下,如果需要部署到根目录,放到ROOT下即可

String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 

动态去获取请求路径,而不要去写死。想要与开发环境一致,就是上面所说的部署到ROOT下


好了看到新的内容知道问题所在了,更新一下答案。

原因出在了项目名上。

项目的路径
request.getRequestURI()包括哪些

request.getRequestURI() 返回的是当前请求的相对地址,即不包含 协议、主机、和端口 的其他部分

当你的项目根路径为"/" 时,你的请求URI自然是 /home.req
当你的项目根路径为"/demo"时,你的请求URI就变成了 /demo/home

解决方案

  1. war包方式部署的 将项目文件夹改为ROOT,覆盖掉tomcat里原来那个

  2. 配置方式的,将path 填为"" 或者"/"

  3. 修改代码, String s = request.getRequestURI().subString(request.getRequestURI().lastIndexOf("/"),request.getRequestURI().length())
    或者改一下判断条件 if(request.getRequestURI().contains('/home.req')){}


其实我更倾向于第三种改代码的方式。
毕竟java的口号就是"一次编译到处运行"。
虽然被人调侃为"一次编译到处debug"...


要时刻记得打断点看啊,很明显你的代码走到return "";了,返回的路径为demo/WEB-INF/views/.jsp,而views目录下肯定没有.jsp文件。所以404

【热门文章】
【热门文章】