jsp面试100问

1.什么是IOC
答:1.IOC就是控制反转,就是将对象创建的权利交给spring容器来完成。
    从此程序员无需关注对象的创建过程。spring容器来维护对象的生命周期。

2.什么是AOP
答:1.切面(Aspect):就是完成额外任务的类
    2.连接点(Joinpoint):就是调用的目标方法
    3.通知(Advice):切面中的方法
    4.切入点(Pointcut):匹配连接点的断言。(执行通知的if,就是一个匹配规则)
3.spring的核心类有哪些
答:BeanFactory:产生一个新的实例,可以实现单例模式
    BeanWrapper:提供统一的get及set方法
    ApplicationContext:提供框架的实现,包括BeanFactory的所有功能

4.spring的接口有哪些
答:1.BeanFactory最基础最核心的接口
    2.Resource接口,可以通用地访问文件资源
    3.FactoryBean工厂bean
    4.MessageSource接口

5.springMVC是什么
答:SpringMVC是一个前台的控制框架,与前台进行数据的交互。并且能够做到自动的值的封装。
一个前台控制类(Controller)就可以控制所有的请求。

6:springMVC内部调用过程
答:1.前端控制器         负责request对象和response对象的转发(不负责处理数据)
    2.处理器映射器     负责将 url请求与Controller一一对应
    3.处理器适配器     最终执行请求(crud)
    4.视图解析器         将页面和数据回显给用户。

7:springMVC实现原理
答:1.将客户端的URL发送给前端控制器
    2.前端控制前不负责处理任何业务逻辑,之后转发到处理器映射器中询问能够处理当前请求的Controller
    3.处理器映射器根据url匹配相应的Controller然后返回给前端控制器
    4.前端控制器请求处理器适配器执行请求(handler)
    5.处理器适配器根据某种特定的规则,调用相应的处理器处理请求
    6.处理器处理完成以后返回一个ModelAndView对象,这个对象中包含2个信息
       model就是处理后的数据    view就是返回页面的名称(index)没有任何修饰。
    7.处理器适配器将返回后的ModelAndVIew对象返回给前端控制器。
    8.这是的前端控制器拿到ModelAndView对象后不能直接解析,需要调用视图解析器解析,返回页面的具体路径
    9.视图解析器拿到页面名称后进行路径的拼接(web-inf/index.jsp)
      需要给页面名称添加前缀“web-inf” 和后缀“.jsp”然后形成一个具体的页面路径。
    10.前端控制器拿到具体的页面路径后调用视图渲染 将model中的数据填充到页面中。
    11.将页面返回给客户端进行展现。

8:spring创建对象有几种方式
答:4种,分别是:构造方法创建----静态工厂创建----实列工厂创建----Spring工厂

9:Spring对象创建的过程
答:当spring容器启动的时候,先会加载applicationContext.xml,按行解析。
    遇到每一个bean都会为这个bean创建对象.然后存入到map中,直到整个xml
    配置文件解析完成,spring容器才启动成功。在容器启动完成以后,才能为
    用户提供服务。(用户getBean()获取的对象)

10.IOC和DI的意义
答:通过使用Spring的IOC和DI能够实现代码解耦,各层之间耦合性降到最低。
IOC 将对象进行一个生成
DI 将对象的属性进行一个设置

11:Spring注入对象有几种方式
答:构造器注入,set注入。2种方式。

12:谈谈AOP中的代理
答:Spring中的AOP内部集成了jdk的动态代理和cglib的动态代理。
    使用Spring的AOP生成代理对象将不会再有代理对象原生的缺点。
    spring中可以做到方法级别的代理。

13:AOP的实现原理
答:当获取对象时,首先将对象与切入点表达式进行匹配。如果匹配成功,
    则会创建代理对象。然后代理对象执行方法时就会执行通知。

14:spring事务的回滚策略
答:1.运行时异常:
        如果程序出现运行时异常,那么错误级别较高,spring会自动的回滚事务。
    2.检查异常:
        对于检查异常而言,spring认为检查异常是可以避免的,程序员 可以修复的,
        那么spring容器就不负责回滚检查异常。

15:解释Spring Bean的生命周期?
答:在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。
    Spring bean factory 负责管理在spring容器中被创建的bean的生命周期。Bean的生命周期由两组回调(call back)方法组成。
    1.初始化之后调用的回调方法。
    2.销毁之前调用的回调方法。

    Spring框架提供了以下四种方式来管理bean的生命周期事件:
    InitializingBean和DisposableBean回调接口
    针对特殊行为的其他Aware接口
    Bean配置文件中的Custom init()方法和destroy()方法
    @PostConstruct和@PreDestroy注解方式

16:Spring框架中的单例Beans是线程安全的么?
答: Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),
    所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。
    最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。

17:Spring 框架中都用到了哪些设计模式?
    代理模式—在AOP和remoting中被用的比较多。
    单例模式—在spring配置文件中定义的bean默认为单例模式。
    模板方法—用来解决代码重复的问题。
    比如. RestTemplate, JmsTemplate, JpaTemplate。
    前端控制器—Srping提供了DispatcherServlet来对请求进行分发。
    视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。
    依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。
    工厂模式—BeanFactory用来创建对象的实例。

18. 什么是spring?
答:spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。
    Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯

19. 使用Spring框架的好处是什么?
    轻量:Spring 是轻量的,基本的版本大约2MB。
    控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
    面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
    容器:Spring 包含并管理应用中对象的生命周期和配置。
    MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
    事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
    异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,hibernate or JDO抛出的)转化为一致的unchecked 异常。
20. IOC的优点是什么?
答:IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。

21. 解释Spring支持的几种bean的作用域。
答:Spring框架支持以下五种bean的作用域:

    singleton : bean在每个Spring ioc 容器中只有一个实例。

    prototype:一个bean的定义可以有多个实例。

    request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

    session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

    global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

    缺省的Spring bean 的作用域是Singleton.

22. Spring支持的事务管理类型
答:Spring支持两种类型的事务管理:
    编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
    声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务

23. Spring框架的事务管理有哪些优点?
答:它为不同的事务API 如 JTA,JDBC,Hibernate,JPA 和JDO,提供一个不变的编程模式。
    它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如
    它支持声明式事务管理。
    它和Spring各种数据访问抽象层很好得集成

24. 在Spring AOP 中,关注点和横切关注的区别是什么?
答:关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
    横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如
    日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点

25. 什么是目标对象?
答:被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象。

28. 哪些是重要的bean生命周期方法? 你能重载它们吗?
答:有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用。
    The bean 标签有两个重要的属性(init-method和destroy-method)。用它们你可以自己定制初始化和注销方法。它们也有相应的注解(@PostConstruct和@PreDestroy)。

29.什么是hribernate?
答:用来简化jdbc 简化对数据库的访问,实现java模型对象与数据库表之间的对应

30.什么是MyBatis?
答:Mybatis是一个持久层的框架,轻量级的框架  因为现在主流的持久层框架就是Mybatis。能够快速处理大批量数据。
mybatis是一个半自动化的对象关系映射。

31.MyBatis能给我们实现哪些功能?
答:1.内部维护了线程池
    2.mybatis自己维护了事务(后来交给Spring来处理)
    3.结果集自动的封装为javabean.
    4.半自动话的原因是 需要手动编写SQL语句。
    5.实现数据库的缓存处理

32.MyBatis里#号与$之间的区别?
答:.${}和#{}
     ${}它是不安全的,容易被攻击(sql注入攻击)
     #{}它给参数添加了'name' 预编译机制 preparedStatements 更加的安全
     提倡使用。

33.Mybatis比IBatis比较大的几个改进是什么
答:
        1.有接口绑定,包括注解绑定sql和xml绑定Sql ,
        2.动态sql由原来的节点配置变成OGNL表达式,
        3. 在一对一,一对多的时候引进了association,在一对多的时候引入了collection
           节点,不过都是在resultMap里面配置

34.什么是MyBatis的接口绑定,有什么好处
答:
        接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,
        我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置


35.接口绑定有几种实现方式,分别是怎么实现的?
   答: 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上
        @Select@Update等注解里面包含Sql语句来绑定,另外一种就是通过xml里面写SQL来绑定,
        在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名.

36.什么情况下用注解绑定,什么情况下用xml绑定
   答: 当Sql语句比较简单时候,用注解绑定,
        当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多

37.MyBatis实现一对一有几种方式?具体怎么操作的
    答:有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,
        通过在resultMap里面配置association节点配置一对一的类就可以完成;
        嵌套查询是先查一个表,根据这个表里面
        的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表
        的查询通过select属性配置

38.MyBatis实现一对多有几种方式,怎么操作的
    答:有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配
        置collection节点配置一对多的类就可以完成;
        嵌套查询是先查一个表,根据这个表里面的
        结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的
        查询通过select节点配置

39.MyBatis里面的动态Sql是怎么设定的?用什么语法?
    答:MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现,但是如果要写的完
        整,必须配合where,trim节点,where节点是判断包含节点有内容就插入where,否则不插
        入,trim节点是用来判断如果动态语句是以and 或or开始,那么会自动把这个and或者or取
        掉

40.IBatis和MyBatis在核心处理类分别叫什么
    答:IBatis里面的核心处理类交SqlMapClient,
        MyBatis里面的核心处理类叫做SqlSession

41.IBatis和MyBatis在细节上的不同有哪些
    答:在sql里面变量命名有原来的#变量# 变成了#{变量} 
        原来的$变量$变成了${变量},
        原来在sql节点里面的class都换名字交type
        原来的queryForObject queryForList 变成了selectOne selectList 
        原来的别名设置在映射文件里面放在了核心配置文件里

42.讲下MyBatis的缓存
    答:MyBatis的缓存分为一级缓存和二级缓存,
        一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是打开的,
        使用二级缓存属性类需要实现Serializable序列化接
        口(可用来保存对象的状态),可在它的映射文件中配置

43.MyBatis(IBatis)的好处是什么
    答:ibatis把sql语句从Java源程序中独立出来,
        放在单独的XML文件中编写,给程序的维护带来了很大便利。
        ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,
        大大简化了Java数据库编程的重复工作。
        因为Ibatis需要程序员自己去编写sql语句,
        程序员可以结合数据库自身的特点灵活控制sql语句,
        因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询

44.Hibernate工作原理及为什么要用?
原理:
    答:1.读取并解析配置文件
        2.读取并解析映射信息,创建SessionFactory
        3.打开Sesssion
        4.创建事务Transation
        5.持久化操作
        6.提交事务
        7.关闭Session
        8.关闭SesstionFactory

45.为什么要用Hribernate:
  答:1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
      2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
      3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系

46.Mybatis优势
      1.MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
      2.MyBatis容易掌握,而Hibernate门槛较高。

47.Hibernate优势
      1.Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
      2.Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

48.MyBatis支持级联删除吗?
答:不支持,只能写sql语句关联删除。


49.servlet的生命周期
 答:web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。
     通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器
     调用servlet的destroy()方法。

50.什么情况下调用doGet()和doPost()?
答:Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

51.JSP的9大内置对象及方法。
答:request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
   response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
   out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
   pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
   session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
   applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
   config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
   page表示从该页面产生的一个servlet实例

52.JSP中动态INCLUDE与静态INCLUDE的区别?
答:动态INCLUDE用jsp:include动作实现
   它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
   静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

53.jsp有哪些动作作用分别是什么
答:JSP共有以下6种基本动作
   jsp:include:在页面被请求的时候引入一个文件。
   jsp:useBean:寻找或者实例化一个JavaBean。
   jsp:setProperty:设置JavaBean的属性。
   jsp:getProperty:输出某个JavaBean的属性。
   jsp:forward:把请求转到一个新的页面。
   jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记


54.如何实现servlet单线程模式
答:<%@ page isThreadSafe="false" %>

56.JSP和Servlet有哪些相同点和不同点?
答:Jsp是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外部表达。
    JSP编译后是“类 servlet”。Servlet和JSP最主要的不同点在于Servlet的应用
    逻辑是在java文件中,并且完全从表示层中HTML里分离出来,而jsp是java和html
    结合成一个扩展名为.jsp的文件,JSP侧重于视图,servlet侧重于控制逻辑。

57.说说四种会话跟踪技术
答:1.page是代表与一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有任何的include指令,但是没有include动作)表示。这既包括servlet又包括被编译成servlet的jsp页面。
    2.request是代表与web客户端发送的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件
    3.session代表与用于某个web客户端的一个用户体验相关的对象和属性,一个web会话可以也经常会跨越多个客户机请求。
    4.application是代表与整个web应用程序相关的对象和属性,这实质上是跨越多个web应用程序,包括多个页面、请求和会话的一个全局作用域。

58.如何防止在JSP或servlet中的输出不被browser保存在cache中?
答:把一下脚本加入到jsp文件中即可
<%

response.setHeader("Cache-Control","no-store");

response.setHeader("Pragma","no-cache");

response.setDateHeader("Expires",0);

%>

59.在JSP中如何设置cookie?

答:设置
<%
    Cookie mycookie=new Cookie("aName","aValue");
   response.addCookie(mycookie);
%>

删除:

<%
Cookie killMyCookie=new Cookie("mycookie",null);
killMyCookie.setMaxAge(0);
killMyCookie.setPath("/");
response.addCookie(killMyCookie);
%>

60.什么是servlet
答:Servlet是sun公司制订的一种用于扩展web服务器功能的组件规范。

61.讲下servlet的执行流程。doGet和doPost的区别
 答:Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》方法初始化servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁。
 doGet和doPost都是接受用户请求的方法,doGet处理get请求,doPost处理post请求,doGet用于地址栏提交,doPost用于表单提交,在页面提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显示,post不显示,所以post比get安全.

62.当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的。
答:会出现线程不安全问题。无论是doGet还是doPost去调用,服务器端处理的过程都是一样的,
    那么我们可以把处理过程单独写在另外一个方法handle里,让两个方法都去调用handle,
    根据不同请求去调用不同的方法。

63.有三台服务器,如果在一台服务器上登陆了这个用户,其他两台就不能再登陆这个用户,使用session共享,你是怎么做的。
答:把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。

64.Jsp如何处理json
答:在jsp中处理 JSON通常需要配套使用JQuery控件并且导入一些Commonjar包使用JQuery
    控件是因为它能有效的解析并且展示 JSON 数据导入Common则是因为Java中的对象并不
    是纯粹的数据,需要通过这些 Jar 包的处理使之转化成真实数据。

65.Jsp的重定向和转发的流程有什么区别
答:重定向是客户端行为,转发是服务器端行为
    重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发
    重定向会导致request对象信息丢失。转发则不会
    转发的url不会变,request.getRequestDispatch()。forward()
    重定向的url会改变,response.getRedirect();

66.jsp可以操作窗口吗?
答:Jsp不能够直接调用窗口,只能先 生成打开窗口的js,再由js调用

67.获取页面的元素和值有几种方式,分别说一下
答:request.getParameter() 返回客户端的请求参数与值
    request.getParameterNames() 返回所有可用属性名的枚举
    request.getParameterValues() 返回包含参数的所有值的数组

68.servlet和javaScript的区别,他们分别是什么作用
答:一个是服务端,一个是客户端
    Servlet是独立于平台和协议的服务器端的java应用程序,可以动态生成web页面,并采用响应--请求的模式提供web服务
    javaScript是一种解释性语言,用于向html页面提供交互行为,通常被直接嵌入在html页面中
    servlet是java语言编写的web应用
    js是基于html上的一种解释语言


69.jsp的执行原理
答:客户端发出请求(request),jsp引擎将jsp页面翻译成servlet的java源文件,在Tomcat中将源文件编译成class文件,并加载到内存中执行,
把结果返回(response)给客户端。

70.转发http请求一般有两种方法,response.sendRedirect和request.forward。resquest.setAttribute()中设置的值不会丢失?(B)
答:A.sendRedirect B.forward C.两个都不能 D.两个都可以

71.HTML和Servlet的异同
答:不同:
        Html是静态,servlet是动态
        html页面由服务器直接返回,
        servlet是用来处理客户请求,并返回html页面
      //servlet需要服务器调用servlet方法生成动态html页面,且需要在web.xml中配置url路径

72.session和application的作用
答:Session用于客户端与服务器之间保持状态的解决方案,数据保存在服务器内存中,底层是有cookie实现的
    Application的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此
    application是不安全的

73.request ,response,session 和 application是怎么用的
答:Request是客户端向服务端发送请求
    Response是服务端对客户端请求做出响应
    Session在servlet中不能直接使用,需要通过getSession()创建,如果没有设定它的生命周期,或者通过invildate()方法销毁,关闭浏览器session就会消失
    Application不能直接创建,存在于服务器的内存中,由服务器创建和销毁

74.服务端怎么判断浏览器是否支持cookie
答:可以使用javaScript的方法navigator.cookieEnabled判断浏览器是否支持cookie

75.Request和session的取值区别,以及出现乱码的解决方式(不能在java代码中设置)
答:Request可以通过getAttribute()方法直接取值,也可通过getParameter()取值
    Session需要通过request.getSession().getAttribute()才能取值
    Request是针对一次请求,session是针对整个会话
    在页面通过contentType,pageEncoding,content设置编码格式,必须要一致

76.jsp页面跳转
答:Jsp页面跳转有两种方式,forward和redirect(转发和重定向)
    Forward只能在当前项目里跳转,只产生一次请求,request保存的变量不会丢失,url地址不会改变
    Redirect可跳转到项目以外的任何页面,产生两次请求,request保存的变量会全部丢失,url地址会发生改变,变化为第二个请求的地址

77.有几种方式将页面的值传到后台
答:可通过form表单的get或post将值传递到后台,也可通过setAttribute()方法将值传递到后台

78.一个form表单的值如何获取
答:在servlet中通过request.getParameter()方法可以获取表单的值
    或者是request.getParameterValuse();

79.Jsp中父页面中怎么拿到子页面的表单元素,不是拿值怎么拿
答:通过设置属性setAttribute(),通过getAttribute()拿值,getParameter()方法可以做到

80.404和500是什么意思
答:404 :找不到url请求的路径,一般是工程名不对或者拼写错误
    500 :服务器内部错误,一般是服务器内部代码编写错误,也有可能是抛异常导致

81.写出5种JSTL常用标签
答:

82.在项目名和页面路径都没有错的情况下为什么会报404错误,它有什么原理在里面
答:工程名不对或者拼写错误,404错误一般是找不到客户端请求的文件

83.Jsp页面把一个元素隐藏的方法
答:通过使用属性hidden可以将元素隐藏

84.Session,application,cookie的区别
答:Session不能通过new创建,要通过调用getSession()方法创建,数据保存在服务器端,单个客户端session是共享的,底层是由cookie实现的,大小没有限制
    Application的作用域是整个工程只有共享一个,生命周期比session大
    Cookie需要通过new创建,数据保存在客户端中,cookie保存的数据不能超过4k,不安全

85.我们在web应用开发过程中经常遇到输出某种编码的字符,如ISO-8859-1,如何输出一个某种编码的字符串
答:如将ISO-8859-1输出为GBK格式的字符, 通过new String(byte[] bytes,String charset)
    构造器设置编码构造一个新的String(new String("ISO-8859-1","GBK"));

86.怎么判断用户请求时是第一次,如果客户端和服务端断开怎么连到上一次操作
答:通过session中的isNew()可以判断是否是新用户

87.Servlet是安全的吗?当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的
答:是线程不安全的,因为servlet是单例模式,当多个客户端共同访问的时候线程不安全。
    尽量用局部变量,同步块,如果当前字段是不会改变的,用final修饰

88.Servlet和过滤器的区别
答:Servlet:是用来处理客户端发送的请求,然后生成响应并将其传给server服务器,
             最后服务器将响应返回给客户端
     过滤器:是用于 对servlet容器调用servlet的过程进行拦截
             可以在servlet进行响应处理前后做一些特殊的处理

89. pageContext有什么作用
答:可以使用pageContext对象来设定属性,并指定属性的作用范围,提供了对JSP页面内所有的对象及名字空间的访问

90.Filter与拦截器怎么执行的
答:首先初始化过滤器,然后服务器组织过滤器链,所有的请求都必须需要先通过过滤器链,
    过滤器链是一个栈,遵循先进后出的原则 ,所有的请求需要经过一个一个的过滤器,
    执行顺序要根据web.xml里配置的的位置前后执行,每个过滤器之间通
    过chain.doFilter连接, 最后抵达真正请求的资源,执行完后再从过滤器链退出

91.Servlet是单例还是多例
答:是单例的,可以提高性能

92.Jsp中如何进行分页,项目中如何进行分页?
答:需要上一页和下一页的超链接(至少需要这两个),通过计算当前页的页码获取下一页数据
    的起始位置,然后在 MySql 中查询,如果使用 Oracle 则需要另外计算下一页数据的结
    束位置。
    使用hibernate框架,它可以针对不同的数据库自动产生为你分页的代码。

93.什么是hibernate一级缓存?
答:一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,
   如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,
   而不会再去连数据库,取数据。

94.什么是hibernate二级缓存呢?
答:二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同
    一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连
    接数据库

95.Hibernate的优缺点:
  优点:1、程序更加面向对象;
        2、提高了生产率;
        3、方便移植(修改配置文件);
        4、无侵入性。
  缺点:
        1、效率比JDBC略差;
        2、不适合批量操作。

96.Hibernate有四种查询方案:
  1、get,load方法,根据id查找对象
  2、HQL--hibernate query language(查询对象:Query)
  3、Criteria--标准查询语言(查询对象:Criteria,查询条件:Criterion)
  4、通过sql来查(查询对象:SQLQuery)

97.Hibernate中的命名SQL查询指的是什么?
 答:Hibernate的这个面试问题同Hibernate提供的查询功能相关。命名查询指的是用标签在影射文档中
     定义的SQL查询,可以通过使用Session.getNamedQuery()方法对它进行调用。命名查询使你可以使用你所指定的
     一个名字拿到某个特定的查询。 Hibernate中的命名查询可以使用注解来定义,也可以使用我前面提到的xml影射
     问句来定义。在Hibernate中,@NameQuery用来定义单个的命名查询,@NameQueries用来定义多个命名查询。

98.Hibernate中的查询缓存指的是什么?
答:这个问题有时是作为上个Hibernate面试问题的后继问题提出的。查询缓存实际上保存的是sql查询的结果,这样再进行
    相同的sql查询就可以之间从缓存中拿到结果了。为了改善性能,查询缓存可以同二级缓存一起来使用。Hibernate支持
    用多种不同的开源缓存方案,比如EhCache,来实现查询缓存

99.为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?
答:每个Hibernate实体类必须包含一个 无参数的构造器, 这是因为Hibernate框架要使用Reflection API,通过调用
    Class.newInstance()来创建这些实体类的实例。如果在实体类中找不到无参数的构造器,这个方法就会抛出一个
    InstantiationException异常。

100.可不可以将Hibernate的实体类定义为final类?
答:是的,你可以将Hibernate的实体类定义为final类,但这种做法并不好。因为Hibernate会使用代理模式在延迟关联
    的情况下提高性能,如果你把实体类定义成final类之后,因为 Java不允许对final类进行扩展,所以Hibernate就无
    法再使用代理了,如此一来就限制了使用可以提升性能的手段。不过,如果你的持久化类实现了一个接口而且在该接
    口中声明了所有定义于实体类中的所有public的方法轮到话,你就能够避免出现前面所说的不利后果

你可能感兴趣的:(面试)