18.什么是Servlet?
Servlet是使用Java Servlet应用程序接口(API)及相关类和方法的Java程序,所有的Servlet都必须要实现的核心接口是javax.servlet.servlet.每一个servlet都必须要直接或者间接实现这个接口,或者继承javax.servlet.GenericServlet或javax.servlet.HttpServlet.
Servlet主要用于处理客户端传来的Http请求,并返回一个响应。
19.doGet 和 doPost 方法有什么区别?
doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
doPost:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。
20.JSP有哪些动作?分别是什么?
JSP共有以下6种基本动作
jsp:include :在页面被请求的时候引入的一个文件。
jsp:useBean:寻找或者实例化一个JavaBean
jsp:setProperty: 设置JavaBean的属性
jsp:getProperty: 输出某个JavaBean的属性
jsp:forward:把请求转到一个新的页面
jsp:plugin:根据浏览器类型为java插件生成OBJECT 或EMBED标记
21.JSP常用的指令
page:针对当前页面的指令。
include:包含另一个页面
taglib:定义和访问自定义标签
22.页面间对象传递的方法
request、session、application、cookie
23.JSP中动态INCLUDE与静态INCLUDE的区别。
动态include用于jsp:include动作实现<jsp:include page=“include.jsp” flush=“true”/> 它总是会检查所含文件的变化,适用于包含动态页面,并且可以带参数。
静态include 用include伪代码,不会检查所含文件的变化,适用于包含静态页面<%@include file=""%>
24.JSP的四大范围
JSP中的四种作用域包括page、request、session、application,具体来说:
page代表与一个页面相关的对象和属性。
request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,设计多个Web组件;需要在页面显示的临时数据可以置于此作用域。
session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中。
application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。
25.BS与CS的联系与区别
1、硬件环境不同:
C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供链接和数据交换服务。
B/S建立在广域网之上的,不必是专门的网络硬件环境,例如电话上网,租用设备。信息自己管理,有比C/S更强的适应范围;一般只要有操作系统和浏览器就行。
2.对安全要求不同
C/S 一般面对相对固定的用户群,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S结构适宜。可以通过B/S发布部分可公开信息
B/S 建立在广域网之上,对安全的控制能力相对弱,可能面相不可知的用户。
3.对程序架构不同
C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。
B/S 对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上。比C/S有更高的要求B/S结构的程序架构是发展的趋势,从MS的.net系列的BizTalk2000 Exchange 2000等,全面支持网络的构建搭建的系统。SUN和IBM推荐的JavaBean构建技术等,使B/S更加成熟
4.软件重用不同
C/S 程序可以不可避免的整体性考虑,构建的重用性不如在B/S要求下的构建的重用性好。
B/S对的多重结构,要求构建相对独立的功能。能够较好的重用,就例如买来的餐桌可以再利用,而不是在墙上的石头桌子
5.系统维护不同
C/S程序由于整体性,必须整体考察,处理出现的问题以及系统升级。升级难。可能是在做一个全新的系统
B/S构建组成,方面构建个别的更换,实现系统无缝升级,系统维护开销减到最小。用户从网上自己下载安装就可以实现升级。
6.处理问题不同
C/S程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关。应该都是相同的系统
B/S建立在关于网上,面相不同的用户群内,分散地域,这是C/S无法做到的,与操作系统平台关系小。
7、用户接口不同
C/S多是建立的window平台上,表现方法有限,对程序员普遍要求较高
B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流。并且大部分难度减低,减低开发成本。
8、信息流不同
C/S程序一般是典型的中央集权的机械式处理,交互性相对低。
B/S信息流向可变化,B-B B-C B-G 等信息、流向的变化,更像交易中心。
26.说出Servlet的生命周期,并说出Servlet和CGI的区别?
Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其Init方法进行Servlet的初始化,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX 方法(doGet、doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上地狱servlet.
27.如何防止表单重复提交
针对于重复提交的整体解决方案:
1.用redirect(重定向)来解决重复提交的问题
2.点击一次之后,按钮失效
3.通过loading(Loading原理是在点击提交时,生成Loading样式,在提交完成之后隐藏该样式)
4.自定义重复提交过滤器
28.request的作用
1、获取请求参数 getParamter()
2、获取当前web引用的虚拟路径getContextPath
3、转发
4、是一个域对象
29.get请求中文乱码
1、乱码的根本原因
浏览器的编码方式UTF-8 和 服务器的解码方式ISO-859-1 不一样
2、解决方法:
1)第一种方式 使用URLEncoder 和 URLDecoder 两个类 编解码。先以 iso-8859-1 进行编码,然后再以utf-8进行解码
2)第二种方式 使用String 类的方法案进行编解码
3)第三种方式 更改 server.xml配置文件
GET 请求是在URL地址栏中传递请求参数的,它会被Tomcat服务器自动解码,而Tomcat服务器默认的字符集也是ISO-8859-1,
所以我们需要修改Tomcat服务器的字符集为UTF-8
30.post请求中文乱码问题
1、post请求方式乱码的原因是:因为post是以二进制流的形式发送到服务器。服务器收到数据后。默认iso-8859-1进行编码。
2、post请求乱码解决,只需要在获取请求参数之前调用
request.setCharacterEncoding(“UTF-8”); 方法设置字符集 即可。
31.响应乱码
1、原因 由服务器编码,默认使用ISO-8859-1进行编码
由浏览器解码,默认使用GBK进行解码
2、解决方案
方法1:设置响应头
response.setHeader(“Contexnt-Type”,“text/html;charset=utf-8”)
方法2:设置响应的内容类型
response.setContentType(“text/html;charset=utf-8”)
通过这种方式可以在响应头中告诉浏览器相应体的编码方式是UTF-8;同时服务器也会采用该字符集进行编码
但需要注意的是两种方法,一定要在response.getWriter()之前进行。
32、Cookie对象的缺陷
1、Cookie是明文的,不安全的
2、不同浏览器对Cookie对象的数量和大小有限制
3、Cookie对象携带过多费流量
4、Cookie对象中的value值只能是字符串,不能放对象
网络中传递数据只能是字符串
33.Session的运行机制
1、在服务器端创建Session对象,该对象有一个全球唯一的ID
2、在创建Session对象的同事创建一个 特殊的Cookie对象,该Cookie对象的名字是JSESSIONID,该Cookie对象的value值是Session对象的那个全球唯一的ID,并且会将这个特殊的Cookie对象携带发送给浏览器
3、以后浏览器在发送请求就会携带这个特殊的Cookie对象
4、服务器根据这个特殊的Cookie对象的value值在服务器中寻找对应的Session对象,以此来区分不同的用户。
34.钝化和活化
1、Session和session域中的对象一起从内存中被序列化到硬盘上的过程我们称之为钝化。服务器关闭时会发生钝化。
2、Session与session域中的对象一起从硬盘上反序列化到内存中的过程我们称为活化。服务器再次开启时会发生活化。
3、要保证session域中的对象能和Session一起被钝化和活化,必须保证对象对应的类实现Serializable接口