关于spring请求报404问题

在如下jsp中有上传excel文件,文件处理两个事件,界面如下:
这里写图片描述
jsp文件中的对应的请求如下,可知两个处理两个请求的控制器都是同一个,只是调用了不同的方法:

--上传文件请求
form.action = "<%=request.getContextPath()%>/financeDataController.do?action=financeFileImport";
--数据处理
form.action = "dmis-x/financeDataController.do?action=financeSaleDataProcess";

在本地测试时,Spring 控制器均能正常响应两个请求,当时当把代码提交到生产环境时,上传文件功能正常,但是数据处理是,页面一直报404。让人比较困惑的就是两个请求的控制器都是同一个,只是调用不同的方法而已,就会以为是服务器jar包问题,因为在Spring 配置文件中处理该请求的配置文件如下:

    <bean   name="/financeDataController.do"    class="com.isoftstone.insurance.manager.controller.FinanceDataController">
<!-- 同个控制器处理多个请求,根据action调用不同的方法 -->
    <property name="service">
            <ref bean="financeDataService" />
    </property>
        <property name="methodNameResolver">
            <bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
                <property name="paramName">
                    <value>action</value>
                </property>
            </bean> 
     </property>
   </bean> 

所以就把服务器上的jar包全部更换为本地,然而数据处理还是404,后面用f12debug捕获请求时才发现、文件上传的请求为:

http://10.1.102.30:8001/dmis/financeDataController.do?action=financeFileImport

而数据处理的请求:

http://10.1.102.30:8001/dmis-x/financeDataController.do?action=financeSaleDataProcess

如果不仔细看,很难发现其中的差别:项目名称不一样,文件处理的项目名称是dmis,而数据处理的是dmis-x;
恍然大悟,回去看jsp页面是才发现,数据处理的请求写死为:

dmis-x/financeDataController.do?action=financeSaleDataProcess

因为本地工程项目名也是dmis-x,而服务器上的项目名是dmis,这就导致了请求同样的控制器,不同的方法时却访问不到的结果。
总结:代码中不要路径写死,包括文件读取的路径,
请求路径:request.getContextPath()+请求,
文件获取可以用request.getSession().getServletContext().getRealPath(“文件参数”)

猜你喜欢

转载自blog.csdn.net/whandgdh/article/details/79960468