Spring 找不到URI为[/WEB-INF/pages/apiForm.jsp]的HTTP请求的映射
我的处理程序转发到internalresourceview'apiForm',但随后我得到错误404RequestUri=/WEB-INF/pages/apiForm.jsp。我确信apiForm.jsp位于/WEB-INF/pages/Spring 找不到URI为[/WEB-INF/pages/apiForm.jsp]的HTTP请求的映射,spring,spring-mvc,servlet-dispatching,Spring,Spring Mvc,Servlet Dispatching,我的处理程序转发到internalresourceview'apiForm',但随后我得到错误404RequestUri=/WEB-INF/pages/apiForm.jsp。我确信apiForm.jsp位于/WEB-INF/pages/ 13:45:02034DEBUG[org.springframework.web.servlet.view.JstlView]- 转发到InternalResourceView“apiForm”中的资源[/WEB-INF/pages/apiForm.jsp]
13:45:02034DEBUG[org.springframework.web.servlet.view.JstlView]- 转发到InternalResourceView“apiForm”中的资源[/WEB-INF/pages/apiForm.jsp]
13:45:02035DEBUG[org.springframework.web.servlet.DispatcherServlet]- 名为“testapp2”的DispatcherServlet确定[/WEB-INF/pages/apiForm.jsp]的上次修改值
13:45:02038DEBUG[org.springframework.web.servlet.DispatcherServlet]-未找到处理程序 在getLastModified中
13:45:02038DEBUG[org.springframework.web.servlet.DispatcherServlet]- 名为“testapp2”的DispatcherServlet正在处理的请求 [/WEB-INF/pages/apiForm.jsp]
13:45:02038WARN[org.springframework.web.servlet.PageNotFound]-未找到的映射 名为“testapp2”的DispatcherServlet中URI为[/WEB-INF/pages/apiForm.jsp]的HTTP请求
13:45:02045DEBUG[org.springframework.web.servlet.DispatcherServlet]-成功完成请求
13:45:02048DEBUG[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>
看起来DispatcherServlet正在尝试处理对apiForm.jsp的请求,这向我表明您的web.xml servlet映射正在将该空间的请求定向到DispatcherServlet 你可能有这样的东西
<servlet-mapping>
<servlet>dispatcher</servlet>
<url-pattern>/*</url-pattern>
</servlet-mapping>
调度员
/*
尝试使用不同的扩展名(.do)调用控制器,并更新servlet映射以适应需要
<servlet-mapping>
<servlet>dispatcher</servlet>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
调度员
*.做
您需要的是一个控制器,该控制器首先响应url,然后呈现jsp。看这个。是的,我知道我来晚了,但这可能会帮助其他人
servlet容器根据匹配的最长路径选择映射。因此,您可以将此映射放在JSP中,它将被选择在/*映射之上
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/WEB-INF/pages/*</url-pattern>
</servlet-mapping>
jsp
/WEB-INF/pages/*
实际上,对于Tomcat,这就是您所需要的,因为jsp是一个现成的servlet。对于其他容器,您需要找到JSP servlet的名称或添加servlet定义,如:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
jsp
org.apache.jasper.servlet.JspServlet
当你的应用程序没有真正编译,但仍在Tomcat中启动时,也可能发生这种情况。当我看到这种情况发生时,它不是在编译,因为项目指定了“特定于项目”的JDK,代码是在没有特定JDK的机器上签出的。Eclipse默认为JRE,而不是JDK,然后应用程序就没有编译
要在特定情况下修复此问题,我们只需在此处关闭“项目特定设置”:
“项目|属性| Java编译器”
以下是有关如何执行此操作的更详细信息:
使用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>
应用程序成功了 可以进行简单的检查。我目前正在使用SpringMVC架构和hibernate。我错过了在类名上方写@Controller注释。这给我带来了问题
@Controller
public class MyClass{
...
}
希望这个简单的检查能解决你的问题。和Brad Parks的答案一样。。。更多的文字虽然
我遇到了完全相同的问题,并尝试了上述解决方案以及其他许多解决方案,但都产生了负面结果。我甚至从一个全新的Dev env开始,只是安装了一个springmvc模板,并试图在安装后直接运行它(应该可以运行,但对我来说失败了)
对我来说,问题是我在项目中使用的是jdk1.6,但我在eclipse中选择的执行环境是jdk1.7。
解决方案是更改特定于项目的执行环境设置,以便将此项目设置为jdk1.6。
右键单击项目-->属性-->Java编译器-->选中“启用项目特定设置”(如果尚未选中)-->选择适当的jdk(如果未安装则添加)。
我希望这能帮助一些人,节省他们的时间,因为过去几天我一直在互联网的每个角落寻找答案。当我开始绝望,并在(根据我的大脑)不太可能找到的地方寻找解决方案时,我自己意外地发现了它
我的2美分。谢谢
Edit1:使用特定于项目的设置
Edit2:刚刚意识到Brad Parks已经在这条帖子中回答了这个问题。好吧,至少我从这个=D中得到了“编辑”徽章不幸的是,这是一个相当广泛的类错误消息。还有一件可能出错的事情是,如果您缺少一些类/jar。例如,如果缺少spring表达式jar文件,调度servlet将无法定位您的控制器,无论您如何努力,以及其他配置如何正确。我想我阅读了整个互联网,以了解如何让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>
调度员
org.springframework.web.servlet.DispatcherServlet
1.
jsp
org.apache.jasper.servlet.JspServlet
调度员
/*
jsp
/WEB-INF/views/*
jsp
/WEB-INF/decorators/*
<mvc:default-servlet-handler/>
<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>
<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>
@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";
}
<mvc:resources mapping="/resources/**" location="classpath:/resources/" />
<mvc:annotation-driven />