【1024程序员节】RestFul,mvc拦截器,SSM基本整合-学习笔记

2022-05-08 13:55:50 浏览数 (1)

文章目录

  • 1.SpringMVC文件上传
    • 1.1 多文件上传
    • 1.2 JSON
  • 2. RESTFul
    • 2.1 什么是RESTFul
    • 2.2 使用
      • 2.2.1 步骤
      • 2.2.2 实现
  • 3. spring mvc 拦截器
    • 3.1 概述
    • 3.2 入门案例
    • 3.3 多拦截器
  • 4. SSM 整合:案例
    • 4.1 需求
    • 4.2 环境搭建
    • 4.3 导入配置类
      • 4.3.1 MyBatis配置类
      • 4.3.2 Spring配置类
      • 4.3.3 Spring MVC配置类
      • 4.3.4 启动配置类
    • 4.4 查询所有
      • 4.4.1 需求
      • 4.4.2 步骤
      • 4.4.3 实现
    • 4.5 添加
      • 4.5.1 需求
      • 4.5.2 步骤
      • 4.5.3 实现

1.SpringMVC文件上传

1.1 多文件上传

1.2 JSON

2. RESTFul

2.1 什么是RESTFul

2.2 使用

2.2.1 步骤

2.2.2 实现

  • 配置类
  • 控制器
代码语言:javascript复制
package com.czxy.rest.controller;

import com.czxy.rest.domain.User;
import io.swagger.models.Response;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author manor
 *  
 */
@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * 查询所有
     * @return
     */
    //等效 @RequestMapping(method = RequestMethod.GET)
    @GetMapping
    public ResponseEntity<List<User>> list() {
        List<User> list = new ArrayList<>();
        list.add(new User(1,"jack","1234", new Date()));
        list.add(new User(2,"肉丝","6666", new Date()));
        list.add(new User(3,"tom","loverose", new Date()));

        return ResponseEntity.ok(list);
    }

    /**
     * 添加用户
     * @param user
     * @return
     */
    @PostMapping(produces = "application/json;charset=UTF-8")
    public ResponseEntity add(@RequestBody User user) {
        System.out.println(user);
        return ResponseEntity.ok("添加成功");
    }

    /**
     *
     * @param user
     * @return
     */
    @PutMapping
    public ResponseEntity<String> update(@RequestBody User user) {
        System.out.println(user);
        return ResponseEntity.ok("update success");
    }

    /**
     * 删除
     * @param userId
     * @return
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<String> delete(@PathVariable("id") String userId ) {
        System.out.println(userId);
        return ResponseEntity.ok("delete success");
    }

}

3. spring mvc 拦截器

3.1 概述

  • spring mvc拦截器相当于 java web filter
  • 在处理器执行过程中,进行拦截或处理
代码语言:javascript复制
preHandler 拦截器处理前方法,如果返回true继续执行,如果返回false,表示被拦截。
postHandler 拦截器处理方式,controller执行完成后,将执行处理方法。
afterCompletion 完成方法,视图渲染完成触发。

3.2 入门案例

3.3 多拦截器

  • 执行流程
  • 多拦截器拦截的顺序,就是在配置类中配置的顺序。

4. SSM 整合:案例

4.1 需求

  • 用户的增删改查
    • SSM:spring mvc 、spring、mybatis
    • view:jsp (非重点)

4.2 环境搭建

4.3 导入配置类

  • 创建对应的目录结构

4.3.1 MyBatis配置类

代码语言:javascript复制
package com.czxy.ssm.config;

import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;

import javax.sql.DataSource;
import java.util.Properties;

public class MyBatisConfiguration {
	/**
	 * 配置session工厂
	 * @param dataSource
	 * @return
	 * @throws Exception
	 */
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
		//1 创建 factoryBean
		SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
		//2 设置数据
		// 2.1 数据源 
		factoryBean.setDataSource(dataSource);
		
		// 2.2 驼峰命名
		Configuration configuration = new Configuration();
		configuration.setMapUnderscoreToCamelCase(true);
		factoryBean.setConfiguration(configuration);
		
		// 2.3 分页插件
		Properties props = new Properties();
		// 设置方言
		props.setProperty("dialect", "mysql");
		// 分页的同时进行count查询
		props.setProperty("rowBoundsWithCount", "true");
		// 分页合理化参数,pageNum<=0 时会查询第一页,pageNum>pages (超过总数时),会查询最后一页
		props.setProperty("reasonable", "true");

//		PageInterceptor pageInterceptor = new PageInterceptor();
//		pageInterceptor.setProperties(props);
		PageHelper pageHelper = new PageHelper();
		pageHelper.setProperties(props);

		factoryBean.setPlugins(new Interceptor[] {pageHelper});
		
		//3 通过factorybean获得对应
		return factoryBean.getObject();
	}
	/**
	 * 映射扫描器
	 * @return
	 */
	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer(){
		//1 创建
		MapperScannerConfigurer mapperScanner = new MapperScannerConfigurer();
		//2设置包
		mapperScanner.setBasePackage("com.czxy.ssm.mapper");
		
		return mapperScanner;
	}

}

4.3.2 Spring配置类

代码语言:javascript复制
package com.czxy.ssm.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@ComponentScan(basePackages="com.czxy.ssm.service")
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
public class SpringConfiguration {
	/**
	 * 获得properties文件中内容,并注入对应变量
	 */
	@Value("${jdbc.driver}")
	private String driver;
	
	@Value("${jdbc.url}")
	private String url;
	
	@Value("${jdbc.username}")
	private String username;
	
	@Value("${jdbc.password}")
	private String password;
	/**
	 * 配置数据源
	 * @return
	 */
	@Bean
	public DataSource dataSource(){
		DruidDataSource druidDataSource = new DruidDataSource(); 
		druidDataSource.setDriverClassName(driver);
		druidDataSource.setUrl(url);
		druidDataSource.setUsername(username);
		druidDataSource.setPassword(password);
		return druidDataSource;
	}

	/**
	 * 事务管理器
	 * @param dataSource
	 * @return
	 */
	@Bean
	public DataSourceTransactionManager txManager(DataSource dataSource){
		return new DataSourceTransactionManager(dataSource);
	}

}

4.3.3 Spring MVC配置类

代码语言:javascript复制
package com.czxy.ssm.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@ComponentScan(basePackages="com.czxy.ssm.controller")
//public class MvcConfiguration extends WebMvcConfigurationSupport {
public class MvcConfiguration implements WebMvcConfigurer {
	/**
	 * 视图解析器
	 * @return
	 */
	@Bean
	public InternalResourceViewResolver internalResourceViewResolver(){
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		//前缀 jsp文件夹
		viewResolver.setPrefix("/WEB-INF/pages/");
		//后缀 jsp扩展名
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	}


}

4.3.4 启动配置类

代码语言:javascript复制
package com.czxy.ssm.config;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class WebInitializer implements WebApplicationInitializer {

	@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		//1 配置spring工厂
		AnnotationConfigWebApplicationContext application = new AnnotationConfigWebApplicationContext();
		// 注册所有的配置类
		application.register(MyBatisConfiguration.class);
		application.register(SpringConfiguration.class);
		application.register(MvcConfiguration.class);
		
		//2 post中文乱码
		FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding", new CharacterEncodingFilter("UTF-8"));
		encodingFilter.addMappingForUrlPatterns(null, true, "/*");
		
		//3 核心控制器
		ServletRegistration.Dynamic mvcServlet = servletContext.addServlet("springmvc", new DispatcherServlet(application));
		//mvcServlet.addMapping("*.action");
		mvcServlet.addMapping("/");
		mvcServlet.setLoadOnStartup(2);	//tomcat启动时,执行servlet的初始化方法
		
	}

}

4.4 查询所有

4.4.1 需求

完成查询所有功能

4.4.2 步骤

  • 步骤1:编写JavaBean(User)
    • 提供字段 和 表类对应
    • 添加MyBatis相关注解 @Id 等
  • 步骤2:编写Mapper(UserMapper)
    • 整合通用Mapper
  • 步骤3:编写service
    • 需要管理事务
  • 步骤4:编写controller
    • 处理请求路径
    • 选择视图页面 list
  • 步骤5:list.jsp 页面展示数据(非重点)

4.4.3 实现

4.5 添加

4.5.1 需求

完成用户添加

4.5.2 步骤

  • 步骤1:点击添加按钮,显示添加表单
  • 步骤2:编写controller,处理添加功能
    • 添加成功后,跳转到列表页面
    • 添加失败后,转发添加页面,提示错误信息
  • 步骤3:编写service,完成添加

4.5.3 实现

步骤1:点击添加按钮,显示添加表单

1.1 在list.jsp页面中,编写添加按钮

代码语言:javascript复制
<a href="${pageContext.request.contextPath}/user/addUI.action">添加</a>

1

1.2 编程UserController显示jsp

代码语言:javascript复制


    /**
     * 显示页面
     * @return
     */
    @RequestMapping("/addUI")
    public String addUI() {
        return "add";
    }

1.3 编写表单

代码语言:javascript复制

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--  错误信息   --%>
    <font color="red"> ${msg}</font>

    <form action="${pageContext.request.contextPath}/user/add.action" method="post">
        用户名:<input type="text" name="userName" /> <br/>
        密码:<input type="password" name="password" /> <br/>
        昵称:<input type="text" name="name" /> <br/>
        <input type="submit" value="添加用户"/>
    </form>
</body>

步骤2:编写controller,处理添加功能

添加成功后,跳转到列表页面

添加失败后,转发添加页面,提示错误信息

代码语言:javascript复制
/**
     *
     * @param use
     * @param model
     * @return
     */
    @RequestMapping("/add")
    public String add(User user, Model model) {
        // 添加用户
        boolean result = userService.add(user);
        if(result) {
            // 添加成功
            return "redirect:/user/selectAll.action";
        } else {
            // 添加失败
            model.addAttribute("msg", "添加失败");
            return "forward:/WEB-INF/pages/add.jsp";
        }

    }

步骤3:编写service,完成添加(接口 实现类)

代码语言:javascript复制
    /**
     * 添加
     * @param use
     * @return
     */
    boolean add(User user);

      @Override
    public boolean add(User user) {
        // 自动生成id
        String uuidString = UUID.randomUUID().toString().replace("-","");
        user.setUid(uuidString);
        int insert = userMapper.insert(user);
        return insert == 1;
    }

0 人点赞