【问题标题】:Spring web application, removing <welcome-file-list> from web.xml gives 404Spring Web 应用程序,从 web.xml 中删除 <welcome-file-list> 给出 404
【发布时间】:2017-08-19 23:38:31
【问题描述】:

我正在开发一个简单的 Spring Hibernate Maven Web 应用程序。

如果我从web.xml 中删除&lt;welcome-file-list&gt;..,它仍然不会进入控制器,而是给出404。

我在 SO 的答案中尝试了各种解决方案,但尚未成功。

这是我的代码:

web.xml:(webapp/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" 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>App</display-name>

        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/root-context.xml</param-value>
        </context-param>

        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>


        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

    </web-app>

springmvc-servlet.xml:(webapp/springmvc-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:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
                http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">

    <mvc:annotation-driven />
    <context:component-scan base-package="app" />

    <mvc:default-servlet-handler />

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver"
      p:url="jdbc:mysql://localhost:3306/app" p:username="root"
      p:password="root" /> 
    <!-- 10.210.13.251 -->
    <bean id="sessionFactory"
              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation">
            <value>WEB-INF/hibernate.cfg.xml</value>
        </property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name = "prefix" value = "/WEB-INF/views/" />
    <property name = "suffix" value = ".jsp" />
</bean>

    <bean id="transactionManager"
              class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />
    <context:annotation-config />

</beans>

控制器:(main/java/app/contollers/UserController)

package app.controller;

import app.model.UserMaster;
import app.service.UserMasterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;



@Controller
@RequestMapping("/")
public class UserController {

    @Autowired
    private UserMasterService userMasterService;

    @RequestMapping(value="/",method=RequestMethod.GET)
    public ModelAndView getHomePage(){
        return new ModelAndView("register", "userForm", new UserMaster());
    }

    @RequestMapping(value="/register",method=RequestMethod.POST)
    public String registerUser(@ModelAttribute("userForm") UserMaster userMaster){
        userMasterService.saveUser(userMaster);
        return "success.html";
    }
}

register.jsp:(webapp/views/register.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
        <form:form action="register" method="post" commandName="userForm">
            <table border="0">
                <tr>
                    <td colspan="2" align="center"><h2>Spring MVC Form Demo - Registration</h2></td>
                </tr>
                <tr>
                    <td>User Name:</td>
                    <td><form:input path="userid" /></td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><form:password path="password" /></td>
                </tr>
                <tr>
                    <td colspan="2" align="center"><input type="submit" value="Register" /></td>
                </tr>
            </table>
        </form:form>
</body>
</html>

我在这里缺少什么,为什么它给我 404? 我使用 Netbeans 8.0.2 IDE

我的项目结构的屏幕截图

【问题讨论】:

  • 为什么必须删除它?
  • 既然你已经给了"/"作为你的类的映射,你应该使用映射"""register"作为方法,因为类映射在所有情况下都预先存在.
  • @takendarkk,如果我不删除它,它会尝试找到指定为欢迎文件的文件,我没有,所以再次抛出 404。
  • 那么您的 servlet 一定不能正确注册,因为在应用程序旁边有欢迎文件列表是很常见的。
  • @Kayaman,是的,谢谢,但解决方案没有解决我的问题

标签: java xml spring hibernate jsp


【解决方案1】:

首先检查代码中的 viewsolver。

  <bean id = "viewResolver"

    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix" value="/webapp/views/" />
     <property name="suffix" value=".jsp" />
   </bean>

并且不需要在@Controller下面写RequestMapping。代码应该是这样的:

  @Controller
  public class UserController

【讨论】:

    【解决方案2】:

    我的错!问题在于InternalResourceViewResolverviews 文件夹的路径

    应该是:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name = "prefix" value = "/WEB-INF/views/" />
        <property name = "suffix" value = ".jsp" />
    </bean>
    

    代替:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name = "prefix" value = "/views/" />
            <property name = "suffix" value = ".jsp" />
        </bean>
    

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2014-10-12
      • 2012-11-07
      • 2014-08-31
      • 2017-08-27
      相关资源
      最近更新 更多