Spring MVC 看不到控制器,并给出 404 页面

问题描述 投票:0回答:1

我遇到了这个问题:

  1. 在 Tomcat 10 中,我看到了我的 FirstPage -index.html,但在 main.xml 中选择了
  2. 选项
<property name="suffix" value=".jsp" />

2.在我所有的控制器端点 tomcat 上给我 HTTP 状态 404

enter image description here

我的项目结构:

enter image description here

我的pom.xml

<dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-framework-bom</artifactId>
       <version>6.1.3</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
   </dependencies>
 </dependencyManagement>

 <dependencies>

   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-core</artifactId>      
   </dependency>

   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
   </dependency>

   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-beans</artifactId>
   </dependency>

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

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

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
</dependency>

<dependency>
   <groupId>jakarta.persistence</groupId>
   <artifactId>jakarta.persistence-api</artifactId>
   <version>3.1.0</version>
</dependency>

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

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>3.2.2</version>
</dependency>


<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.2.224</version>
    <scope>test</scope>
</dependency>

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


<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.16.1</version>
</dependency>

 </dependencies>

web.xml


                             
  <display-name>TodoList</display-name>
  <servlet>
    <servlet-name>TodoListServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/main.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>TodoListServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>

main.xml


   
   <context:component-scan base-package="org.todolist"/>

   <mvc:annotation-driven />
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
       <property name="prefix" value="/WEB-INF/view/" />
       <property name="suffix" value=".jsp" />
    </bean>
  
  <bean id="dataSource_mysql" class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
       destroy-method="close">
<!--       <property name="driverClassName" value="com.mysql.jdbc.Driver" />-->
      <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
       <property name="url"
          value="jdbc:mysql://localhost:3306/todolist_DB" />
       <property name="username" value="root" />
       <property name="password" value="root" />
    </bean>
       
    
     <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
         <property name="packagesToScan" value="org.todolist.domain" />
<!--         <property name="dataSource" ref="dataSource" />-->
           <property name="dataSource" ref= "dataSource_mysql"/>
         <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
         <property name="jpaProperties">
              <props>
<!--                     <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> -->
                   <!-- <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> -->
                    <prop key="hibernate.generate-ddl">true</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.format_sql">true</prop>
                    <prop key="hibernate.hbm2ddl.auto">create-drop</prop>                  
                </props>
         </property>
     
    </bean>
    
    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">                    
         <property name="showSql" value="true"/>
         <property name="generateDdl" value="true"/> 
    </bean>  
  
 

</beans>

控制器


@Controller
public class UserController {
    
    private final IUserService userService; 
    
    @Autowired
    public UserController(IUserService userService) {
       this.userService = userService;
    }

    @RequestMapping("/")
    public String showPage() { return "home";}

    @PostMapping(path = "/user")
    public ResponseEntity<User> createUser(@RequestBody User user){
       return new ResponseEntity<>(user,HttpStatus.OK );
    }
    
    @PostMapping(path = "/todo")
    public ResponseEntity<Todo> createTask(@RequestBody Todo todo){
       return new ResponseEntity<>(todo,HttpStatus.OK );
    }
    
    @GetMapping(value = "/getuser")
    public String getUsers(Model model) { 
       return "404.html";
    }

    @RequestMapping(value =  "/test", method = RequestMethod.GET)
    public String testMethod (Model model) {
       model.addAttribute("greeting", "Hello World 2");
       return "welcome";
    }

我尝试从文档中插入标准代码,但没有给出结果。

最后是我的 Tomcat 配置

enter image description here

我尝试更改Tomcat版本,将tomcat从8升级到10。

我添加了用于测试控制器的标准端点。但没有发现问题。

java spring tomcat
1个回答
0
投票

我发现问题,我采取了后续步骤:

  1. 更改架构
<web-app version="5.0"
         xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
         https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd">
  1. 我在docker镜像中将MySql版本从5更改为8

  2. 我添加新的依赖项

 <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.23.0</version>
  </dependency>
© www.soinside.com 2019 - 2024. All rights reserved.