拦截器、异常处理器、springjdbc

SpringMVC(三、JDBCTemplate和拦截器) Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作。 Spring MVC 的拦截器(interceptor)类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方 法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。 ......... 阅读详情

什么是拦截器

DispatcherServlet收到请求之后,如果有拦截器,则先执行拦截器的方法,再执行处理器(Controller)的方法
过滤器属于Servlet规范,拦截的是Servlet容器调用过程
而拦截器属于Spring框架,拦截的是DispatcherServlet的调用过程
在这里插入图片描述

如何写拦截器

  1. 写一个java类,实现HandlerInterceptor接口
  2. 在接口方法当中,实现拦截处理逻辑
  3. 配置拦截器

添加jar包依赖

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cn.company</groupId>
	<artifactId>TestDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.5.RELEASE</version>
		</dependency>
		<!-- servlet的jar包依赖, <scope>provided</scope> 表示编译时有效,不会打包发布到Tomcat中 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.1</version>
			<scope>provided</scope>
		</dependency>
		<!-- jsp的jar包依赖 -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.3</version>
			<scope>provided</scope>
		</dependency>
		<!-- jstl表达式 -->
		<!-- https://mvnrepository.com/artifact/jstl/jstl -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	</dependencies>
	<!-- 添加tomcat插件 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<port>8080</port>
					<hostName>localhost</hostName>
					<uriEncoding>UTF-8</uriEncoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

配置前端控制器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>TestDemo</display-name>
  <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-mvc.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

Controller的编写

package controller;

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

@Controller
public class HelloController {
	@RequestMapping("/hello")
	public String hello() {
		System.out.println("hello()");
		return "hello";
	}
	@RequestMapping("/demo/hello2")
	public String hello2() {
		System.out.println("hello2()");
		return "hello";
	}
}

hello.jsp

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body style="font-size:30px;">
	Hello Kitty
</body>
</html>

编写拦截器

  • 1、先调用preHandle,返回true继续向后执行,返回false中断请求
  • 2、调用Controller(处理器)返回ModelAndView给前端控制器之前调用postHandle
  • 3、请求处理完毕,最后调用afterCompletion
package inceptor;

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

public class SomeInceptor implements HandlerInterceptor {
	/*
	 * DispatcherServlet在收到请求之后,
	 * 会先调用 拦截器的preHandle方法。
	 *  如果该方法的返回值是true,是继续向后执行;
	 * 如果该方法的返回值是false,
	 * 则中断请求,返回结果。
	 *  handler:处理器方法对象
	 */
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("preHandle()");
		return true;
	}
	/*
	 * 处理器(Controller)的方法执行完毕,正准备将
	 * 处理结果(ModelAndView)返回给DispatcherServlet
	 * 之前,执行postHandle方法。
	 * 注:
	 * 	可以在该方法里面,修改处理结果(ModelAndView)。
	 */
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("postHandle()");
	}
	/*
	 *整个请求处理完毕,最后执行的方法。
	 *ex:处理器方法所抛出的异常
	 */
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("afterCompletion()");
	}
}

配置拦截器

在springmvc的配置文件中配置拦截器

<?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:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">

<!-- 配置组件扫描 -->
	<context:component-scan base-package="controller" />
	<!-- 配置MVC注解扫描  --> 
	<mvc:annotation-driven />
	<!-- 配置视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/" />
		<property name="suffix" value=".jsp" />
	</bean>
	<!--静态资源的加载  -->
	<mvc:resources location="/" mapping="/**" />
	<!-- 配置springmvc的拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**"/>
			<bean class="inceptor.SomeInceptor"/>
		</mvc:interceptor>
	</mvc:interceptors>
</beans>

页面访问

在这里插入图片描述
控制台输出
在这里插入图片描述

拦截器的优先级

依据配置的先后顺序执行。

SpringMVC中的异常处理

可以将异常抛给Spring框架,由Spring框架来处理异常

配置简单异常处理器

在springmvc的配置文件中添加配置如下

<!-- 配置简单异常处理器 -->
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<!--java.lang.NumberFormatException:异常类型, erro1:视图页面 -->
				<prop key="java.lang.NumberFormatException">erro1</prop>
			</props>
		</property>
	</bean>

添加异常处理页面:jsp页面

<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body style="font-size:30px;">
			请输入正确的数字
</body>
</html>

3、控制器的编写

package controller;

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

@Controller
public class HelloController {
	@RequestMapping("/hello")
	public String hello() {
		System.out.println("hello()");
		Integer.parseInt("123a");
		return "hello";
	}
}

4、页面访问
http://localhost:8080/TestDemo/hello
在这里插入图片描述

@ExceptionHandler注解

  1. 在处理器类里面增加一个异常处理方法,该方法前面需要添加@ExceptionHandler
  2. Spring框架捕获到异常之后,会调用异常处理方法
  3. 在异常处理方法里面,编写异常处理逻辑
  4. 添加异常处理页面

增加一个异常处理方法

package controller;

import javax.servlet.http.HttpServletRequest;

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

@Controller
public class HelloController {
	@RequestMapping("/hello")
	public String hello() {
		System.out.println("hello()");
		Integer.parseInt("123a");
		return "hello";
	}
	@RequestMapping("/hello2")
	public String hello2() {
		System.out.println("hello2()");
		"1234".charAt(8);
		return "hello";
	}
	/*
	 * e:处理器方法所抛出的异常
	 */
	@ExceptionHandler
	public String handleEx(Exception e,HttpServletRequest request) {
		System.out.println("handleEx()");
		if(e instanceof NumberFormatException) {
			request.setAttribute("msg","请输入合法的数字");
			return "error3";
		}
		if(e instanceof StringIndexOutOfBoundsException) {
			request.setAttribute("msg","下标越界啦");
			return "error3";
		}
		//其他异常
		return "error";
	}
}

添加异常处理页面

error.jsp

<%@page pageEncoding="utf-8" 
contentType="text/html; charset=utf-8" %>
<html>
	<head></head>
	<body style="font-size:30px;">
		系统繁忙,稍后重试
	</body>
</html>

error3.jsp

<%@page pageEncoding="utf-8" 
contentType="text/html; charset=utf-8" %>
<html>
	<head></head>
	<body style="font-size:30px;">
		${msg}
	</body>
</html>

页面访问
在这里插入图片描述
在这里插入图片描述

配有拦截器的调用过程

在这里插入图片描述

SpringJdbc

什么是SpringJdbc

Spring框架对jdbc的封装。
注:比起直接使用jdbc,使用SpringJdbc代码更简洁,质量更高。
比如,不用考虑获取连接与关闭连接等操作。

如何使用

1、导包

spring-webmvc,spring-jdbc,mysql,dbcp,junit

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.5.RELEASE</version>
		</dependency>
		<!--springjdbc的jar包依赖 -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.2.5.RELEASE</version>
		</dependency>
		<!--mysql -->
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.19</version>
		</dependency>
		<!--数据库连接池,dbcp  -->
		<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<!--junit:单元测试  -->
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

2、添加Spring配置文件

配置JdbcTemplate

<?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:jdbc="http://www.springframework.org/schema/jdbc"  
	xmlns:jee="http://www.springframework.org/schema/jee" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
		
		
	<!-- 配置数据库连接池 -->	
	<util:properties location="classpath:db.properties" id="db"/>
	<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="#{db['jdbc.driver']}"/>
		<property name="url" value="#{db['jdbc.url']}"/>
		<property name="username" value="#{db['jdbc.username']}"/>
		<property name="password" value="#{db['jdbc.password']}"/>
	</bean>
	<!-- 配置组件扫描 -->
	<context:component-scan base-package="dao"/>
	<!-- 配置JdbcTemplate -->
	<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jt">
		<property name="dataSource" ref="ds"/>
	</bean>
</beans>

3、添加entity和dao(持久层)

package entity;

public class Employee {
	private int id;
	private String ename;
	private double salary;
	private int age;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String toString() {
		return "Employee [id=" + id + ", ename=" + ename + ", salary=" + salary + ", age=" + age + "]";
	}
}

调用JdbcTemplate提供的方法来访问数据库,通常将JdbcTemplate注入到DAO

package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import entity.Employee;

@Repository("employeeDAO")
public class EmployeeDAO {
	@Autowired
	@Qualifier("jt")
	JdbcTemplate jt;
	/*
	 *新增数据
	 */
	public void save(Employee e){
		String sql="insert into t_emp values(null,?,?,?)";
		//数组元素应该与?一一对应
		Object[]args= {
			e.getEname(),e.getSalary(),e.getAge()	
		};
		jt.update(sql,args);
	}
	/*
	 *查询所有数据
	 */
	public List<Employee>findAll(){
		String sql="select * from t_emp";
		List<Employee>employees=jt.query(sql, new EmpRowMapper());
		return employees;
	}
	/*
	 *根据id查询
	 */
	public Employee findById(int id) {
		String sql="select * from t_emp where id=?";
		Object[]args= {id};
		Employee e=null;
		try {
			e=jt.queryForObject(sql, args, new EmpRowMapper());
		}catch(EmptyResultDataAccessException e1) {
			/*
			 * 找不到对应的记录,queryForObject方法。
			 * 会抛出EmptyResultDataAccessException
			 */
			return null;
		}
		
		return e;
	}
	/*
	 *更新数据
	 */
	public void update(Employee e) {
		String sql="update t_emp set ename=?,salary=?,age=? where id=?";
		Object[]args= {
			e.getEname(),e.getSalary(),e.getAge(),e.getId()	
		};
		jt.update(sql, args);
	}
	/*
	 *根据id删除数据
	 */
	public void delete(int id) {
		String sql="delete from t_emp where id=?";
		Object[]args= {id};
		jt.update(sql, args);
	}
	/**
	 * 负责高速JdbcTemplate如何将记录转换成一个对象,
	 * rowNum:正在被处理的记录的下标
	 */
	class EmpRowMapper implements RowMapper<Employee>{

		public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
			Employee e=new Employee();
			e.setId(rs.getInt("id"));
			e.setEname(rs.getString("ename"));
			e.setSalary(rs.getDouble("salary"));
			e.setAge(rs.getInt("age"));
			return e;
		}
		
	}
}


测试程序

package test;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import dao.EmployeeDAO;
import entity.Employee;

public class TestCase {
	EmployeeDAO dao;
	//junit在执行测试方法前,会先执行@Before修饰的方法
	@Before
	public void before() {
		String config = "spring-jdbc.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(config);
		dao = ac.getBean("employeeDAO", EmployeeDAO.class);
	}

	@Test
	public void save() {
		Employee e = new Employee();
		e.setEname("小月");
		e.setSalary(20000);
		e.setAge(22);
		dao.save(e);
	}

	@Test
	public void findAll() {
		List<Employee> employees = dao.findAll();
		for (Employee employee : employees) {
			System.out.println(employee);
		}
	}
	@Test
	public void findById() {
		Employee e=dao.findById(3);
		System.out.println(e);
	}
	@Test
	public void update() {
		Employee e=dao.findById(3);
		e.setAge(e.getAge()+10);
		e.setSalary(e.getSalary()*2);
		dao.update(e);
	}
	@Test
	public void delete() {
		dao.delete(3);
	}
}

Spring3+Dwr+JdbcTemplate(拦截器方式实现防止重复提交) 1.针对SpringMVC注解的配置,可起到入门的作用 2.Spring+JdbcTemplate事物管理 3.Spring+Hibernate事物管理 4.Spring实现DWR注解方式的应用配置 5.Spring配置拦截器 6.Spring通过拦截器实现防止重复提交实例 对学习,会起到非常好的效果 立即下载

相关推荐

Spring JDBC实现代码

Spring2.5+MySQL实现的JDBC操作(包括编程式事务的代码),如果有看不懂的地方可以去本人的博客:http://blog.youkuaiyun.com/Acceptedxukai,里面有具体讲解。

编写过滤器jar包并植入到项目中

编写过滤器jar包并植入到项目中。至于为什么不使用aop,拦截器二使用过滤器,是因为在java中,如果3者同事存在,最先执行的是过滤器。

liyayou的博客 782

JdbcTemplate教程

JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。 除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

七、SpringMVC拦截器

文章目录SpringMVC拦截器拦截器(interceptor)的作用拦截器和过滤器区别拦截器是快速入门拦截器方法说明知识要点 SpringMVC拦截器 拦截器(interceptor)的作用 Spring MVC 的 拦截器 类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体

多思考🤔~ 508

JdbcTemplate通用泛型Dao实现

NULL 博文链接:https://425826501.iteye.com/blog/2184599

jdbcTemplate使用方法实例解析

主要介绍了jdbcTemplate使用方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用AOP做JdbcTemplate 执行 SQL 的统一拦截器

我们都知道http有拦截器,不同的 Web 框架(如 Spring Boot、Servlet 等)都有各自的拦截器实现方式,可以帮我们做一些鉴权之类的操作,那么使用JdbcTemplate执行sql时能不能也做一个拦截器,统一修改执行的sql。这个想法起源于项目迁移时,数据库的用户名在两套环境不一致,导致一些带数据库名的sql执行失败,逐个修改太费事,干脆用拦截器把数据库名去掉,于是便想到了AOP。

qq_41659396的博客 1041

Transformer凭什么取代RNN?深入拆解自注意力机制与梯度消失问题的终极对决

本文深入探讨了Transformer如何通过自注意力机制解决RNN的梯度消失问题,成为自然语言处理领域的新标准。通过对比RNN和Transformer的架构差异,揭示了自注意力机制在并行计算、长期依赖处理等方面的技术优势,并提供了实际任务中的性能对比数据。

f6g7h8i9j的博客 190

Spring系列第50篇:spring事务拦截器顺序如何控制?

1、前言咱们知道 Spring 事务是通过aop的方式添加了一个事务拦截器,事务拦截器会拦截目标方法的执行,在方法执行前后添加了事务控制。那么spring事务拦截器的顺序如何控制呢,若我...

路人甲Java 3441

ICT模拟零件测试方法--电容测试

通常,小到 100 pF 的电容需要补偿,因为夹具和系统的电容(20 到 50 pF)相对于被测设备的值是显著的。软件在需要补偿的电容测试中加入 comp 选项,而在不需要补偿的电容测试中加入 nocomp 选项。在调试期间,通过向电容语句添加 pc 选项验证您的电容测试。在测试单独的电容时,从测量结果中减去学到的值,然后与测试限制进行比较以决定通过或失败。请注意,如果用于需要补偿的电容测试上的感应总线使用了单独的探针,测量将无效。在测试电容时,应注意两个方面:电容的电阻元件,以及夹具和系统本身的电容。

可可南木的博客 1218

Cocos Creator 2.4 APK逆向实战:如何完整提取游戏资源并还原工程(附工具包)

本文详细介绍了针对Cocos Creator 2.4打包的APK进行逆向工程的完整流程,包括环境搭建、资源索引解析、打包文件提取、图集拆分以及工程结构还原。重点讲解了如何利用config.json和.jsb文件完整提取游戏资源,并生成可被Cocos Creator识别的工程目录与.meta文件,最终实现工程还原的目标。

h3i4j的博客 1494

SpringMVC整合JDBD

(1). 编码问题(过滤器) 为什么会乱码 表单提交时,浏览器会对中文进行编码(会使用打开表单的页面时的字符集来编码,比如使用UTF-8来编码),而服务器默认使用ISO-8859-1来解码,所以会产生乱码 如何解决? springmvc提供了一个过滤器(CharacterEncodingFilter),只需要配置改过滤网器即可,如下 <!-- 配置字节码过滤器 --> <ser...

qq_43050077的博客 318

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1004

Spring:下

系统分层MVC是一种表示层架构思想。 - 如何分层? 表示层(UI):数据展现/操作界面,请求分发。 业务层(服务层):封装业务逻辑处理。 持久层(数据访问层):封装数据访问逻辑。 - 各层之间的关系 表示层通过接口调用业务层,业务层通过接口调用持久层。 这样,当下一层的实现发生改变,不影响上一层。处理表单中文参数值乱码问题 乱码问题产生的原因 表单提交时,浏览器会对表单中文参数值进

Myzoneliver的博客 248

用AI生成React/Vue页面?实测Locofy等5款工具,教你选最适合的

本文深度评测了2024年五大AI生成前端页面工具,包括Locofy、Builder.io等,从代码质量、可视化编辑器成本到企业级落地方案进行全面分析。通过实测数据和实战案例,揭示如何利用AI生成技术高效创建React/Vue页面,提升开发效率并优化性能。

m5n6o7的博客 606

FPGA图像处理入门 ZYNQ7020 图像中值膨胀腐蚀滤波

图像处理的三种滤波 中值滤波应用较为广泛 综合膨胀和腐蚀可以实现边缘检测。

Coast_的博客 715

Spring MVC 和Spring JDBC

简单了解SpringMVC和SpringJDBC

Elaine2391的博客 713

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为了防止作弊或出于安全考虑,会检测是否运行在模拟器环境中。本文将详细介绍各大主流模拟器的检测绕过方法,帮助用户在电脑上流畅体验各类安卓应用。1. 获取模拟器系统镜像2. 使用ROM厨房工具修改系统文件3. 替换模拟器的系统镜像雷电模拟器:适合游戏,推荐使用MAGISK + EdXposed方案MuMu模拟器:适合中度游戏,推荐太极框架蓝叠模拟器:适合国际应用,推荐MAGISK方案逍遥模拟器。

专注技术分享 3万+

Java基础面试题

1、Listener (监听器)2、Fliter (过滤器)3、servlet (控制器)

x737510的博客 1145

PD详解—第一章—Type-C连接

Type-C连接 今天大师匈下班比较早,再给大家侃一侃PD,希望大家支持。 PD和Type-c的关系 首先讲一下PD快充的实现步骤,本文主要是Source端(电源),Sink端的差不多也一样,只是策略不同而已。 TypeC连接-->广播电源能力Source capbility(数据交互)->打电压电流->等待其他指令。 所以typec连接是第一步,很多人会从字面意思理解typec连接,这不就是把线给插上去就好了吗? 不知道有没有优秀的同学想到正确答案; 正确答案:typec连接的本质是为

大师匈的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

freemarker的测试结果框架_总结下Java高级框架前半部分:

SpringMVC:1.springMvc是spring组织出品的一个表现层框架, 和struts2属于同类型的框架.2. springMvc作用:a. 接收请求和从请求中接收参数 b. 将处理好的数据返回给页面, 并在页面展示3.springMvc三大组件: 处理器映射器, 处理器适配器, 视图解析器。 springMVC中需要我们写的有哪些: 处理器也就是我们写的controller, 视...

weixin_39649965的博客 181

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring JDBC及事务处理

Spring JDBC和事务 一、Spring 家族 Spring Framework Spring Boot Spring Cloud Spring Data Spring Security Spring Session Spring Batch , 二、Spring JdbcTemplete 源码 常规实现(CRUD) 大数据 图片处理 大文本处理 LobHandler LobCreator 实现原理(手写JdbcTemplate) 依赖 Java代码实现 查询

baidu_38900596的博客 131

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java面试八股之Spring框架的核心模块

随着Spring生态的发展,还有其他相关的模块和项目(如Spring Data、Spring Security等),虽然不属于严格意义上的核心模块,但也是Spring体系中不可或缺的部分,为特定领域的功能提供了强大支持。Spring-webmvc(Spring MVC):实现了模型-视图-控制器(MVC)设计模式,为构建Web应用程序提供了全面的解决方案,包括处理器映射、视图解析、数据绑定、异常处理等。spring-boot:Spring Boot框架的主模块,提供了框架的核心功能和支持其他模块的基础。

u012151345的博客 605

SpringBoot(四)——SpringBoot 异常处理、配置拦截器、自定义banner、三种跨域处理、AOP 的应用、文件上传、整合 Web 基础组件、整合 JdbcTemplate和多数据源

SpringBoot(四)——SpringBoot 异常处理、配置拦截器、自定义banner、三种跨域处理、AOP 的应用、文件上传、整合 Web 基础组件、整合 JdbcTemplate和多数据源

qq_41824825的博客 804

java拦截jdbc执行sql

Java 可以通过实现 JDBC 的拦截机制来拦截 JDBC 的 SQL 执行。这可以通过创建自定义的 JDBC 驱动来实现,该驱动将作为代理驱动存在,并在真正执行 SQL 命令之前拦截执行。 具体来说,可以通过实现 java.sql.Connection、java.sql.Statement 和 java.sql.PreparedStatement 接口来实现自定义 JDBC 驱动。在创建这些对...

weixin_42581846的博客 1150

java实现mysql拦截_JDBC - 使用 mysql-connector-java-5.1.13.jar 中的拦截器

// 加载MySql的驱动类try {Class.forName("com.mysql.jdbc.Driver"); // 注册驱动到DriverManager} catch (ClassNotFoundException e) {System.out.println("找不到驱动程序类 ,加载驱动失败!");e.printStackTrace();}// 连接MySql数据库String url...

weixin_33665771的博客 1516
上一篇: springmvc分层设计
下一篇: MyBatis的入门
迷失的小鹿
博客等级 码龄8年 1万+粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值