专栏首页最新最全的大数据技术体系【1024程序员节】RestFul,mvc拦截器,SSM基本整合-学习笔记

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

文章目录

  • 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 实现

  • 配置类
  • 控制器
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
  • 在处理器执行过程中,进行拦截或处理
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配置类

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配置类

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配置类

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 启动配置类

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页面中,编写添加按钮

<a href="${pageContext.request.contextPath}/user/addUI.action">添加</a>

1

1.2 编程UserController显示jsp



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

1.3 编写表单


<%@ 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,处理添加功能

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

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

/**
     *
     * @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,完成添加(接口+实现类)

    /**
     * 添加
     * @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;
    }
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.csdn.net/xianyu120复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

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

    ChinaManor
  • 完整的Java学习路线

    框架师
  • Java学习之SpringMVC 拦截器

    拦截器可以用在权限验证,比如在访问后台资源的时候,经过拦截器看请求有没有进行身份验证,身份验证通过后放行,否则跳转会后台登陆页面。

    全栈程序员站长
  • SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    Kevin_Zhang
  • 深度学习springMVC(八)SSM框架知识点复习

    ①创建web项目,然后导入SSM的jar包 ②在src下创建MVC的包结构 ③在src下创建并配置

    一天不写程序难受
  • 撒花 | SSM 完结

    同样,整合之后,如果我们可以通过前台页面来执行查询方法,并且查询出的数据能够在页面中正确显示,那么我们也可以认为三大框架整合成功。

    千羽
  • 拦截器的骚操作

    要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置。通常拦截器类可以通过两种方式来定义。

    千羽
  • Java从入门到精通到全栈

    写在前面的话:全栈这条路不好走,但是作为一名独立开发者,喜欢折腾的程序员,我总会捣鼓一些不一样的东西,所以我也会带着大家一起折腾

    Gorit
  • 玩归玩,傻子才拿Spring Boot代替SSM!

    有了Spring Boot 还学SSM干嘛?你有没有也这么想过?天真!那我只能说你不了解Spring Boot 也不懂SSM…… 1 划重点,一句话讲清 只要...

    博文视点Broadview
  • 从故纸堆里,回顾下Web技术的发展历程

    Web开发框架,目前是Spring Boot+JPA,我正好出过本书,从中大家能感受到现在的技术。

    用户1153489
  • 最后的大爆发五万字总结SpringMVC教程——三部曲封神之作(建议收藏)

    ​ Spring web mvc是表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:

    ChinaManor
  • Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项...

    程序员十三
  • Java进阶,离不开经典框架,离不开SSM!

    当你在求职面试时,会发现,若想进入大型企业从事项目开发,仅具备Java SE的知识还远远不够。 Spring+Spring MVC +MyBatis已经成了Ja...

    博文视点Broadview
  • Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十五)阶段总结

    程序员十三
  • 关于Spring 和 Spring MVC的43个问题【问题汇总】

    通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。

    Java学习
  • Java不犯难,搞定SSM,打通你的技术跃升之路

    当你在求职面试时,会发现,若想进入大型企业从事项目开发,仅具备Java SE的知识还远远不够。 Spring+Spring MVC +MyBatis已经成了Ja...

    博文视点Broadview
  • lagou 爪哇 1-3 spring mvc 笔记

    作业一: 手写MVC框架基础上增加如下功能 1)定义注解@Security(有value属性,接收String数组),该注解用于添加在Controller类...

    acc8226
  • 【微服务】132:SpringBoot搭建SSM项目环境

    配置文件除了可以使用properties类型,还可以使用后缀名为:.yml或者.yaml的类型,比如说:application.yml文件。

    刘小爱
  • Java学习之路 -- Java怎么学?

    当时,作为懵懂的小白,大一学习了c和c++,还有数据结构,后来才自学的java。有了c++的基础,其实学java确实感觉挺容易上手。如果没有c或者c++的基础,...

    秦怀杂货店

扫码关注腾讯云开发者

领取腾讯云代金券