ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringMVC学习

2021-11-29 09:00:05  阅读:108  来源: 互联网

标签:xml web SpringMVC springframework 学习 Controller import org


SpringMVC学习

一、SpringMVC概述

  • SpringMVC是基于Java实现了MVC模型的轻量级Web框架。

二、SpringMVC开发

2.1、基于配置开发

2.1.1、相关依赖导入

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>SpringMVC01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <!--servlet 3.1规范-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--jsp坐标-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <!--spring坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <!--springWeb坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <!--spring-mvc坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
		 <!--lombok相关依赖(需要下载相关的插件)-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.6</version>
        </dependency>
        <!--json相关坐标3个-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <target>1.8</target>
                    <source>1.8</source>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.1.2、核心配置文件

1、在resources中定义spring-mvc.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    // Controller 处理之后的结果会被拼接这个地址,转发到对应JSP文件总展示       
    <!-- 视图分解解析器 -->
    <bean id="viewResolver" 		           class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 这是前缀 -->
        <property name="prefix" value="/"></property>
        <!-- 这是后缀 -->
        <property name="suffix" value=".jsp"></property>
        <!-- 在spring的控制器中,返回的是一个字符串,那么请求的路径则是,前缀+返回字符串+后缀 -->
    </bean>
        
       // “ /test ”是前端拼接的地址,对应的请求会被 class 对应的 Controller 处理 
      <bean name="/test" class="com.itheima.controller.TestController"></bean>  
</beans>

2、在WEB-INFO文件的web.xml文件中定义相关配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <!--服务器已启动就会加载dispatcherServlet-->
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!--服务器启启动之后,就会读取spring-mvc.xml中配置,加载"xx"路径下的所有标记为bean的类-->
        <!-- 配置DispatcherServlet的一个初始化参数:配置SpringMVC配置文件位置和名称,这个也可以不配置,如果不配置,则默认是WEB-INFO下的springMVC-servlet.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:applicationcontent.xml</param-value>
        </init-param>

        <!--在服务器创建时自动创建-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

1、springmvc配置拦截的三种方式/

  • " / ": 拦截所有请求但是不包括JSP页面,但是会拦截静态页面如:img、js、css
  • " /* " : 拦截所有请求包括JSP页面
  • “ *.do ” : 所以以“ .do ”结尾的前端请求都会被拦截

2.1.3、定义一个类作为控制器

1、方式一:实现“ Controller “ 接口,重写里面方法。

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndViw mv = new ModelAndView();
        // 设置访问jsp文件的地址
        mv.setViewNew("/hello.jsp");
        // 设置需要返回的信息
        mv.addObject("msg","welcome to springmvc");
        return mv;
    }
}

2、方式二:实现” HttpRequestHandler “ 接口,重写里面的方法。

public class TestController implements HttpRequestHandler
    
    public void handleRequest(HttpServlertRequest request,HttpServlertResponse response) throws ServletException,IOException{
    System.out.println("welcome to springmvc");
}

注:需要把创建对应的Controller 在 spring-mvc.xml文件中注册成Bean,交给Spring容器进行管理。

2.2、基于注解开发

2.2.1、相关依赖导入

  • 和基于配置文件开发导入的依赖一致

2.2.2、核心配置文件

1、在resources中定义spring-mvc.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
           
    <!-- 定义扫描的包 -->
    <context:component-scan base-package="被扫描包的全路径类名"/>      
    <!--开启SpringMVC注解驱动-->
    <mvc:annotation-driven conversion-service="conversionService"/>    
        
    // Controller 处理之后的结果会被拼接这个地址,转发到对应JSP文件总展示       
    <!-- 视图分解解析器 -->
    <bean id="viewResolver" 		           class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 这是前缀 -->
        <property name="prefix" value="/"></property>
        <!-- 这是后缀 -->
        <property name="suffix" value=".jsp"></property>
        <!-- 在spring的控制器中,返回的是一个字符串,那么请求的路径则是,前缀+返回字符串+后缀 -->
    </bean>
</beans>

2、在WEB-INFO文件的web.xml文件中定义相关配置

  • 和基于配置文件开发进行的配置文件一致。

2.2.3、定义一个类作为控制器

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @Controller是控制器的注解
*/
@Controller
@RequestMapping("/test")
public class UserController {

    @RequestMapping("/save")
    public String save() {
        System.out.println("save is run .....");
        return "/success.jsp";
    }
    @RequestMapping("/requestParam")
    public String requestParam(String name){
        System.out.println(name);
        return "/success.jsp";
    }
}

注:@RequestMapping("/test")这里的“ /test ”,作为父类的路径,前端请求的url地址为:http://localhost:8080/test/save,类里面的每个方法请求的都会加上这个前缀,其也可以不进行配置。如果不配置前端的访问地址为:http://localhost:8080/save。

2.3、基于java代码开发

2.3.1、相关依赖导入

  • 和基于配置文件开发导入的依赖一致

2.3.2、配置类的创建

1、定义配置类代替“ 在resources中定义spring-mvc.xml文件 ”。

@Configuration
@ComponentScan("com.itheima.controller") // 指定包扫描的位置
@EnableWebMvc  //mvc的注解驱动
public class SpringMVCConfig implements WebMvcConfigurer {
     // 注解配置放行指定资源格式
   /* public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**").addResourceLocations("/img/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
    }*/
    
    /**
     *  放行静态资源文件  (一般配置这种方式就可以)
     * @param configurer
     */
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

 ==**注意:**==替代Spring-mvc.xml文件,必须实现WebMvcConfigurer接口。
 ==**注意:**==之前spring-mvc.xml文件是在web.xml中读取的,我们知道,服务器启动时,会自动解析web.xml;那么当我们采用纯注解配置时,如何自动去解析该配置类呢。这里我们会用到之前咱们提到的spi机制。

2、定义配置类代替“ 在WEB-INFO文件的web.xml文件 ”

package com.itheima.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

import javax.servlet.Filter;

// 该类中onStartup方法会在服务器启动时自动执行
public class WebConfig extends AbstractDispatcherServletInitializer {
    
    // 配置Springmvc容器,加载web层bean
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext acwc = new AnnotationConfigWebApplicationContext();
        acwc.register(SpringMVCConfig.class);
        return acwc;
    }

    // 配置DispatcherServlet的访问路径
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    // 配置Spring容器,加载service层和dao层bean
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext acwc = new AnnotationConfigWebApplicationContext();
        acwc.register(SpringConfig.class);
        return acwc;
    }

    // 添加Post请求参数乱码过滤器
    protected Filter[] getServletFilter(){
        CharacterEncodingFilter cef = new CharacterEncodingFilter();
        cef.setEncoding("utf-8");
        cef.setForceEncoding(true);
        return new Filter[]{cef};
    }
}

image-20211127185735928

image-20211127185801848

image-20211127185828169

image-20211127185843474

2.3.2、定义一个类作为控制器

  • 和基于注解开发定义的“ Controller ”一致。

三、SpringMVC请求

3.1、请求地址获取

1、@RequestMapping 获取请求url:

  • 注解用于获取请求的url地址,其可以加在类上和方法上。加上类有作为父路径的作用,所以类中的方法的请求地址都会拼接类上的路径。

2、@RequestMapping 设置请求方式:

  • @RequestMapping(value="/testMethod",method=RequestMethod.POST),其中" method "就是用于指定请求方式。

标签:xml,web,SpringMVC,springframework,学习,Controller,import,org
来源: https://www.cnblogs.com/s-cheng/p/15617853.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有