Spring—SpringMVC

奇葩的经历。。。

今天凌晨还在睡梦中,被一阵剧痛疼醒了,整个人在床上呻吟。后来实在忍不住了去医院检查,把我吓坏了都...查出来是尿结石...我这年纪轻轻的,怎么这么快就长了个石头了...无语。无奈啊,只能当场选择碎石,等喝了一杯水,打了一针催尿剂后,就开始了。说实话第一次体验还是很紧张的,生怕出什么意外。超声波碎石仪就像打桩机一样打在肚子上,只不过是以声波的形式。这十几分钟堪称最难熬的十几分钟了,无论是尿意还是疼痛还是恐惧都达到了极点,好在碎石结束后,疼痛的左边终于不疼了,一口气才能舒出来。屏幕前的你一定要多喝水!多运动啊!等到回家后,才是7点钟,想着还能睡个回笼觉,却不曾料到催尿剂还在发挥功效,半小时就得上一次厕所。。。没办法啊。。只好爬起来继续学Spring了(期末考试延期到下学期了,但目前复习计划还没开始,全都用来学SSM了,在学两天我就暂时放放,开始复习之路了!)

 


那么今天学习了SpringMVC技术,它和Servlet一样,同样属于是Web层的开发技术。要理解SpringMVC,推荐大家先去看看Servlet的相关课程,在以后的开发过程中,Servlet起的作用还是相当大的。学的比较快,知识点太多,有写的不够好的地方请大家指出,必将修改!万分感谢!

为什么要学习SpringMVC?

不是已经有Servlet等技术了吗?这里大家可以放心地相信一个事实,凡事带有Spring的,都必然和解耦有关。通常的应用程序有这样的问题,就是处理业务数据的对象和显示业务数据的视图之间有着较高的耦合,更新业务对象的命令从视图发起,这使得视图对任何的业务对象的更改都有很高的敏感程度,可谓动一发而牵全身,所以当一个被很多视图依赖的对象发生变化时,其产生的代价是十分庞大的。那么SpringMVC就是采用了请求-响应的模型,帮助我们简化了Web的开发,同时实现解耦的目的。例如传统的Servlet实现增删改查要实现4各类,而使用SpringMVC开发就可以将其整合至一个类中,如下图所示,指定了映射路径,运行tomcat服务器后就可以通过访问该路径来实现这种方法,便于维护和操作。下面我使用一个实例来演示一下。

第一步,创建maven对象,如下所示,注意,在Archetype中必须选择含有webapp的这一项,否则将无法进行web开发。进入后会呈现如下的项目结构。有的可能会没有java包,很简单咋项目结构中进行添加即可。

 

 

 

 

 

 

 第二步,导入依赖,为了让大家省去导入的过程,我直接将我的pom.xml文件贴在下面了。直接将其粘贴覆盖整个pom.xml文件即可,粘贴好了要刷新一下maven项目。

 

<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>org.example</groupId>
  <artifactId>Springmvc_rest_case</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Springmvc_rest_case Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
    <java.version>1.8</java.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>80</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
View Code

 

第三步,编写配置类,既然使用了SpringMVC,那么对它的配置是必不可少的,同时,要书写一个ServletContainersInitConfig配置类。用于加载SpringMVC配置类和设置过滤器等等。

SpringMvcConfig类如下。

@Configuration
@ComponentScan("study.controller")    //后续使用
public class SpringMvcConfig {
}

ServletContainersInitConfig类如下。

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //中文乱码处理(过滤器)
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter=new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

第四步:编写UserController类,用来实现方法。

//定义表现层控制器bean
@Controller
public class UserController {

    //设置映射路径为/save,即外部访问路径
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("user save ...");
        return "{'info':'springmvc'}";
    }
    //设置映射路径为/delete,即外部访问路径
    @RequestMapping("/delete")
    @ResponseBody
    public String delete(){
        System.out.println("user save ...");
        return "{'info':'springmvc'}";
    }
}

最后配置一下Tomcat服务器运行即可。在浏览器中输入http://localhost/save或者是http://localhost/delete,即可看到返回值和控制台的显示的操作。这就是一个使用SpringMVC开发的基本流程

 

 

 

 


 

Bean管理

在执行完上述的操作后,不知道大家有没有发现一个问题,就是采用SpringMVC所书写的配置类具有@Configuration和@ComponentScan("study.controller"),可以得知controller作为一个bean是专门用于SpringMVC使用的。然而在结合Spring开发时,Spring的配置类也会对整个包进行扫描,那么该如何保证不属于Spring的Controller不被扫描到呢?

其实有两种方法,第一种,将SpringConfig的扫描包配置详细一点,即精确到对应的层,例如dao层和service层。

第二种,设置拦截(过于复杂不做阐述,感兴趣的可以自行百度)。

请求与响应

问题一:如果多人团队开发,每个人设置不同的请求路径,冲突问题如何解决?方法是有的,就是将模块名作为请求路径的前缀。例如对于不同Controller中的相同路径,可以设置一个前缀,如下所示。这样一来就可以简化映射路径了。

 

接下来的部分是get和post请求。该部分设计Postman测试接口,等后续单独写一篇来讲解。

RESTful

所谓Rust,其实就是一种编码规范(本来不是规范,但用的人多了,暗中约定成了一种规范)

 

对于其,只需要记住增删改查的对应操作即可。分别是Post,Delete,Put和Get。了解了这些就可以结合Postman来使用,具体做法会单独放一份。

今天学的还是比较草率的,明天预计是完成一个REST风格设计的整合SSM框架的小项目,到时候结合着实例看应该会有很多收获。

 

posted @ 2023-02-07 20:15  GaryRoyal  阅读(49)  评论(0)    收藏  举报