首页 文章

找不到带URI的HTTP请求的映射[/WEB-INF/pages/apiForm.jsp] [重复]

提问于
浏览
91

这个问题在这里已有答案:

我的处理程序转发到internalresourceview'apiForm',但后来我得到错误404 RequestURI = / WEB-INF / pages / apiForm.jsp . 我确定apiForm.jsp位于/ WEB-INF / pages /

13:45:02,034 DEBUG [org.springframework.web.servlet.view.JstlView] - 在InternalResourceView'apiForm'13:45:02,035 DEBUG [org . ]中转发资源[/WEB-INF/pages/apiForm.jsp] . springframework.web.servlet.DispatcherServlet] - 名为'testapp2'的DispatcherServlet确定[/WEB-INF/pages/apiForm.jsp]的最后修改值13:45:02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet] - 在getLastModified中找不到处理程序13:45:02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet] - 名为'testapp2'的DispatcherServlet处理请求[/WEB-INF/pages/apiForm.jsp] 13:45:02,038 WARN [org.springframework.web.servlet.PageNotFound] - 在DispatcherServlet中找不到带有URI [/WEB-INF/pages/apiForm.jsp]的HTTP请求的映射,名称为'testapp2'13:45:02,045 DEBUG [org.springframework .web.servlet.DispatcherServlet] - 已成功完成请求13:45:02,048 DEBUG [org.springframework.web.servlet.DispatcherServlet] - 已成功完成请求

这就是我的dispatcher.xml的样子..

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

16 回答

  • 1

    看起来DispatcherServlet正在尝试处理apiForm.jsp的请求,这表明你的web.xml servlet-mapping正在将对该空间的请求定向到DispatcherServlet .

    你可能有这样的东西?

    <servlet-mapping>
      <servlet>dispatcher</servlet>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

    尝试使用不同的扩展名调用控制器(例如.do)并更新servlet-mapping以适应

    <servlet-mapping>
      <servlet>dispatcher</servlet>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
  • 3

    是的,我知道我迟到了这个派对,但它可能对其他人有所帮助 .

    servlet容器根据匹配的最长路径选择映射 . 因此,您可以将此映射放入JSP中,并通过/ *映射选择它 .

    <servlet-mapping>
      <servlet-name>jsp</servlet-name>
      <url-pattern>/WEB-INF/pages/*</url-pattern>
     </servlet-mapping>
    

    实际上对于Tomcat来说,你需要的只是jsp,它是一个开箱即用的servlet . 对于其他容器,您需要找到JSP servlet的名称或添加servlet定义,如:

    <servlet>
      <servlet-name>jsp</servlet-name>
      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    </servlet>
    
  • 9

    只需将 <mvc:default-servlet-handler /> 添加到DispatcherServlet配置中即可完成!

  • 154

    你会收到 No mapping found for HTTP request with URI 错误

    如果您扫描错误的包裹

    例如你的控制器在 my.package.abc 但你错误地放了

    <context:component-scan base-package="my.package.efg*" />

    要么

    @ComponentScan("my.package.efg*")

    从某种意义上说,当请求不仅仅是url,而是找不到整个类时,你的控制器不会被扫描到Web应用程序上下文中!

  • 0

    帮助我的解决方案是:不要将 DispatcherServlet 映射到 /* ,将其映射到 / . 然后是最终配置:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            ...
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
  • 90

    我想我读了整个互联网,想弄清楚如何让sitemesh处理我的html路径而没有扩展的API扩展路径 . 我被一件直夹克包裹着,想出这个,每一个回合似乎都打破了别的东西 . 然后我终于遇到了这个帖子 .

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>/WEB-INF/views/*</url-pattern>
     </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>/WEB-INF/decorators/*</url-pattern>
    </servlet-mapping>
    

    在dispatcher-servlet.xml中输入

    <mvc:default-servlet-handler/>
    
  • 8

    可以进行简单的检查 . 我目前正在使用Spring MVC架构和hibernate . 我错过了在类名之上编写@Controller注释 . 这对我来说是个问题 .

    @Controller
    public class MyClass{
        ...
    }
    

    希望这个简单的检查可以解决您的问题 .

  • 1

    使用Spring 3.1和Tomcat 7,我得到了下一个错误:

    org.springframework.web.servlet.DispatcherServlet noHandlerFound在名为'appServlet'的DispatcherServlet中找不到带有URI [/ baremvc /]的HTTP请求的映射

    我需要添加到web.xml下一个配置:

    <welcome-file-list>
        <welcome-file/>
    </welcome-file-list>
    

    应用程序工作!

  • -4

    我有同样的问题,当然有一点不同 . 故事是当我删除以下行时:

    <mvc:resources mapping="/resources/**" location="classpath:/resources/" />
    

    一切都很好但是在那条线的存在下同样的错误提高了 .

    经过一些试验和错误,我发现我必须将以下行添加到我的spring应用程序上下文文件中:

    <mvc:annotation-driven />
    

    希望能帮助到你!

  • 1

    当你的应用程序实际上没有编译时,这也可能发生,但它仍然在Tomcat中启动 . 当我看到这种情况发生时,它没有编译,因为项目具有指定的“项目特定”JDK,并且代码在没有该特定JDK的机器上签出 . Eclipse默认为JRE而不是JDK,然后应用程序未编译 .

    为了解决我们的具体情况,我们刚刚转过身来关闭“项目特定设置”:

    “Project | Properties | Java Compiler”

    以下是有关如何执行此操作的更详细信息:https://stackoverflow.com/a/2540730/26510

  • 0

    与Brad Parks相同的答案......更多文字

    我遇到了完全相同的问题并尝试了上述解决方案以及其他许多解决方案 . 我甚至开始使用全新的Dev env,只需安装一个spring-mvc-template并尝试在安装后直接运行它(应该可以,但对我来说失败了)

    对我来说问题是我在我的项目中使用jdk1.6,但我在eclipse中选择的执行环境是jdk1.7 . The solution was to change the project specific execution environment settings so that this project is set to jdk1.6. Right click project --> Properties --> Java Compiler --> Check "Enable project specific settings" if it's not already checked --> select the appropriate jdk (or add if it's not installed).

    我希望这可以帮助别人并节省那些人的时间,因为我花了最后几天在互联网的每个角落寻找答案 . 当我开始变得绝望时,我自己偶然发现了它并且在不太可能被发现的区域(根据我的大脑)寻找解决方案 . =)

    我的2美分 . 谢谢!

    Edit1:使用项目特定设置

    编辑2:刚刚意识到布拉德帕克斯已经在这个线程中回答了这个问题 . 好吧,至少我得到了“编辑”-badge这一个= D

  • 1

    不幸的是,这是一个相当广泛的类错误消息 . 另一件可能出错的事情是你错过了一些课程/ jar . 例如,如果您缺少 spring-expression jar文件,则无论您如何努力以及如何正确配置其他所有内容, dispatch-servlet 都无法找到您的控制器 .

  • 17

    我在Eclipse Luna EE中遇到过这个问题 . 我的解决方案只是重启eclipse,它神奇地开始正确加载servlet .

  • 9

    你需要的是让一个控制器首先响应url然后呈现你的jsp . 见link for a solution .

  • 8

    “/ openStudentPage”是我想先打开的页面,我做了:

    @RequestMapping(value = "/", method = RequestMethod.GET)
        public String index(Model model) {
         return "redirect:/openStudentPage";
        }
    
    @RequestMapping(value = "/openStudentPage", method = RequestMethod.GET)
    public String listStudents(Model model) {
        model.addAttribute("student", new Student());
        model.addAttribute("listStudents", this.StudentService.listStudents());
        return "index";
    }
    
  • 13

    将您的servlet名称调度程序更改为任何其他名称 . 因为调度程序是spring3,spring4版本的预定义名称 .

    <servlet>
        <servlet-name>ahok</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ashok</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

相关问题