【问题标题】:Spring MVC, tomcat url 404 errorSpring MVC,tomcat url 404错误
【发布时间】:2015-05-06 01:43:27
【问题描述】:

我对 spring-mvc/tomcat 有问题,更具体地说是 Url 当我尝试执行时:http://localhost:8080/HelloWeb/index.html

警告:在名称为“HelloWeb”的 DispatcherServlet 中未找到带有 URI [/HelloWeb/index.html] 的 HTTP 请求的映射

HelloWeb-servlet.xml:

<context:component-scan base-package="pl.solsoft.web"/>

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/pages"/>
        </bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="cache" value="true"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=".ftl"/>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

学生控制器:

@Controller
public class StudentController{
private static List<User> userList=new ArrayList<User>();
static {
    userList.add(new User("Bill", "Gates"));
    userList.add(new User("Kasia", "K"));
}
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index (@ModelAttribute("model") ModelMap model){
    model.addAttribute("userList", userList);
    return "index";
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(@ModelAttribute("user") User user){
    if (null != user && null != user.getName()
            && null != user.getLastName() && !user.getName().isEmpty()
            && !user.getLastName().isEmpty()) {
        synchronized (userList) {
            userList.add(user);
        }
    }
    return "redirect:index.html";
}
}

web.xml:

<display-name>HW</display-name>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>HelloWeb</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>HelloWeb</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

感谢您的所有提示

【问题讨论】:

    标签: java spring-mvc tomcat


    【解决方案1】:

    如果您将 .html 添加到 RequestMappings 中会怎样,例如@RequestMapping(value="/index.html")

    【讨论】:

    • 创建/部署的文件的名称是什么。是不是 HelloWeb.war
    • 是的。如果您没有根据您的服务器明确给出上下文名称(我主要处理 weblogic,并且需要在 weblogic.xml 中分配上下文名称),那么它会选择您的文件名并且区分大小写。
    • 我正在部署 HelloWeb.war 文件并从服务器获得相同的答案。感谢您的承诺
    • 我在你的 servlet 配置中没有看到 。你可以添加和检查。谢谢。
    【解决方案2】:

    在您的 web.xml 中,您已映射 DispatcherServlet 以处理匹配 *.html 的请求。但是您的 StudentController 未映射以处理此类请求。

    修改@RequestMapping 中的值以包含.html 扩展名。

    @RequestMapping(value = "/index.html", method = RequestMethod.GET)
    public String index (@ModelAttribute("model") ModelMap model){
       ......
       return "index";
    }
    
    @RequestMapping(value = "/add.html", method = RequestMethod.POST)
    public String add(@ModelAttribute("user") User user){
       .....
       return "redirect:index.html";
    }
    

    现在尝试通过http://localhost:8080/HelloWeb/index.html访问您的页面

    -----------编辑-----------------

    验证控制器是否被 Spring 初始化。为此,请创建一个无参数构造函数并尝试将某些内容打印到控制台。

    @Controller
    public class StudentController{
    
           public StudentController(){
                  System.out.println("Hey, I'm in StudentController");
           }
    
    }
    

    【讨论】:

    • @Tommy 这很有趣。你能试试吗?在控制器中创建一个无参数构造函数。只需在构造函数中编写一条 SysOut 语句。然后重新启动您的应用程序。验证 sysout 是否出现在您的控制台中。如果没有,那么您的 Controller 没有被 Spring 容器识别。如果 SysOut 出现在控制台中,则说明存在其他问题。
    【解决方案3】:

    我没有看到&lt;mvc:annotation-driven/&gt; 在您的 servlet 配置中。你可以添加和检查。谢谢。

    【讨论】:

      【解决方案4】:

      如果您尝试将 HTML 文件部署为简单的静态文件,则应将它们配置为这样。将此添加到您的调度程序 servlet,确保您声明了正确的命名空间:

      <mvc:resources mapping="*.html" location="/" />
      

      您不需要控制器方法来提供此文件。如果你想在后端添加额外的逻辑,你可以让/index 做它的事情,然后重定向到你的文件,或者只是将index.html 转换为.jsp 文件。现在,您的控制器很可能正在尝试查找名为 index.html 的 JSP 视图,但该视图不存在。

      【讨论】:

        猜你喜欢
        • 2016-07-09
        • 2017-03-28
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        • 2023-03-19
        • 2011-10-04
        相关资源
        最近更新 更多