29
回答
问一个springmvc的问题,后台没报错,前台页面一直报404
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>mn_spring_mvc_template</display-name>
   <servlet>
           <servlet-name>template</servlet-name>
           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
           <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
           <servlet-name>template</servlet-name>
           <url-pattern>*.do</url-pattern>
   </servlet-mapping>
   <context-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:ApplicationContext.xml</param-value>
    </context-param>
    <context-param>
           <param-name>log4jConfigLocation</param-name>
           <param-value>classpath:log4j.properties</param-value>
    </context-param>   
    <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
     </listener>    
     <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="    
    http://www.springframework.org/schema/beans    
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/context    
    http://www.springframework.org/schema/context/spring-context-3.1.xsd"
    default-autowire="byName">
 </beans>

template-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="    
    http://www.springframework.org/schema/beans    
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/context    
    http://www.springframework.org/schema/context/spring-context-3.1.xsd"
    default-autowire="byName">
     <context:component-scan base-package= "mn.spring.mvc.template.controller.*" />     
     <bean id= "jspViewResolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
           <property name= "viewClass"   value ="org.springframework.web.servlet.view.JstlView" />
               <property name= "prefix" value = "/view/" />
               <property name= "suffix" value = ".jsp" />
      </bean>
    </beans>

Controller


@Controller
@RequestMapping("/controllertest")
   public class SpringMvcTemplateController {

    public SpringMvcTemplateController() {

    }
   @RequestMapping("/shows")
     public String showTemplate() {
             System.out.println("show_template");
            return "template";
     }
}

page: (1) WebContent/index.jsp

       (2)  WebContent/view/template.jsp


pageUrL : http://127.0.0.1:8080/mn_spring_mvc_template/controllertest/shows.do

举报
huar
发帖于4年前 29回/69K+阅
共有29个答案 最后回答: 2年前
在controller的方法里面打日志,后台查不到日志信息,应该是没进controller的缘故吧?如果是这个问题的话,想问熟悉这一块的朋友这个会是什么原因造成,spring 接收到request后,不传进controller呢?

template-servlet.xml

你在哪里装载的?web.xml看不到啊 ?

你该在web里面加载template-servlet.xml


--- 共有 3 条评论 ---
huar回复 @Beyond-Bit : 加了也没有想过呢,我印象中之前写的也没加也能用哦.. 4年前 回复
Beyond-Bit回复 @huar : 昂, 这啊,那就是缺少: <!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射--> <mvc:annotation-driven/> 4年前 回复
huar<servlet>不默认设置的话,在WEB-INF下会自动生成servlet-name-servlet.xml。 4年前 回复

<property name= "prefix" value = "/view/" />

这样?还是这样?

<property name= "prefix" value = "view/" />

--- 共有 2 条评论 ---
飘逸的逸他后台打印log.连Controller都没进去.应该和视图没关系. 4年前 回复
huar都不行呢,呵呵 4年前 回复
<servlet-mapping>
           <servlet-name>template</servlet-name>
           <url-pattern>*.do</url-pattern>
   </servlet-mapping> 你这里都写了只拦截.do结尾的url了,/controllertest/shows这个肯定不行啊,这样你试下/shows.do
--- 共有 1 条评论 ---
huar兄弟你好,我的url是http://127.0.0.1:8080/mn_spring_mvc_template/controllertest/shows.do,有.do的。 4年前 回复

应该是注解没加好吧.

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
  		http://www.springframework.org/schema/mvc/spring-mvc.xsd
  		http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd ">
<!-- 添加注解驱动 -->  
<mvc:annotation-driven />
--- 共有 1 条评论 ---
huar试了一下,也不是注解的问题呢,呵呵 4年前 回复

加了也没有想过呢,我印象中之前写的也没加也能用哦..?

你能告诉我你的spring mvc版本多少吗?你曾经spring mvc多少版本?

我可以告诉你的是: <mvc:annotation-driven/>要加的

<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射-->

换句话说就是如果木有这个,你的注解url pojo相当于失败、正好你的404说明url根本木有被处理、

官方的最减配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven />

</beans>
<mvc:annotation-driven /> 来自上面的头文件声明,所以你要声明头文件,你上面的配置木有、

官方的解释:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-config


 

--- 共有 3 条评论 ---
konghyit 回复 @huar : 4个月前 回复
Beyond-Bit回复 @huar : 方便你给我我调试看看、你的spring哪个版本? 4年前 回复
huar兄弟啊、头声明文件xmlns和xsi我都加了mvc注解,servlet.xml里面也加了<mvc:annotation-driven />,可还是一样的问题啊,感觉他死活就不进controller呢.. 4年前 回复

<context:component-scan base-package= "mn.spring.mvc.template.controller.*" />

检查下Controller在这个包下面么?

--- 共有 2 条评论 ---
梦无涯回复 @huar : 那就把log4j的日志等级调成DEBUG,再看看到底卡在哪一步了。 4年前 回复
huar“package mn.spring.mvc.template.controller;” 在的呢,而且名字也没有问题。 4年前 回复

log debug出来的信息是“No mapping found for HTTP request with URI”,好奇怪的问题。

[QC] DEBUG [http-bio-8080-exec-3] org.springframework.web.servlet.DispatcherServlet.doService(823) | DispatcherServlet with name 'template' processing GET request for [/mn_spring_mvc_template/controllertest/shows.do]

[QC] DEBUG [http-bio-8080-exec-3] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(209) | Looking up handler method for path /controllertest/shows.do
[QC] DEBUG [http-bio-8080-exec-3] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(219) | Did not find handler method for [/controllertest/shows.do]
[QC] WARN [http-bio-8080-exec-3] org.springframework.web.servlet.DispatcherServlet.noHandlerFound(1108) | No mapping found for HTTP request with URI [/mn_spring_mvc_template/controllertest/shows.do] in DispatcherServlet with name 'template'
[QC] DEBUG [http-bio-8080-exec-3] org.springframework.web.servlet.FrameworkServlet.processRequest(946) | Successfully completed request
public String showTemplate() {
             System.out.println("show_template");
            return "template";

     }

方法加上request和response参数 试试~

--- 共有 1 条评论 ---
huar请求没进controller,加上了request/response参数也查不出东西(已测试)。 4年前 回复
顶部