我是 spring mvc 的新手,正在尝试开发一个非常基本的登录 Web 应用程序。运行项目时出现以下错误。自过去两周以来,我几乎尝试了所有方法,但无法修复此错误。请有人帮助我。
May 21, 2013 2:37:12 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/SpringWeb/WEB-INF/jsp/loginnn.jsp] in DispatcherServlet with name 'spring'
我的jsp页面位于WEB-INF/jsp下。我的控制器中的登录页面方法正在被调用,但视图名称没有被渲染和解析。非常感谢您的帮助。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>testspring</display-name>
<servlet>
<servlet-name>frontcontrol</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>frontcontrol</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
frontcontrol-servlet.xml
<context:component-scan base-package ="com.shell.spring.testspringapp">
</context:component-scan>
<bean id ="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
控制器类
@Controller
public class Firstcontrol {
@RequestMapping(value="/")
public ModelAndView invokeme(Model m)
{
ModelAndView mav=new ModelAndView();
mav.setViewName("result");
System.out.println("In method");
return mav;
}
@RequestMapping(value="/submit" ,method=RequestMethod.GET)
public String submit(Model m)
{
System.out.println("In submitmethod");
return "submit";
}
}
由于您将 DispatcherServlet 映射到“/”,请尝试将
<mvc:default-servlet-handler/>
添加到您的 spring-servlet.xml
我看到了同样的错误,原来你需要单独启用 MVC 注释
<mvc:annotation-driven/>
除了
<context:Annotation-config/>
<context:component-scan base-package="your base packege " />
您应该检查 spring 配置 xml 中的以下部分。也许您从某个地方复制了它,但忘记将其设为您的包名称。如果是这样,Spring 将无法扫描包并最终显示此错误。
在 web.xml 文件中,应指定调度程序 servlet 使用的配置文件 (spring-servler.xml),因为您没有使用常规名称,即 [servlet-name]-context.xml。
由于 Spring 无法找到调度程序 servlet 的配置文件,因此 viewresolver 永远不会注册。 在我的示例中,我假设 'spring-servler.xml 位于
WEB-INF
文件夹中,因此您可能需要进行调整。
另请注意,我将 servlet 映射切换到
/
,如果您需要解析静态资源,这会有所帮助,因为 /
充当包罗万象的角色,而不是通过调度程序映射所有内容。
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring-servler.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
如果您不使用 JSTL,您也可以尝试使用常规视图解析器。
替换jstl视图解析器:
<bean id ="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
与:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
尝试从指定视图名称的控制器返回
String
:
@RequestMapping(value="/")
public String loginpage(Model model)
{
Employee emp=new Employee();
ModelAndView mav=new ModelAndView();
model.addObject("emp", emp);
return "loginnn";
}
@sanjay 和@Will Keeling 都是对的。需要使用
<mvc:default-servlet-handler/>
(作为最后一个处理程序)并启用<mvc:annotation-driven/>
和<context:Annotation-config/>
首先记下控制器类的包名。 现在检查您使用过的包名称,可能有拼写错误。 主要检查viewResolver类。