19_ServletJsp重点面试题
- 格式:doc
- 大小:37.00 KB
- 文档页数:6
1. WEB三要素?1.浏览器:向服务器发送请求,下载并执行服务器中的网页(HTML)2.HTTP协议:浏览器和服务器之间的通讯协议。
3.服务器:接收浏览器请求,发送相应的页面到浏览器。
2.java设计模式的分类(面)总体来说设计模式分为三大类,共计23种设计模式:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
3. 设计模式之单例模式?(面)单例模式是一种常用的软件设计模式。
在它的核心结构中只包含一个被称为单例的特殊类。
通过单例模式可以保证系统中一个类只有一个实例。
说到单例模式,第一个想到的是该类中有一个初始化为null的自身引用,且被private 修饰符修饰,其它类不得直接访问。
除此之外,单例模式的类还需要有private的构造方法,这一点不难理解,如果构造方法是public的,那么类外部可以直接调用该类的构造方法,如此一来便不具备单例的特性.怎么获取该类唯一的实例呢?这就需要一个公有的获取器,该方法返回值类型是单例模式类,返回的结果自然是该类中唯一的实例。
案例:请将如下代码务必写熟练(笔试题)(面)public class Singleton{//初始化为null的单例private static Singleton single=null;//private的构造方法private Singleton(){ }//public的获取器public Static Singleton getSingleton(){//如果当前的实例为null则创建对象if(single==null){single=new Singleton();}return single;}}4.Servlet生命周期?默认情况下,第一次访问Servlet时Tomcat就会创建并初始化它,也可以更改为启动(startup)Tomcat时就创建(实例化,new)并初始化Servlet(1)创建(实例化,new)Servlet //创建这个对象(2)(自动调用init())初始化Servlet //初始化就是给它设置一些数据(3)调用service方法可以执行多次。
每个类型的Servlet都是单个实例。
(4)Tomcat 关闭(shutdown)时会自动调用Servlet的销毁方法(destroy()),释放一些数据,比如一启动服务器就要往哪存个文件,关闭Tomcat时再把它删除!//总结:对于某个类型的Servlet来说,只有第三步可以执行多次,第一、二、四都只执行一次!因此Servlet在Tomcat内只有一个实例,即单例。
5.Servlet中Http的请求方式有哪几种?有什么不同?get和post这是http协议的两种请求方式:这两种请求有本质的区别,get通过路径传参,参数附加在url后,大小个数有严格限制且只能是字符串,隐私性差。
post的参数是通过实体传参,不通过url,隐私性好,传递参数不受限制。
6.config和context对比共同点:都能读取web.xml中的参数(1)config和Servlet是1对1的关系(2)context和Servlet是1对多的关系(3)它们都是为servlet服务的7.Servlet工作流程(以下步骤只有第六步需要我们自己做)(1)浏览器的通信组件和服务器的通信组件建立连接(2)浏览器将数据打包(3)浏览器发送数据给服务器(4)服务器将数据拆包(5)服务器都会自动new(创建) request和response两个对象(即实例化对象)(每次发送请求给服务器,服务器都会自动new(创建) request和response两个对象)(6)服务器的通信组件读取web.xml找到对应的Servlet,new(实例化)对象(7)调用service方法时自动传入request和response(8)Servlet做出响应(即我们写的println)(9)服务器的通信组件将数据打包(10)服务器发送数据给浏览器(11)浏览器将数据拆包(12)关闭连接8.为何会出现乱码?编码解码方式不一致导致的拆包后的数据会存入request(1)数据要想在网上传输,必须要进行序列化,转成byte格式(2)请求过程乱码:浏览器打包数据是按照utf-8编码,网页上可以读到;服务器默认按照iso8859-1解码(3)响应过程乱码:服务器默认按照iso8859-1编码,浏览器打包数据是按照utf-8解码9.乱码解决方案?(面)(1) get/post:让Servlet接受乱码String,用iso8859-1将其还原成byte,再用utf-8将其转成String,具体做法:byte[] bs=user.getBytes(“iso8859-1”);user=new String(bs,”utf-8”); (2)只对get有效,具体做法:在server.xml第65行,加URIEncoding=”utf-8”(即路径的编码是utf-8,服务器在拆包时路径按照utf-8转码,其他仍然按照iso8859-1转码,而get用路径来传参,所以只对get有效)优点:简单缺点:只对get有效,有一定的局限性(3)只对post有效,具体做法:在获取请求参数之前,加req.setCharacterEncoding(“utf-8”); 优点:简单缺点:只对post有效,有一定的局限性10.什么是HHTP协议(1)超文本传输协议(2)就是W3C指定的规范(3)规定了浏览器和服务器怎么通信以及通信的数据格式11. 服务器和浏览器如何通信?(1)建立连接(2)发送请求(3)返回响应(4)断开连接特点:一次请求一次连接,降低服务器的压力12.JSP和Servlet的区别、共同点?(面)Jsp主要在于页面的显示动态生成页面,可以与html标记一起使用,其还是要生成为一个servlet,本质上还是servlet。
Servlet:主要是控制的处理,如调用业务层,跳转不同的jsp页面。
13.ServletContext对象和servletConfig对象?ServletContext对象:servlet容器在启动时会加载web应用,并为每个web应用创建唯一的servlet context对象,可以把ServletContext看成是一个Web应用的服务器端组件的共享内存,在ServletContext中可以存放共享数据。
ServletContext对象是真正的一个全局对象,凡是web容器中的Servlet都可以访问,可以理解为全局公有的对象。
servletConfig对象:用于封装servlet的配置信息。
从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对servlet自身有效,一个servlet的ServletConfig对象不能被另一个servlet访问,可以理解为私有的对象。
14.转发和重定向的区别?(面)转发和重定向都是解决WEB组件之间跳转问题的转发:一次请求,地址不改变,共用1个request对象,只能转发到项目内组件。
重定向:二次请求,地址改变,两个请求中不能共享request对象,可以重定向到项目外的组件。
通常查询时候用转发,增删改之后重定向到查询。
15.JSP页面的标签有哪些?(面)<% %>:JSP脚本,能够写在方法里的java代码片段。
<%= %>:JSP表达式,变量,变量和运算符组合的表达式、有返回值的方法。
<%! %>:JSP声明,可声明成员属性和成员方法。
<%@ %>:JSP指令16.JSP页面的9大隐含对象?(面)request 请求信息response 响应信息out 输出的数据流session 会话application 全局的上下文对象pageContext JSP页面的上下文page JSP页面本身config Servlet配置对象exception 捕获网页异常17.getAttribute与getParame的区别?getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得。
getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型。
18.cookie 和session 的区别:1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。
当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
综上所述:cookie(存在于浏览器上):优点:服务器压力小缺点:数据不安全session(存在于服务器上):优点:数据安全缺点:服务器压力大19.什么是过滤器?(面)过滤器是Servlet2.3规范之中一种特殊的Web组件,可以作为Servlet的辅助性插件存在,通过配置由容器控制所有请求在到达真正的处理逻辑Servlet之前先通过过滤器的检查。
如果过滤逻辑需要修改,那么只需要修改这一个组件即可。
所以这种可随时添加、修改,作为Servlet补充功能的Web组件是非常必要的。
简单的可以将过滤器理解过一个防火墙,设置的白名单可以通过,黑名单不能通过。
通过业务场景理解:电信计费项目输入查询界面的网络路径可直接进入查询页面,但是在设置过滤器后只有是用户登录状态的Servlet才能通过,非登录状态下的Servlet必须被跳转到登录页面重新登录。