Java Web 常见问题
- jsp 和 servlet 的区别、共同点、各自应用的范围?
JSP 是 Servlet 技术的扩展,本质上就是 Servlet 的简易方式。JSP 编译后是“类 servlet”。
Servlet 和 JSP 最主要的不同点在于,Servlet 的应用逻辑是在 Java 文件中,并且完全从表示
层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为.jsp 的
文件。JSP 侧重于视图,Servlet 主要用于控制逻辑。在 struts 框架中,JSP 位于 MVC 设计模
式的视图层,而 Servlet 位于控制层。 - Cookie 和 Session 的作用、区别、应用范围,Session 的工作原理?
Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据
量有限。
Session:保存在服务端,每一个 session 在服务端有一个 sessionID 作一个标识。存储的
数据量大,安全性高。占用服务端的内存资源。 - JSTL 是什么?优点有哪些?
JSTL(JSPStandardTagLibrary,JSP 标准标签库)是一个不断完善的开放源代码的 JSP 标
签库,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV
和 PermittedTaglibsTLV)组成。优点有:
⑴ 在应用程序服务器之间提供了一致的接口,最大程序地提高了 WEB 应用在各应用
服务器之间的移植。
⑵ 简化了 JSP 和 WEB 应用程序的开发。
⑶ 以一种统一的方式减少了 JSP 中的 scriptlet 代码数量,可以达到没有任何 scriptlet
代码的程序。在我们公司的项目中是不允许有任何的 scriptlet 代码出现在 JSP 中。4、允许
JSP 设计工具与 WEB 应用程序开发的进一步集成。相信不久就会有支持 JSTL 的 IDE 开发
工具出现。 - J2EE 的优越性主要表现在哪些方面?什么是 MVC 模式?
⑴ J2EE 基于 JAVA 技术,与平台无关
⑵ J2EE 拥有开放标准,许多大型公司实现了对该规范支持的应用服务器。如
BEA,IBM,ORACLE 等。
⑶ J2EE 提供相当专业的通用软件服务。
⑷ J2EE 提供了一个优秀的企业级应用程序框架,对快速高质量的开发系统打下了基
础。
MVC 模型分为模型层、视图层和控制层,分别介绍如下:
⑴ Model 模型:应用程序的主体部分,用于表示业务逻辑。
⑵ View 视图:应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
⑶ Controller 控制器:用于根据用户的输入,控制用户界面数据显示,更新 Model 对象
状态。MVC 模式的出现不仅实现了功能模块和显示模块的分离,同时还提够了应用系统的
可维护、可扩展性、可移植性、和组建的可复用性。 - Struts 框架的优点?
⑴ 实现 MVC 模式,结构清晰,使开发者只需关注业务逻辑的实现。
⑵ 有丰富的 tag 可以用,能大大提够开发效率,缩短开发时间。
⑶ 页面导航。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期
的维护有很大的好处
⑷ 提供 Exception 处理机制 e、支持 L18N - 为什么要使用 Struts 框架?
JSP、Servlet、JavaBean 技术的出现给我们构建强大的企业应用系统提供了可能。但用
这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织
起来的规则,这就是框架,Struts 便应运而生。
基于 Struts 开发的应用由 3 类组件构成:控制器组件、模型组件、视图组件 - Sturt1 的核心类、核心标签库?
核心类:ActionServlet 控制器、ActionMapping 状态改变事件、Action 控制器的一部分、
ActionForward 用户指向、ActionForm 状态改变的数据。
核心标签库:Html 标签、bean 标签、logic 标签、tiles 标签、nested 标签 - Struts1 与 Sturts2 的区别?(Struts2 是 Struts1 和 webwork 的结合体)
⑴ Struts1 要求 Action 类继承一个抽象基类,而不是接口。Struts2 框架的 Action 类可
以实现一个 Action 接口,也可以实现其他接口。
⑵ Struts1 的 Action 是单例模式,线程是安全的。Struts2 的 Action 线程是不安全的,
Action 为每一个请求都生成了一个实例。
⑶ Struts1 过去依赖 servlet API,不容易测试。Sturts2 不依赖于容器,允许 Action 脱离
容器单独被测试。
⑷ Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。Struts2
直接使用 Action 属性作为输入属性,消除了对第二个输入对象的需求。
⑸ Struts1 整合了 JSTL,因此使用 JSTLEL。这种 EL 有基本对象图遍历,但是对集合
和索引属性的支持很弱。Struts2 可以使用 JSTL,但是也支持一个更强大和灵活的表达式语
言--“ObjectGraphNotationLanguage”(OGNL)。
⑹ Struts1使用标准JSP机制把对象绑定到页面中来访问。Struts2使用"ValueStack"技术,
使 taglib 能够访问值而不需要把你的页面(view)和对象绑定起来。
⑺ Struts1ActionForm 属性通常都是 String 类型。Struts1 使用 Commons-Beanutils 进行
类型转换。Struts2 使用 OGNL 进行类型转换。提供基本和常用对象的转换器。
⑻ Struts1 支持在 ActionForm 的 validate 方法中手动校验,或者通过 CommonsValidator
的扩展来校验。Struts2 支持通过 validate 方法和 XWork 校验框架来进行校验。
⑼ Struts1 支持每一个模块有单独的 Request Processors(生命周期),但是模块中的所
有 Action 必须共享相同的生命周期。 Struts2 支持通过拦截器堆栈(InterceptorStacks)为每
一个 Action 创建不同的生命周期。堆栈能够根据需要和不同的 Action 一起使用。 - 过滤器和拦截器的区别?
⑴ 拦截器是基于 java 的反射机制的,而过滤器是基于函数回调。
⑵ 过滤器依赖于 servlet 容器,而拦截器不依赖于 servlet 容器。
⑶ 拦截器只能对 action 请求起作用,而过滤器则可以对几乎所有的请求起作用。
⑷ 拦截器可以访问 action 上下文、值栈里的对象,而过滤器不能
⑸ 在 action 的生命周期中,拦截器可以多次被调用,而过滤器只在容器初始化时调用
一次。
拦截器:是在面向切面编程的就是在你的 service 或者一个方法,前调用一个方法,或
者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符
串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异
常的时候做业务逻辑的操作。
过滤器:是在 javaweb 中,你传入的 request,response 提前过滤掉一些信息,或者提前设
置一些参数,然后再传入 servlet 或者 struts 的 action 进行业务逻辑,比如过滤掉非法 url(不
是 login.do 的地址请求,如果用户没有登陆都过滤掉),或者在传入 servlet 或者 struts 的 action
前统一设置字符集,或者去除掉一些非法字符. - Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级
的对象封装,使得 java 程序员可以随心所欲的使用对象编程思维来操纵数据库。
⑴ Hibernate 的工作原理,具体如下:
① 读取并解析配置文件
② 读取并解析映射信息,创建 SessionFactory
③ 打开 Sesssion
④ 创建事务 Transation
⑤ 持久化操作
⑥ 提交事务
⑦ 关闭 Session
⑧ 关闭 SesstionFactory
⑵ Hibernate 的优点,如下:
① 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
② Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM 实现。他很大
程度的简化 DAO 层的编码工作
③ Hibernate 使用 Java 反射机制而不是字节码增强程序来实现透明性。
④ Hibernate 的性能好,映射的灵活性比较出色。它支持各种关系数据库,从一对一到
多对多的各种复杂关系。 - Hibernate 的核心类有哪些?重要方法有哪些?
Hibernate 的核心类有:Configuration、SessionFactory。
Hibernate 的重要方法有:Session 对象提供的方法 Save()、load()、Update()、Delete()、
beginTransaction()、close()、Transaction()、Commit()。
Queryq=CreateQuery(“fromCustomerwherecustomerName=:customerName”) - session.load()和 session.get()的区别?
Session 对象的 load()方法和 get()方法,都可以根据指定的实体类和 id,从数据库读取
记录,并返回与之对应的实体对象。
两个方法的其区别是:如果未能发现符合条件的记录,get()方法返回 null,而 load()方
法会抛出一个 ObjectNotFoundException。 - hql 和 sql 的区别?
Hibernate 是面向对象语言与关系型数据库之间的桥梁,它使得程序员可以不用关心底
层数据库连接的代码,而可以专心写业务逻辑。
sql 是面向数据库表查询。hql 是面向对象查询的,其 form 子句返回的是对象的实例。 - hibernate 与 jdbc 之间的区别?
Hibernate 作为一个 O/RMapping,比 JDBC 具备的优势,具体如下:
⑴ 编程思想上,更加符合人的逻辑思维习惯,面向对象比面向过程更加容易理解,测
试和维护。
⑵ 开发维护速度上,Hibernate 显著的快,代码量显著小。
⑶ 通过 Annotation 进行数据库的字段加密。
⑷ 对 Sql 不熟的菜鸟来说可以自动调优。
⑸ 结合 Spring,通过声明式事务可以省略事务的控制,事务以横切面形式出现
JDBC 比 Hibernate 具备的优势有:
⑴ 大数据量访问时,Jdbc 的效率显著快。
⑵ 直接操作数据库比较灵活。 - Hibernate 是如何延迟加载?
当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作
时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服
务器的性能。 - 说下 Hibernate 的缓存机制?
⑴ 内部缓存存在 Hibernate 中又叫一级缓存,属于应用事物级缓存
⑵ 二级缓存:
① 应用及缓存
② 分布式缓存
③ 第三方缓存的实现 - Spring 工作机制及为什么要用?
Spring 是一个轻量的控制反转和面向切面的容器框架。Spring 的工作机制如下:
⑴ Spring 把所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责
对请求进行真正的处理工作。
⑵ DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller。
⑶ DispatcherServlet 把请求提交到目标 Controller。
⑷ Controller 进行业务逻辑处理后,会返回一个 ModelAndView。
⑸ Dispathcher 查询一个或多个 ViewResolver 视图解析器,找到ModelAndView 对象指定
的视图对象。
⑹ 视图对象负责渲染返回给客户端。
控制反转 IoC 就是由容器来控制业务对象之间的依赖关系。控制反转的本质,是控制权
由应用代码转到了外部容器,控制器的转移既是所谓的反转。控制权的转移带来的好处就是
降低了业务对象之间的依赖程度,即实现了解耦。
DI/IOC,对持久层和表示层的控制与分配,增加系统的灵活性和稳定性.AOP,面向切面,
利用代理对程序的有效管理.
Spring 是一个轻量级的 IOC 和 AOP 框架,通过 spring 的 IOC 实现松耦合,而作为一个
AOP 框架他又能分离系统服务,实现内聚开发 Spring 最好的地方是它有助于您替换对象。
有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地
在需要时替换具有类似接口的协作对象。}Spring 对多种 ORM 框架提供了很好的支持。
3515

被折叠的 条评论
为什么被折叠?



