zoukankan      html  css  js  c++  java
  • 我与404的不解之缘系列(一)记录一个智障一般的错误

    自从学习了springboot和springcloud之后,一直都没有再用ssm。

    今天,我决定复习一下ssm搭建,所以做了一个小项目,只有简简单单的查询数据功能,万万没想到,居然给我报了个404。

    先上代码:以下代码中的注解,有一部分是我个人理解,可能有错误!

    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:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="    
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
        
        <context:component-scan base-package="com.learn.ssm">
        <!-- context:component-scan对路径下的文件进行扫描,如果扫描到文件中带有@Service,@Component,@Repository,@Controller等这些注解的类,则把这些类注册为bean 
         -->
            
        </context:component-scan>
            
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/yxktv" />
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="username" value="root" />
            <property name="password" value="x5" />
        </bean>
        
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
        </bean>
        
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.learn.ssm.mapper" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>
    </beans>

    springmvc.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:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="    
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
            http://www.springframework.org/schema/mvc   http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    
        <mvc:annotation-driven />
    
        <!-- 静态资源配置 -->
        <mvc:resources mapping="/static/**" location="/static/" />
    
        <!-- 视图解析器 -->
        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/" />
            <property name="suffix" value=".jsp"></property>
        </bean>
    
        <!-- 使用注解的包,包括子集 -->
        <context:component-scan
            base-package="com.learn.ssm.controller" />
    
    
    </beans>

    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>ssm</display-name>
      <context-param><!-- 初始化上下文参数 -->
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
      <listener><!-- 监听器 用于监听种种操作,也可以自动激发一些操作 -->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <!-- load-on-startup 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
    当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
    正数的值越小,启动该servlet的优先级越高。
         -->
      </servlet>
      <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
        <!-- 如果url-pattern定义的是路径,那么以后所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理.
                如果url-pattern定义的是资源格式例如*.do等,那么对于所有符合这种格式的资源的请求都由指定的servlet处理。
         -->
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
      </welcome-file-list>
    </web-app>

    SsmController.java

    package com.learn.ssm.controller;
    import java.util.List;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import com.learn.ssm.pojo.stu;
    import com.learn.ssm.service.SsmService;
    @RestController
    @CrossOrigin
    public class SsmController {
     @Autowired
     SsmService ssmService;
     @GetMapping("/show")
     public List<stu> show(){
      return ssmService.show();
     }
    }

    SsmMapper.xml

    package com.learn.ssm.mapper;
    import java.util.List;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Select;
    import com.learn.ssm.pojo.stu;
    @Mapper
    public interface SsmMapper {
     @Select("select * from stu")
     public List<stu> show();
    }

    SsmService.xml

    package com.learn.ssm.service;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.learn.ssm.mapper.SsmMapper;
    import com.learn.ssm.pojo.stu;
    
    @Service
    public class SsmService {
        @Autowired
        SsmMapper ssmMapper;
        public List<stu> show(){
            return ssmMapper.show();
        }
    }

    stu.java

    package com.learn.ssm.pojo;
    
    public class stu {
        
        String name;
        String sex;
        int id;
        int age;
        int date;
        int classs;
        int tall;
        int num;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public int getDate() {
            return date;
        }
        public void setDate(int date) {
            this.date = date;
        }
        public int getClasss() {
            return classs;
        }
        public void setClasss(int classs) {
            this.classs = classs;
        }
        public int getTall() {
            return tall;
        }
        public void setTall(int tall) {
            this.tall = tall;
        }
        public int getNum() {
            return num;
        }
        public void setNum(int num) {
            this.num = num;
        }
        
    }

     当我在浏览器中输入http://localhost:8080/show.do时,报404,原因是我这个地址写错了,应该是http://localhost:8080/ssm20190627/show.do。

    被自己蠢哭了... ...

    再补充一点个人理解:

    当启动tomcat之后,8080端口就会被tomcat占用,但是,在tomcat中是可以同时部署多个项目的,如果访问http://localhost:8080/show.do,那么访问的是哪一个项目呢?所以,需要加上项目名,用来加以区分,http://localhost:8080/ssm20190627/show.do。

  • 相关阅读:
    MIne FirstBlog
    P6563 [SBCOI2020]一直在你身旁
    P6563 [SBCOI2020]一直在你身旁
    T122085 [SBCOI2020]时光的流逝
    LC 918. Maximum Sum Circular Subarray
    1026 Table Tennis
    LC 1442. Count Triplets That Can Form Two Arrays of Equal XOR
    LC 1316. Distinct Echo Substrings
    LC 493. Reverse Pairs
    1029 Median (二分)
  • 原文地址:https://www.cnblogs.com/wxdmw/p/11099558.html
Copyright © 2011-2022 走看看