前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RestFul,mvc拦截器,SSM基本整合-学习笔记

RestFul,mvc拦截器,SSM基本整合-学习笔记

作者头像
Maynor
发布2021-12-06 20:45:08
2170
发布2021-12-06 20:45:08
举报

文章目录

1.SpringMVC文件上传

1.1 多文件上传

1.2 JSON

2. RESTFul

2.1 什么是RESTFul

2.2 使用

2.2.1 步骤

2.2.2 实现

  • 配置类
image-20211014152155234
image-20211014152155234
  • 控制器
代码语言: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
  • 在处理器执行过程中,进行拦截或处理
image-20211014160606073
image-20211014160606073
代码语言:javascript
复制
preHandler 拦截器处理前方法,如果返回true继续执行,如果返回false,表示被拦截。
postHandler 拦截器处理方式,controller执行完成后,将执行处理方法。
afterCompletion 完成方法,视图渲染完成触发。

3.2 入门案例

3.3 多拦截器

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

4. SSM 整合:案例

4.1 需求

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

4.2 环境搭建

4.3 导入配置类

  • 创建对应的目录结构
image-20211014172230389
image-20211014172230389

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.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>
</html>

步骤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);
代码语言:javascript
复制
      @Override
    public boolean add(User user) {
        // 自动生成id
        String uuidString = UUID.randomUUID().toString().replace("-","");
        user.setUid(uuidString);
        int insert = userMapper.insert(user);
        return insert == 1;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 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 实现
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档