IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring之SpringMVC(SSM整合) -> 正文阅读

[Java知识库]Spring之SpringMVC(SSM整合)

🍤Spring之SpringMVC



一、拦截器

?什么是拦截器:简单说就是对客户页面发送的请求进行拦截,进行一系列的处理。

?两种实现方式:

  • 实现接口:org.springframework.web.servlet.HandlerInterceptor
  • 继承适配器:org.springframework.web.servlet.handler.HandlerInterceptorAdapter

在这里插入图片描述


  • 使用登录小案例练习拦截器
  • 当用户没登陆成功, 则无法访问后台以及其他页面
①、创建web项目引入依赖
<!--    Spring依赖-->
    <!-- spring 核心jar -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- spring web -->
    <dependency> <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- spring mvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- web servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>

    <!--    json依赖-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.6</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.6</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.6</version>
    </dependency>
  </dependencies>
②、web.xml文件配置
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--过滤器-->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--中央控制器-->
  <servlet>
    <servlet-name>helloMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:spring.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloMvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

③、spring.xml文件配置
<!--        开启自动扫描-->
        <context:component-scan base-package="com.yjxxt.controller"/>
        <!-- 使用默认的 Servlet 来响应静态文件 -->
        <mvc:default-servlet-handler/>
        <!-- 注解驱动-->
        <mvc:annotation-driven/>
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              id="internalResourceViewResolver">
                <!-- 前缀:在WEB-INF目录下的jsp目录下 -->
                <property name="prefix" value="/"/>
                <!-- 后缀:以.jsp结尾的资源 -->
                <property name="suffix" value=".jsp"/>
        </bean>


<!--        拦截器-->
<!--        <mvc:interceptors>-->
<!--                <bean class="com.yjxxt.interceptor.Interceptor1"/>-->
<!--        </mvc:interceptors>-->

<!--        配置拦截器-->
            <mvc:interceptors>
<!--                第二个拦截器-->
                <mvc:interceptor>
                    <mvc:mapping path="/**"/>
                    <mvc:exclude-mapping path="/js/**"/>
                    <bean class="com.yjxxt.interceptor.Interceptor2"/>
                </mvc:interceptor>
            </mvc:interceptors>
</beans>

④、项目的大致结构

在这里插入图片描述


controller/Login.java登录的简单处理

@Controller
public class Login {
    @RequestMapping("islogin")
    public String isLogin(User user, HttpServletRequest req)  {
        System.out.println("123".equals(user.getName()));
        if("123".equals(user.getName())&&"123".equals(user.getPwd())){

            req.getSession().setAttribute("user",user);
            return "hello";
        }else{
            return "redirect:login.jsp?msg=is false";
        }
    }
}

interceptor/interceptor1.java拦截器

public class Interceptor2 extends HandlerInterceptorAdapter {
    //请求之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //不是登录页面都不允许访问
        if(request.getRequestURI().contains("login")){
            return true;
        }
        //判断是否登录成功,成功则放行
        User user=(User) request.getSession().getAttribute("user");
        System.out.println(request.getSession().getAttribute("user"));
        if(user!=null){
            return true;
        }
        //一律跳转登录
        request.getRequestDispatcher("login.jsp").forward(request,response);
        return false;
      //  return false;
    }
}

bean/User.java

public class User {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public User(String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
    public String getName() {
        return name;
    }
    public User() {
    }
    private String pwd;
}

前端页面的编写:webapp/

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
${param.msg}
<hr>
    <form action="islogin" method="get">
        用户名:<input type="text" name="name" value="123">
        密码:<input type="text" name="pwd" value="123">
        <input type="submit" value="提交"/>
    </form>
</body>
</html>


hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <hr>
${sessionScope.user}
</body>
</html>

在这里插入图片描述


正确密码
在这里插入图片描述
错误密码会被拦截
在这里插入图片描述


二、文件上传

代码演示:

1、创建web项目引入依赖
    <!-- spring web -->
    <dependency> <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- spring mvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- web servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>

    <!-- 添加 commons-fileupload 依赖 -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

    <!--    json依赖-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.6</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.6</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.6</version>
    </dependency>

2、web.xml文件配置
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--过滤器-->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--中央控制器-->
  <servlet>
    <servlet-name>helloMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:spring.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloMvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

3、spring.xml文件配置
<!--        开启扫描-->
    <context:component-scan base-package="com.yjxxt"/>
<!--    静态资源-->
    <mvc:default-servlet-handler/>
<!--    注解驱动-->
    <mvc:annotation-driven>
        <!--json解析器-->
    </mvc:annotation-driven>
    <!--试图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--上传解析器-->
    <!-- 文件上传 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 允许文件上传的最大尺寸 -->
        <property name="maxUploadSize">
            <value>104857600</value>
        </property>
        <!--
          设置文件放入临时文件夹的最大大小限制。
          此值是阈值,低于此值,则保存在内存中,如高于此值,则生成硬盘上的临时文件。
      -->
        <property name="maxInMemorySize">
            <value>4096</value>
        </property>
    </bean>

</beans>

4、项目的大致结构

在这里插入图片描述


①、UserController.java

@Controller
public class UploadController {
    @RequestMapping("upload")
    public String upload(@RequestParam("myfile") MultipartFile file, HttpServletRequest req) throws IOException {
        //判断是否为空
        if(!file.isEmpty()){
            //获取文件名
           String filename= file.getOriginalFilename();
           //获取后缀
            String last=filename.substring(filename.lastIndexOf("."));
            Long tim=System.currentTimeMillis();
            filename=tim+last;
           //获取当前项目的路径
            String load=req.getServletContext().getRealPath("/");
            //上传目录
            File loadfile=new File(load+"/onload");
            //判断是否存在目录
            if(!loadfile.exists()){
                loadfile.mkdirs();
            }
            File srcfile=new File(loadfile,filename);
            //上传
            file.transferTo(srcfile);
            req.setAttribute("msg","上传成功~");
        }else{
            req.setAttribute("msg","文件不能为空");
        }
        return "msg";
    }
}


②视图文件内容

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <form action="upload" method="post" enctype="multipart/form-data">
      文件<input type="file" name="myfile">
      <input type="submit" value="提交">
  </form>
</body>
</html>

跳转信息页面

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  ${requestScope.msg}
</body>
</html>

结果

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


三、SpringSSM整合

  • SSM:Spring+SpringMVC+Mybatis
  • 轻量级框架,重量级配置
1、依赖的导入

pom.xml

  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <!-- spring 核心jar -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <!-- spring 测试jar -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <!-- spring jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <!-- spring事务 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <!-- aspectj切面编程的jar -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.5</version>
    </dependency>


    <!-- c3p0 连接池 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

    <!-- mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.3</version>
    </dependency>

    <!-- 添加mybatis与Spring整合的核心包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.3</version>
    </dependency>

    <!-- mysql 驱动包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.19</version>
    </dependency>

    <!-- 日志打印相关的jar -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.2</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.2</version>
    </dependency>

    <!-- 分页插件 -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.10</version>
    </dependency>

    <!-- spring web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <!-- spring mvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <!-- web servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>

    <!-- 添加json 依赖jar包(注意版本问题) -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.10.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.10.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.10.0</version>
    </dependency>

    <!-- commons-fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
    </dependency>

2、web.xml配置
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <!-- 启动spring容器-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <!-- 编码过滤 utf-8 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 设置监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- servlet请求分发器 -->
  <servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-servlet.xml</param-value>
    </init-param>
    <!-- 表示启动容器时初始化该Servlet -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
</web-app>

3、resources下的文件配置

spring.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:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/aop
       https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
       https://www.springframework.org/schema/tx/spring-tx.xsd">


    <!-- 扫描基本包 -->
    <context:component-scan base-package="com.yjxxt.ssm">
        <!--  context:exclude-filter标签:排除对某个注解的扫描 (过滤controller层) -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!-- 加载properties 配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- aop -->
    <aop:aspectj-autoproxy/>

    <!-- 配置c3p0 数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--Mapper-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定mapper接口的位置-->
        <property name="basePackage" value="com.yjxxt.ssm.mapper"/>
    </bean>
    <!-- 设置事物增强 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <!-- aop 切面配置 -->
    <aop:config>
        <aop:pointcut id="servicePointcut"
                      expression="execution(* com.yjxxt.ssm.service..*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/>
    </aop:config>
    <!-- 配置 sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis.xml"/>
        <property name="mapperLocations" value="classpath:mappers/*.xml"/>
    </bean>
    <!-- 配置扫描器 -->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 扫描com.yjxxt.ssm.dao这个包以及它的子包下的所有映射接口类 -->
        <property name="basePackage" value="com.yjxxt.ssm.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

spring-servlet.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="com.yjxxt.ssm.controller" />

    <!-- mvc 注解驱动 并添加json 支持 -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <!-- 返回信息为字符串时 处理 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <!-- 将对象转换为json 对象 -->
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>


    <!-- 使用默认的 Servlet 来响应静态文件 -->
    <mvc:default-servlet-handler/>


    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀:在WEB-INF目录下的jsp目录下 -->
        <property name="prefix" value="/"/>
        <!-- 后缀:以.jsp结尾的资源 -->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 文件上传 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 允许文件上传的最大尺寸 -->
        <property name="maxUploadSize">
            <value>104857600</value>
        </property>
        <!--
          设置文件放入临时文件夹的最大大小限制。
          此值是阈值,低于此值,则保存在内存中,如高于此值,则生成硬盘上的临时文件。
        -->
        <property name="maxInMemorySize">
            <value>4096</value>
        </property>
    </bean>
</beans>


mybatis.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.yjxxt.ssm.bean"/>
    </typeAliases>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>
</configuration>

jdbc.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/user_msg?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
jdbc.username=root
jdbc.password=java51

log4j.properties

log4j.rootLogger=DEBUG, Console
# Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStat

4、三层结构内容?
  • Mapper(dao)层

UserMapper.java接口

public interface UserMapper {
    //查询一个
    public User selectOne(Integer useId);
    //插入
    int insert(User user);
    //修改
    int updata(User user);
    //删除
    int delete(Integer userId);
}


  • Service层

UserService.java接口:

public interface UserService {
    //查询
    User selectOne(Integer userId);
    //插入
    int insert(User user);
    //修改
    int updata(User user);

    //删除
    int delete(int userId);
}


UserServiceImp.java

@Service
public class UserServiceImpl implements  UserService{

    @Autowired
    private UserMapper userMapper;

    @Override
    public User selectOne(Integer userId){
       return userMapper.selectOne(userId);
    }

    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }

    @Override
    public int updata(User user) {
        return userMapper.updata(user);
    }

    @Override
    public int delete(int userId) {
        return userMapper.delete(userId);
    }
}


  • controller层
    UserController.java:
@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("select")
    @ResponseBody
    public User select(Integer userId){
       return userService.selectOne(userId);
    }

    @RequestMapping("insert")
    @ResponseBody
    public int insert(User user){
        return userService.insert(user);
    }

    @RequestMapping("updata")
    @ResponseBody
    public String updata(User user){
        int num=userService.updata(user);
        if(num>0){
            return "updata is true";
        }
            return "updata is false";
    }

//    删除
    @RequestMapping("delete")
    @ResponseBody
    public String delete(User user) {
        int num = userService.updata(user);
        if (num > 0) {
            return "delete is true";
        }
        return "delete is false";
    }
}

  • Bean层

User.java:

public class User {
    private Integer userId;
    private String userName;

    public User() {
    }

    public User(Integer userId, String userName) {
        this.userId = userId;
        this.userName = userName;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}

  • mappers映射文件(resource/mappers)

UserMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yjxxt.ssm.mapper.UserMapper">
<!--    插入-->
    <insert id="insert">
        insert into user values (#{userId},#{userName})
    </insert>
<!--    修改-->
    <update id="updata">
        update user set userName=#{userName} where userId=#{userId}
    </update>
<!--    删除-->
    <delete id="delete">
        delete from user where userId=#{userId}
    </delete>
    <!--查询-->
    <select id="selectOne" resultType="com.yjxxt.ssm.bean.User">
        select *   from user  where userId = #{userId}
    </select>
</mapper>

启动tomcat测试结果:
查询:

在这里插入图片描述

插入:
在这里插入图片描述

修改

在这里插入图片描述
删除

在这里插入图片描述


四、RestFul URL

概念
????Restful 风格的 API 是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
在Restful 风格中,用户请求的 url 使用同一个 url,用请求方式:get,post,delete,put…等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口。


在 Restful 风格中,现有规定如下:

  • GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。
  • POST(CREATE):在服务器端新建一个资源,调用 insert 操作。
  • PUT(UPDATE):在服务器端更新资源,调用 update 操作。
  • PATCH(UPDATE):在服务器端更新资源(客户端提供改变的属性)。(目前jdk7 未实现,tomcat7 不支持)。
  • DELETE(DELETE):从服务器端删除资源,调用 delete 语句。

在原有SSM基础上添加:Controller层/RestUserController.java

public class RestUserController {
    @Autowired
    private UserService userService;

    @GetMapping("ones/{userId}")
    //user-->json
    public User select(@PathVariable Integer userId){
        User user= userService.selectOne(userId);
        return user;
    }

    @PostMapping("insert/{user}")
    public int insert(User user){
        int num=userService.insert(user);
        return num;
    }
}

此处使用了Postman软件————》方便查询
在这里插入图片描述


五、全局异常统一处理

?????概念:SpringMVC 对于异常处理这块提供了支持,通过 SpringMVC 提供的全局异常处理机制,能够将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。


?全局异常实现方式 Spring MVC 处理异常有 3 种方式:

  1. 使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolver
  2. 实现 Spring 的异常处理接口 HandlerExceptionResolver 自定义自己的异常处理器
  3. 使用 @ExceptionHandler 注解实现异常处理

1、简单异常处理器SimpleMappingExceptionResolver
  • 在上面代码的原基础上增加配置
    spring-servilet.xml:
 <!--全局异常处理方案一-->
     <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!--默认错误页面-->
        <property name="defaultErrorView" value="error"></property>
        <!--异常属性对象-->
        <property name="exceptionAttribute" value="ex"></property>
    </bean>

创建错误响应页面:error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  ${ex}--->异常处理......
</body>
</html>

修改UserController.java

    @RequestMapping("select")
    @ResponseBody
    public User select(Integer userId){
        userId=userId/0;//让其报异常
       return userService.selectOne(userId);
    }

在这里插入图片描述


2、自定义异常
  • 增加包exceptions/ParamException.java
public class ParamException extends RuntimeException {

    private String msg;
    private int code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public ParamException() {
        super("参数异常");
    }
    public ParamException(String msg){
        super("参数异常");
        this.msg=msg;
    }
    public ParamException(int code){
        super("参数异常");
        this.code=code;
    }
    public ParamException(String msg,int code){
        super("参数异常");
        this.code=code;
        this.msg=msg;
    }

}


修改controller/UserController.java

  @RequestMapping("select")
    @ResponseBody
    public User select(Integer userId){
       if(userId == 0){
          throw  new ParamException("参数异常");
       }
       return userService.selectOne(userId);
    }

结果:

在这里插入图片描述

自定义映射可以映射专门的处理页面

<!--    自定义    异常的映射-->
        <property name="exceptionMappings">
            <props>
                <prop >
              key="com.yjxxt.ssm.exceptions.ParamException">param_error</prop>
            </props>
        </property>

3、实现HandlerExceptionResolver接口?
  • 直接编写一个实现类GlobleException,省去了在spring-servlet.xml文件种配置
@Component
public class GlobleException implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object handler, Exception ex) {
        //实例化对象
        //默认的错误页面
        ModelAndView mav=new ModelAndView("error");
        mav.addObject("ex",ex);
        //判断
        if(ex instanceof ParamException){
            ParamException e=(ParamException) ex;
            mav.addObject("code",e.getCode());
            mav.addObject("msg",e.getMsg());
            //指定试图名称
            mav.setViewName("param_error");
        }
        return mav;
    }
}


创建异常接受页面param_error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}---->erro异常

</body>
</html>

使用实现 HandlerExceptionResolver 接口的异常处理器进行异常处理,具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提供更详细的异常处理信息。


第三种方法略,平时推荐使用第二种方法~~~完!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:30:54  更:2021-10-16 19:31:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:36:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码