SpringMVCSimpleMappingExceptionResolver在 Spring 的配置文件 applicationContext.xml 中增加以下内容: 123456789101112131415<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --> <property name="defaultErrorView" value="error"></property> <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为 exception --> <property name="exceptionAttribute" value="ex"></property> ...
框架模式和设计模式的区别有很多程序员往往把框架模式和设计模式混淆,认为 MVC 是一种设计模式。实际上它们完全是不同的概念。框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块; 代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示; 设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。框架模式有哪些?MVC、MTV、MVP、CBD、ORM 等等;框架有哪些?C++ 语言的 QT、 ...
SSH 整合时实现了简单的登录功能,这次实现简单的注册功能.需要改动的地方下面会提到,没有提到的地方就不改动 要求1.登录 register.jsp 页面,填入必要信息,点击注册;2.如果成功,跳转到 success.jsp,并显示出所有的用户信息;3.如果注册失败,则跳转到 error.jsp 页面4.实现分页功能,实现删除功能 实现1.新建 t_user 表 12345678910111213141516171819202122232425262728293031323334353637-- ------------------------------ Table structure for t_user-- ----------------------------DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `f_name` varchar(255) DEFAULT NULL, `f_password` varchar( ...
1.mapper.xml 配置 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191<?xml versio ...
新时代码农
未读正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空。 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。 对于缓存数据更新机制,当某一个作用域 (一级缓存 Session/二级缓存 Namespaces) 的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。 一级缓存测试1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556import me.gacl.domain.User; ...
一对一关联1.要求假设一间房子只有一把锁,要求通过锁找到房子2.创建表和数据 12345678910111213141516171819202122232425262728293031323334353637SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for t_lock-- ----------------------------DROP TABLE IF EXISTS `t_lock`;CREATE TABLE `t_lock` ( `lock_id` int(11) NOT NULL AUTO_INCREMENT, `f_type` varchar(255) DEFAULT NULL, `fk_home_id` int(11) DEFAULT NULL, PRIMARY KEY (`lock_id`), KEY `fk_home_id` (`fk_home_id`), CONSTRAINT `t_lock_ibfk_1` FOREIGN KEY (`fk_ ...
新时代码农
未读上一节中对 Mybatis 的基本操作有了初步的了解,这一节中将使用 Mybatis 对数据表进行简单的 CRUD 操作.使用的测试环境和上一篇博客一样. 使用 Mybatis 对表执行 CRUD 操作 – 基于 XML 实现1.定义 UserMapper.java 12345678910111213141516171819package com.code.mapper;import com.code.bean.UserBean;import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper { //根据ID查找用户 UserBean getUserById(@Param("userID")int userID); //添加用户 int addUser(@Param("userBean")UserBean userBean); //删除用户 int deleteUser(@ ...
MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。2013 年 11 月迁移到 Github。 iBATIS 一词来源于“internet”和“abatis”的组合,是一个基于 Java 的持久层框架。iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO) MyBatis 是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 Mybatis 快速入门准备开发环境 创建测试项目,普通的 Java 项目或者 JavaWeb 项目均可 添加相应的 jar 包 Mybatis 核心包 ...
Hibernate 框架主要是实现数据库与实体类间的映射,使的操作实体类相当与操作 hibernate 框架。 只要实体类写好配置文件配好,就能实现和数据库的映射,其中实体类对应表,类的属性对应数据库的表字段。 这样就不用管数据库的相关操作了。 什么是 Hibernate如今,大多数是关系型数据库,而 Java 是面向对象的编程语言,使用面向对象的语言结合关系型数据库相当麻烦,所以有了 HibernateHibernate 将对象模型和基于 sql 的关系模型映射起来,使得开发者可以采用面向对象的方式开发程序.Hibernate 是关系型数据库和面向对象的程序设计语言之间的桥梁,它允许开发者使用面向对象的语言操作关系型数据库以前是应用程序直接访问底层数据库,而采用 ORM 框架之后,应用程序以面向对象的方式操作持久化对象,而 ORM 框架则将这些面向对象的操作转换为底层的 SQL 操作. Hibernate 和 JDBC jdbc 的优点和缺点 缺点 查询代码特别繁琐 重复性代码特别多,频繁的 try,catch 数据的缓存 sql 的移植性不好 优点 速度比较快 把控性 ...
ver) 多个 Spring 配置文件处理 采用逗号将多个配置文件分开 使用通配符 开启注解:<mvc:annotation-driven>开启自动扫描<context:component-scan base-package="包" 使用 Annotation 不用使用继承父类或者实现接口 RequestMapping value params –>对请求参数进行过滤 method –>代表请求方式 通过提交方式进行过滤请求 请求处理方法可以接受参数HttpServletRequestHttpServletResponesHttpServletSession @RequsetParam 注解 restfulrepresentational state transfer表现层状态转移 请求处理方法可以返回的值 数据绑定 基本数据类型,String String[]绑定 只需要让 jsp 中的 name 值和 controller 中的属性名相同即可 绑定到一个 Bean 当中去 只要保证 Bean 中属性的名字和表单数据 ...
EJB 缺点EJB 糟糕的代码和代码框架分布式模型滥用单元测试难以实现不要的复杂度导致性能降低容器的可移植性 重量级容器缺点带有侵入性的 API(代码依赖于 EJB)对容器的依赖 (代码不能再 EJB 容器之外工作)提供固定的一组机能,不具备配置能力不同的产品,部署过程不同,不易通用启动时间长 轻量级容器:3. Spring 容器负责 POJO 的生成和绑定关系 IoC 和 AOP容器的功效由 IoC 完成根据 Web 应用,小应用,桌面程序的不同,对容器的依赖程度不同Spring 将管理的 Bean 作为 POJO 进行控制,通过 AOP Interceptor 能够增强其他功能 Spring 框架图 Spring AOP Spring ORM Spring DAO Spring Web Spring Context Spring Web MVC Spring Core IoC<–>DI 控制反转<–>依赖注入整个应用程序的表现结果是由外部容器的 配置 来控制整个应用程序的运行效果在系统运行时,由容器 (操作系统) 将依赖关系 (USB 外 ...
使用场景:发布、订阅模式,发送端发送广播消息,多个接收端接收。 前面我们实现了工作队列,并且我们的工作队列中的一个任务只会发给一个工作者,除非某个工作者未完成任务意外被杀死,会转发给另外的工作者。这篇博客中,我们会做一些改变,就是把一个消息发给多个消费者,这种模式称之为发布/订阅(类似观察者模式)。 为了验证这种模式,我们准备构建一个简单的日志系统。这个系统包含两类程序,一类程序发动日志,另一类程序接收和处理日志。 在我们的日志系统中,每一个运行的接收者程序都会收到日志。然后我们实现,一个接收者将接收到的数据写到硬盘上,与此同时,另一个接收者把接收到的消息展现在屏幕上。 本质上来说,就是发布的日志消息会转发给所有的接收者。 转发器(Exchanges)前面的博客中我们主要的介绍都是发送者发送消息给队列,接收者从队列接收消息。下面我们会引入Exchanges,展示 RabbitMQ 的完整的消息模型。RabbitMQ 消息模型的核心理念是生产者永远不会直接发送任何消息给队列,一般的情况生产者甚至不知道消息应该发送到哪些队列。相反的,生产者 ...
工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成。相反地,我们进行任务调度:我们把任务封装为消息发送给队列。工作进行在后台运行并不断的从队列中取出任务然后执行。当你运行了多个工作进程时,任务队列中的任务将会被工作进程共享执行。这样的概念在 web 应用中极其有用,当在很短的 HTTP 请求间需要执行复杂的任务 生产者: 1234567891011121314151617181920212223242526272829public class NewTask { //队列名称 private final static String QUEUE_NAME = "workqueue"; public static void main(String[] args) throws IOException { //创建连接和频道 ConnectionFactory factory = new ConnectionFactory(); factory.setHos ...
RabbitMQ 是一个由 erlang 开发的 AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR 的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 RabbitMQ 是由 RabbitMQ Technologies Ltd 开发并且提供商业支持的。该公司在 2010 年 4 月被 SpringSource(VMWare 的一个部门)收购。在 2013 年 5 月被并入 Pivotal。其实 VMWare,Pivotal 和 EMC 本质上是一家的。不同的是 VMWare 是独立上市子公司,而 Pivotal 是整合了 EMC 的某些资源,现在并没有上市。 RabbitMQ 的官网是http://www.rabbitmq.com ...