我正在嘗試創建一個簡單的 Spring MVC 來查看 main-menu.jsp,但我有問題,我不知道如何解決它。我正在使用 Intellij 并通過 Maven 創建專案。
這是我的專案結構
src
- main
- java
- com.example.mvc
- HomeController.java
-resources
- webapp
- WEB-INF
- view
- main-menu.jsp
- applicationContext.xml
- web.xml
我的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>
<packaging>war</packaging>
<name>Demo</name>
<properties>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
</properties>
<groupId>org.example</groupId>
<artifactId>Demo</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
<configuration>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8888</port>
<maxIdleTime>30000</maxIdleTime>
</connector>
</connectors>
<webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory>
<contextPath>/</contextPath>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</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:util="http://www.springframework.org/schema/util"
xmlns:configurator="http://cocoon.apache.org/schema/configurator"
xmlns:avalon="http://cocoon.apache.org/schema/avalon" xmlns:mvc="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.1.xsd
http://cocoon.apache.org/schema/avalon http://cocoon.apache.org/schema/avalon/cocoon-avalon-1.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.example.mvc"></context:component-scan>
<mvc:annotation-driven />
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
我的 HomeController.java
package com.example.mvc;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping(value = "/hello")
public String getPage(){
return "main-menu";
}
}
最后,我的 main-menu.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>Spring MVC demo</h2>
</body>
</html>
我嘗試在 Intellij 的 Tomcat 服務器中運行,它給了我這樣的 404 錯誤
錯誤影像
謝謝你幫我解決這個問題
uj5u.com熱心網友回復:
Tomcat 10 不能與 Spring 5 一起使用,因為 Tomcat 10 正在使用從 javax 重命名的 jakarta 包。
Spring 5 不適用于 jakarta 包,Spring 6 將支持它。所以考慮到這一點:
- 春天 5 雄貓 9
- 春天 6 雄貓 10
同樣從您提供的圖片中,您的網址應該是
localhost:8080/spring_war_exploaded/hello
不是
localhost:8080/hello
要確定哪個 URL 可以是您可以轉到您的 Tomcat 配置 > 編輯 > 并檢查“啟動后”并選擇 Google Chrome 為例,這將使用正確的 URL 啟動應用程式。
"Why _war_exploded" 那主要是IntelliJ在部署的時候喜歡這樣呼叫artifact,所以如果是spring就會加_war_exploded,這是默認設定
uj5u.com熱心網友回復:
該目錄webapp應該在里面main,而不是在同一個父目錄中。
按照慣例,我們將 JSP 檔案放在 ${project.basedir}/main/webapp/WEB-INF/jsp/ 目錄中。
https://www.baeldung.com/spring-boot-jsp#view-resolver-configuration
uj5u.com熱心網友回復:
嘗試先添加此依賴項。它將自動配置您的 Web 應用程式和 DispatcherServlet。您不再需要 web.xml 檔案。此外,您可以洗掉您的 webapp 包。一切都將由 Spring Boot 完成。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.0</version>
</dependency>
然后,創建一個用@SpringBootApplication注解的類。它將啟動您的應用程式,并且您的@RestController類將被檢測和掃描。
@SpringBootApplication
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
此外,您不再需要 applicationContext.xml 檔案。Spring Boot 對此負責。Spring Boot 創建自己的 ApplicationContext 并包含所有控制器和其他 bean。
在這里,您可以更詳細地了解所有內容:https ://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
祝你好運!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/488027.html
上一篇:Linux入門常用命令
