2016-08-27 62 views
-1

爲什麼鏈接http://localhost:8080/demo00/user/沒有工作,說404,如何解決它? 我的網站項目結構: website structureSpring MVC:找不到其他html文件

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.demo</groupId> 
    <artifactId>demo00</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>demo00 Maven Webapp</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
      <version>1.4.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 


     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.36</version> 
     </dependency> 


     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>1.9.10</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.code.gson</groupId> 
      <artifactId>gson</artifactId> 
      <version>2.3</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.1.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.jsoup</groupId> 
      <artifactId>jsoup</artifactId> 
      <version>1.9.2</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.4</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>demo00</finalName> 
    </build> 
</project> 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    id="WebApp_ID" version="3.1"> 
    <display-name>Archetype Created Web Application</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.html</welcome-file> 
     <welcome-file>default.htm</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <context-param> 
     <param-name>ApplicationContext</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 

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

</web-app> 

爲spring-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    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-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

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

</beans> 

的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:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    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.0.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <!-- Enable @Autowired --> 
    <context:component-scan base-package="com" /> 
    <context:annotation-config /> 

    <mvc:annotation-driven /> 

    <mvc:resources mapping="/resources/**" location="/resources/" /> 
    <mvc:resources mapping="/view/**" location="/view/" /> 
    <mvc:resources mapping="/img/**" location="/img/" /> 
    <mvc:resources mapping="/fonts/**" location="/fonts/" /> 
    <mvc:resources mapping="/css/**" location="/css/" /> 
    <mvc:resources mapping="/js/**" location="/js/" /> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/demo576" /> 
     <property name="username" value="root" /> 
     <property name="password" value="123456" /> 
    </bean> 

    <!-- Session Factory Declaration --> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.demo.model" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.enable_lazy_load_no_trans">true</prop> 
       <prop key="hibernate.default_schema">demo576</prop> 
       <prop key="format_sql">true</prop> 
       <prop key="use_sql_comments">true</prop> 
       <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> --> 
      </props> 
     </property> 
    </bean> 

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

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

</beans> 

user.html:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>User</title> 
</head> 
<body> 
    <h1>Hello User!</h1> 
</body> 
</html> 

UserController.java:

package com.demo.controller; 

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.servlet.ModelAndView; 

import com.demo.model.User; 
import com.demo.service.UserService; 

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

    @Autowired 
    UserService userServices; 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public ModelAndView get() { 
     ModelAndView view = new ModelAndView("user"); 
     return view; 
    } 

    @RequestMapping(value = "/saveOrUpdate", method = RequestMethod.POST) 
    public @ResponseBody Map<String, Object> saveOrUpdate(User user) { 
     Map<String, Object> map = new HashMap<String, Object>(); 

     if (userServices.saveOrUpdate(user)) { 
      map.put("status", "200"); 
      map.put("message", "Your record have been saved successfully"); 
     } 

     return map; 
    } 

    @RequestMapping(value = "/list", method = RequestMethod.POST) 
    public @ResponseBody Map<String, Object> list(User user) { 
     Map<String, Object> map = new HashMap<String, Object>(); 

     List<User> list = userServices.list(); 

     if (list != null) { 
      map.put("status", "200"); 
      map.put("message", "Data found"); 
      map.put("data", list); 
     } else { 
      map.put("status", "404"); 
      map.put("message", "Data not found"); 

     } 

     return map; 
    } 

    @RequestMapping(value = "/delete", method = RequestMethod.POST) 
    public @ResponseBody Map<String, Object> delete(User user) { 
     Map<String, Object> map = new HashMap<String, Object>(); 

     if (userServices.delete(user)) { 
      map.put("status", "200"); 
      map.put("message", "Your record have been deleted successfully"); 
     } 

     return map; 
    } 
} 

我也跟着一步一些教程一步,但無法弄清楚什麼是錯在這裏。 我在Windows 10中使用Eclipse Neon + Tomcat 8 + Java 1.8。 請幫忙,提前致謝。

如果有不正確的代碼或結構,請指出。

編輯: 我改變了一些XML和Java文件按照以下建議,並上傳演示項目https://www.dropbox.com/s/k0rahvz4u29jzey/demo00-160828-url-does-no-work.zip?dl=0,請你檢查一下,如果可能的。謝謝。

+0

連結http://祿alhost:8080/demo00/works並顯示index.jsp的內容 –

+0

您是否想將@RequestMapping(「user」)'改爲'@RequestMapping(「/ user」)'並再次測試? – Khodabakhsh

+0

在UserController.java中,我將@RequestMapping(「user」)'改爲'@RequestMapping(「/ user」)',但仍然無效。 –

回答

0

問題是你applicationContext.xml是不是在application bootup時間,最終引發404applicationContext.xml定義的所有資源進行掃描。爲了使上下文負荷增加文件的web.xmlcontextConfigLocation部分,具體如下:applicationContext.xml

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    id="WebApp_ID" version="3.1"> 
    <display-name>Archetype Created Web Application</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.html</welcome-file> 
     <welcome-file>default.htm</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <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/applicationContext.xml, /WEB-INF/spring-servlet.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> 
</web-app> 

然後取下mvc:resources,並添加<mvc:default-servlet-handler/>和你正在使用Spring 4不更新架構位置Spring 4,而不是Spring 3,具體如下:

<?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:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.0.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 

    <!-- Enable @Autowired --> 
    <context:component-scan base-package="com" /> 
    <context:annotation-config /> 

    <mvc:annotation-driven /> 
    <mvc:default-servlet-handler/> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/demo576" /> 
     <property name="username" value="root" /> 
     <property name="password" value="123456" /> 
    </bean> 

    <!-- Session Factory Declaration --> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.demo.model" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.enable_lazy_load_no_trans">true</prop> 
       <prop key="hibernate.default_schema">demo576</prop> 
       <prop key="format_sql">true</prop> 
       <prop key="use_sql_comments">true</prop> 
       <!-- <prop key="hibernate.hbm2ddl.auto">create</prop> --> 
      </props> 
     </property> 
    </bean> 

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

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

</beans> 

如果你想知道更多關於<mvc:default-servlet-handler />,結賬我的回答here

除了上述變化,提供UserController.java獨特@RequestMapping網址否則會拋出Circular view path例外,我修改@RequestMapping在類級別/users避免相同,具體如下:

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

@RequestMapping(value = "", method = RequestMethod.GET) 
public ModelAndView get() { 
    ModelAndView view = new ModelAndView("user"); 
    return view; 
} 
} 

現在,打開http://localhost:8080/demo00/users應顯示user.html頁面如下:

enter image description here

+0

經過測試,但沒有奏效。我上傳了這個演示 https://www.dropbox.com/s/k0rahvz4u29jzey/demo00-160828-url-does-no-work.zip?dl=0 如果可能的話,請檢查。謝謝。 –

+0

哇...你做到了!非常感謝你:)我仍然有一個問題,你在類級別修改'@ RequestMapping'到'/ users'來避免這個問題。像什麼一樣?我嘗試了'/ user'和'http:// localhost:8080/demo00/user',也沒有'Circular view path'發生異常。 –

+0

@ J.W:同樣我的意思是「圓形視圖路徑異常」。由於@RequestMapping(「/ user」)公共類UserController和ModelAndView視圖=新ModelAndView(「用戶」);返回視圖;'調用相同的URL'/ user'。 – Arpit

0

我建議你在項目結構和.xml文件中進行一些更改。

1)您應該保留查看文件夾中的WEB-INF文件夾。

2),則可以刪除這些映射: -

<mvc:resources mapping="/view/**" location="/view/" /> 
<mvc:resources mapping="/img/**" location="/img/" /> 
<mvc:resources mapping="/fonts/**" location="/fonts/" /> 
<mvc:resources mapping="/css/**" location="/css/" /> 
<mvc:resources mapping="/js/**" location="/js/" /> 

3)使用本

屬性名= 「前綴」 值= 「/ WEB-INF /視圖/」

而不是此

property name =「prefix」value =「/ view /」

+0

謝謝。而如何CSS,JS,IMG和字體文件夾,他們應該去哪裏? –

+0

不需要改變這些文件夾的路徑。這些文件夾總是應該在WEB-INF之外。 – rajat

0

你可以把CSS,JS,IMG和字體文件夾在webapps /下資源的一個位置,並在應用程序上下文文件使該條目下方:

<mvc:resources mapping="/resources/**" location="/resources/" 
    cache-period="31556926" /> 

而且你可以在你的應用程序上下文文件中刪除以下行:

<mvc:resources mapping="/view/**" location="/view/" /> 
<mvc:resources mapping="/img/**" location="/img/" /> 
<mvc:resources mapping="/fonts/**" location="/fonts/" /> 
<mvc:resources mapping="/css/**" location="/css/" /> 
<mvc:resources mapping="/js/**" location="/js/" /> 

其次把您查看WEB-INF摺疊並在你的應用程序上下文文件更改的條目:

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

的d最後,您可以使用默認get方法編寫您的控制器: 不需要使用value屬性,因爲您在這裏沒有給出任何其他url。

@RequestMapping(method = RequestMethod.GET) 
    public ModelAndView get() { 
     ModelAndView view = new ModelAndView("user"); 
     return view; 
    } 

那麼你可以打:

http://localhost:8080/demo00/user 
+0

試過了,這個鏈接仍然不起作用。但是你的建議正在使代碼結構更加適合和可讀。謝謝。 –