Java Web 常见问题

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 框架提供了很好的支持。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值