webxml引申来的

2024-03-02 10:32
文章标签 引申 webxml

本文主要是介绍webxml引申来的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.今天突然想起来web.xml中都有哪些元素的问题。看了几篇帖子之后,才知道,web.xml是sun公司定义的,应该属于J2EE的规范。在发布web项目时需要遵从标准的来组织web.xml,从而让实现了J2EE规范的各种web容器可以无差别的运行符合标准的web项目。

2.既然说到J2EE,就盗一张图吧:

最常用的还是JSP,Servlet,JavaBean。所有的JSP最终都编译成了Servlet,说白了,这个容器里面放的都是一个一个servlet,用来对应处理用户的各种请求。记得刚参加工作那会,公司的一个老项目,webxml里面配置了1000多个servlet,光一个webxml看起来都够人喝一壶了。对比现在的spring,简直一个天上一个地下。spring用一个servlet做入口,webxml只需要配一个spring的监听器,在web容器启动时,根据配置文件初始化spring容器,从此以后程序员只需要关注业务,再也不用自己配servlet了,因为spring准备了更加符合OOP的controller,更加简洁,纯粹。此时,引入restful规范,让我们的访问变得更加优雅,更加规范化。

3.说起spring,以前总觉得它像哆啦A梦的口袋,总是能掏出各种各样神奇的东西,其实,你看了这张图,就不会那么的无奈了。

  • 核心容器:核心容器提供Spring 框架的基本功能。核心容器的主要组件是BeanFactory ,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC ) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文:Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI 、EJB、电子邮件、国际化、校验和调度功能。
  • Spring AOP : 通过配置管理特性,Spring AOP 模块直接将面向方面的编程功 能集成到了Spring 框架中。所以,可以很容易地使Spring 框架管理的任何对象支持AOP 。Spring AOP 模块为基于Spring 的应用程序中的对象提供了事务管理服务。通过使用Spring AOP ,不用依赖EJB 组件,就可以将声明性事务管理集成到应用程序中。
  • Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写 的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向JDBC 的异常遵从通用的DAO 异常层次结构。
  • Spring ORM :Spring 框架插入了若干个ORM 框架,从而提供了ORM 的对象关系工具,其中包括JDO 、Hibernate 和iBatisSQLMap 。所有这些都遵从Spring 的通用事务和DAO 异常层次结构。
核心容器不用说开盖即食;上下文中的JNDI,国际化,调度等,也是比较常见的应用;AOP不用说了,事物全靠它;DAO可以看做是对JDBC的封装,不用自己写connection,statement,resultset了。ORM相当于提供了与几种流行的ORM框架比如hibernate,ibatis等提供了支持的接口。SpringMVC现在火的不要不要的,个人觉得它彻底打败了Struts的MVC。springweb,我们用的controller只是一个普通的Java类,只是因为加上了@controller注解,它就可以信手拈来的引用request,response这些servlet内置的对象,都是靠springweb了。

4.上面说到spring启动依赖webxml中配置的监听器,想起来监听器,拦截器,过滤器的概念好像不是很清楚,翻了几篇帖子,大概搞清楚了:

监听器listener,监听的是web容器的事件,比如启动,关闭这些。spring容器注册监听器就是要在web容器启动时初始化;

过滤器filter,过滤的是request,response请求,用户的请求,比如有用户请求过来,我们检查这个请求是否合法,用户是否登录,我们就检查请求有没有对应的session信息,如果没有就做相应跳转处理,有的话就使用filterchain.doFilter(req,resp)放行;

拦截器interceptor,说白了就是AOP,基于反射机制,对某一个方法进行拦截,在目标方法的前后加上拦截器中定义的操作。执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。

5.扯到AOP,摘抄一段大牛的话,个人觉得理解的非常透彻:面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。 
      一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。

6.上面提到的ORM框架,其中的hibernate很是有名,不过我一直没有接触过,但是其底层的缓存机制,用的是ehcache,我在项目中用过。想想还是有点小激动呢。

这篇关于webxml引申来的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765820

相关文章

三道Java泛型面试题,DAO引申

在Java泛型面试中,问题可以覆盖从基础概念到高级应用的不同层面。以下是从简单到复杂的三道Java泛型面试题: 1. 基础概念题 题目: 解释什么是Java泛型,并给出一个简单的泛型类示例,该类用于存储并检索任何类型的对象。 参考答案: Java泛型(Generics)提供了一种编译时类型安全检测机制,允许程序员在类、接口、方法中使用类型参数(这些类型参数在类被实例化时指定)。使用泛型可以编

多线程实践——ThreadLocal的应用场景及引申

参考文档一: https://www.cnblogs.com/zz-ksw/p/12684877.html 在通常的业务开发中,ThreadLocal 有两种典型的使用场景 场景1: ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己所拥有的副本, 而不会影响其他线程的副本,确保了线程安全。 场景2: ThreadLocal 用

Linux文件chattr/lsattr/Linux权限(搭建权限测试环境实战)引申到内部原理及Linux删除系统文件原理-7539字详谈

企业高薪思维: 每一个阶段什么时候是最重要的?(快速定位) 1.学习最重要的事情 (学生阶段,找工作前阶段) 2.家庭,女朋友 (工作阶段/学生阶段,学习不受到影响) 3.工作 (努力工作,不要三天一请假五天一请假) 找工作大多数人都关心薪资 工作中同事朋友请吃饭等,等着别人请/蹭车蹭喝,这样会把自己的人脉路堵死 钱从头到尾看的太过种,太计较,你关注的点太低了,钱赚来的想要拿高薪,去问自己有什么

tomcat异常 org.apache.catalina.deploy.WebXml addFilter

tomcat 7 下 在web.xml中添加页面编码filter遇到: Java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter 解决方案: 1.在tomacat 7的context.xml里加上 2.把tomcat 7 换回 tomcat 6

以新版 Mini Conda 的安装而引申的思考

前不久,突然想把 conda 拿起来玩玩,准备当作 Python Version Manager 来用。不过 Mini Conda 的安装似乎和几年前我实验时有一些比较大的区别了。 首先依据 conda 的官方文档 Installing on Windows 和 Conda init 可知,Conda 为了避免对已有的环境造成影响,从而使得侵入性最小,一是不再推荐将 conda 添加到系统 PA

HashMap优雅的初始化方式以及引申

转自:https://www.cnblogs.com/xdouby/p/5890083.html   小记   相信很多人和笔者一样,经常会做一些数组的初始化工作,也肯定会经常用到集合类。假如我现在要初始化一个String类型的数组,可以很方便的使用如下代码:   String [] strs = {"Tom","Jack"};   但是我相信很多人在初始化HashMap的时候是使用如下

从归并排序引申到排序链表-图解

从归并排序引申到排序链表 文章目录 从归并排序引申到排序链表归并排序递归版非递归版 排序链表递归版非递归版 归并排序 递归版 //合并排序public static void mergeSort(int[] nums) {mergeSortHelper(0, nums.length, nums); //没有-1}private static void mer

3.2.5:VBA对单元格操作的引申

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。 如果您只是一般的职场VBA需求,可以打包选择7.1.3.9教程+汉英手册,第7套教程是入门,第1套教程是入门后的提高,第3套教程字典是必备的VBA之精华,第9套教程是实用的典型案例讲解

java记录一下字符串比较以及引申的设计模式缓冲区内容

java简单记录一下字符串比较的相关 本文在 内容空("")和 引用空(null)以及 双等号(==)和 equals 方法上进行记录 1.内容空和引用空 ① 顾名思义,内容空即为String本身地址中没有存放任何东西,即没有内容,但是String是实例化的,是有地址的 例如:String str=new String(""); 其中str是真正指向一个存放String的地址的,只不过这个

『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)

呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~   今天突然回顾了一下《从你的全世界路过》这本书和电影,莫名的感悟涌上心头,收集到了一些走入人心的一些语句:   1、在季节的车上,如果你要提前下车,请别推醒装睡的我,这样我可以沉睡到终点,假装不