SSM_CRUD 搭建架构
基本流程
实现目标一个基于 SSM 整合的 CRUD,并使用 Mybatis-Generator 自动生成数据库代码。bootstrap 和 jQuery 作为前端框架。
导入包
三大框架的核心包 Spring-Core Spring-WebMVC Mybatis
用于自动分页的 Pagehelper ,生成代码的 Mybatis-Generator-Core
数据库原生的 Mysql-Connector-Java 数据库连接池 c3p0
实现 jsp 中 JSTL 标签语言的 JSTL 库
Spring 和 SpringMVC 配置Spring在 Web.xml 中配置一启动服务器就创建 Spring 容器的 Listener 和指定 Spring 配置文件位置的 context-param 。
1234567 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationConte ...
SpringMVC-07-拦截器/异常处理
拦截器基础使用加强版本的 Filter,MVC 中的接口为 HandlerInterceptor 处理拦截器,一共有三个方法:
123public boolean preHandle(); //执行请求处理方法之前执行public void postHandle(); //执行请求处理方法之后执行public void afterCompletion(); //视图渲染完成之后执行
自己实现 HandlerInterceptor 之后,需要在 SpringMVC 中配置拦截器的信息才可以使用:
123456<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/Interceptor"/> <bean class="space.xorex.SpringMVC_01.Interceptor.MyInterceptor"></bean> </mvc:interceptor>< ...
SpringMVC-06-AJAX支持/文件上传
响应 AJAX 的 Json 类型设置响应内容只需要在请求处理方法前面加上 @ResponseBody 表示将方法返回值添加到响应体中。
12345@ResponseBody@RequestMapping("ajax")public String getAjax() { return "<script>alert('AJAX!')</script>";}
然后就会在响应体里面看到一串 JS 代码了。
Json 处理SpringMVC 支持自动将对象转化为 Json 格式的字符串,需要导入三个包:jackson-core,jackson-annotations,jackson-databind。然后对于将自定义对象返回的方法,会自动转化为 Json 字符串:
12345@ResponseBody@RequestMapping("ajax/get")public Collection<Employee> returnAjax() { ...
SpringMVC-05-数据绑定/转化/校验
静动态资源处理管理我们最初在配置 DispatcherServlet 来作为处理方法映射的时候,因为静态资源无法找到对应的处理方法,所以无法访问,针对这个问题,使用 <mvc:default-servlet-handler/> 之后,SpringMVC 将在容器中中定义一个 SimpleUrlhandlerMapping,它的作用就是将请求交给 WEB 应用服务器默认的 Tomcat 处理,这样静态资源的访问就得到了解决。
但是我们标注了 <mvc:default-servlet-handler/> 之后,新加入的 SimpleUrlHandlerMapping 会覆盖我们原本用来处理方法映射的 DefaultAnnotationHandlerMapping。这样处理动态资源访问的映射关系就没有了,因此动态资源无法访问。
解决方法就是:使用 <mvc:annotation-driven/>,添加这个设置之后,就会多出来一个优先级最高的 RequestMappingHandlerMapping,专门处理动态资源访问和处理方法之间的映射关系。只有这个 M ...
SpringMVC-04-视图/视图解析器
视图层forward: 转发和原本的 SpringMVC 一样,写在方法的返回值处,不过不同的是 forward: 不会被拼串,并且是以项目地址为相对路径的。
原:
12345@RequestMapping("/TestRequest/")public ModelAndView test() { ModelAndView requestScope = new ModelAndView("hello"); return requestScope;}
forward:
12345@RequestMapping("/TestRequest/")public ModelAndView test() { ModelAndView requestScope = new ModelAndView("forward:/WEB-INF/pages/hello.jsp"); return requestScope;}
redirect: 重定向使用方法和 fo ...
SpringMVC-03-处理模型数据
数据转发操作 Map 系列参数方法参数加上 Map<String,Object>、Model、ModelMap 三个中的任意一个即可,我们只要将数据保存到这些的参数实例中,Spring 会自动帮我们把数据放到 Request 域中。
关于这三个有什么关系呢:
其实 Spring 传入参数中的是 BindingAwareModelMap 实例,所以才能三个中任意一个作为参数都能实现数据的转发。
@ModelAttribute这里需要重点说一下用来处理隐含数据模型 bindingAwareModelMap 的注解 @ModelAttribute,此注解可被应用在方法或方法参数上。
方法注释当 @ModelAttribute 标注到一个方法上面的时候,就意味着这个方法为数据模型处理方法,这个方法是用来在隐藏数据模型添加一些数据的。所以被这个注解标注的方法会在当前类下面的任意一个请求映射方法被调用之前运行。
@ModelAttribute 标注方法有两种风格:
在第一种写法中,方法通过返回值的方式默认地将添加一个属性;
1234@ModelAttribute("Xo ...
SpringMVC-02-请求数据获取
RESTREST 即表述性状态传递(Representational State Transfer),是一种软件架构风格,指代使用不同的请求方式来表示这次请求需要完成的 CURD 的种类,然后在 URL 中携带被操作对象,
比如:
URL
请求方式
目的
/book/1
get
获取 1 号图书
/book
post
添加图书
/book/1
put
更新图书
/book/1
delete
删除 1 号图书
这里面要说一下 Post 和 Put 的区别,在官方 HTTP 协议中,规定 Put 为 idempotent(幂等) 方法,也就是多次连续请求造成结果应该相同。因此 Put 应该执行更新方法,而 Post 应该执行非幂等(多次执行添加请求会添加多个)的添加方法。
实现 REST因为 HTML 发起请求的方式只有 GET 和 POST,所以为了实现 REST,我们可以曲线救国。在 GET 或者 POST 里面添加请求参数,_method,放入 delete 和 put 作为参数,然后在 web.xml 中配置一个 Srping 的 Filter:Hidd ...
SpringMVC-01-基础请求处理
概述首先拿张图,这里面就是 Spring 可以胜任的功能,其中 Web 模块其实就是我们接下来要学习的 SpringMVC,使用 Spring 来控制 Web 项目里面的 Model View Controller 三层模型。
开始使用首先需要导入 Spring 的核心包,也就是支持 Spring 运作的 Beans Core Context SpEL 和用于测试 Spring 的 Test 包。
而对于 SpringMVC 来说,实现基础的功能只需要导入 Web 和 Servlet 两个包即可。
SpringMVC 的模式和传统的 MVC 有一点点不同,那就是多了一个前端控制器,这个控制器也是 SpringMVC 控制整个 Web MVC 流程的实现基础。而这个前端控制器本身是一个 Servlet,交给 Tomcat 控制。然后 Tomcat 会拦截所有的 Servlet 请求,全都交给前端控制器这个 Servlet,前端控制器则根据 SpringMVC 的框架标准,控制处于 Spring 容器中的各种对象来完成业务的实现。
所以先在 web.xml 中配置 Dispatcher ...
《一课经济学》读书笔记
本书内容由于在一段时间内的生产力综合是不变的,那么对一个群体的经济政策作用代价是所有人承受的,经济政策需要考虑所有的影响者。
换句话说:经济政策既需要考虑短时影响,也需要考虑长远影响,不能只关注任意一方。不仅要想行为的好处,也要想事实行为的代价承担着。
破窗谬论破窗谬论:“打碎窗户虽然损失了钱,但是玻璃工人拿到了这份钱,提供了其他消费,刺激了生产。所以这是有好处的。”
原理:这份钱的消费可以由窗户所有者提供,但社会的所有财产综合损失了一扇窗户,原有的消费不变的情况,总财产损失,反而不利。这是因为忽视了金钱原本持有者的消费能力。
战祸之福战祸之福:“经过战争的国家战后经济会高速发展,因为战后带来了巨大的需要,重建不但贡献了经济,也有后来居上的作用(最新的工厂和大楼),因此也带来了更加先进的社会生产力。”
原理:战争摧毁了很多东西,带来了某方面的巨大需要,这些需要改变了人战后的努力方向,改变了工业结构。这些被需要工业结构拿到了大量的投资,人们因为迫切的生存需要而贡献了大量的生产力,使得造成了某些被迫切需要的产业的高速发展,但焦点被转移的产业生产力是大幅度下降的。总的来说由于战争破坏,社会的 ...
计组-IO系统
IO 基本概念I/O 即输入/输出,通常指数据在存储器(内部和外部)或其他周边设备之间的输入和输出,输入是系统接收的信号或数据,输出则是从其发送的信号或数据。
IO 系统的发展早期的 IO 系统是直接和 CPU 连接,由 CPU 直接控制 IO 系统,极大的降低了 CPU 的性能。
后来将一些和内存数据交换比较频繁的外设单独建立了 DMA (Direct Memory Access 直接存储访问) 总线。
再后来发展出了 IO 通道结构,主机只需要和 IO 上面的通道部件进行数据交换即可,再次加快了速度。
现在一般开始采用 IO 处理机,承担主机的功能来管理各种外设,基本拥有和 CPU 一样的结构。
IO 系统工作方式IO 系统一般来说有三种工作方式,分别是:程序查询方式,程序中断方式,DMA 方式。三种方式的不同的地方就是使用了不同的设计来分担了一部分 CPU 对 IO 设备的控制,使得 IO 系统对 CPU 越来越简单,从而提升性能。
外设关于外设的各种信息,因为和生活比较接近,所以就不写了。
IO 接口IO 接口的相关结构,主要的作用就是建立起一个 CPU 和外设之间通讯的桥 ...