面试整理之servlet+jsp

1、jsp有哪些内置对象作用分别是什么
JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
page JSP网页本身
session 与请求有关的会话期
application servlet 正在执行的内容
exception 针对错误网页,未捕捉的例外
out 用来传送回应的输出
config servlet的构架部件

2、servlet四大作用域

  • application(ServletContext)

生命周期:当Web应用被加载进容器时创建代表整个web应用的application对象,当服务器关闭或Web应用被移除时,application对象跟着销毁。
作用范围:整个Web应用。
作用:存储公共数据(上下文)

  • session 域 (HttpSession)

生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存 中创建一个session并返回。
作用范围:一次会话。
作用:保存登录的用户信息、购物车信息等

  • request域 --(HttpServletRequest)

生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
作用范围:整个请求链(请求转发也存在)。
作用: 在整个请求链中共享数据。最常用到:在Servlet 中处理好的数据交给Jsp显示,此时参数就可以放置在Request域中带过去。

  • pageContext域—(PageContext)

生命周期:当对JSP的请求时开始,当响应结束时销毁。
作用范围:整个JSP页面,是四大作用域中最小的一个。
作用:
获取其它八大隐式对象,可以认为是一个入口对象。
获取其所有域中的数据

3、jsp有哪些动作作用分别是什么
JSP共有以下6种基本动作

jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

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

5、两种跳转方式分别是什么有什么区别
有两种,分别为:
forward跳转:
服务器端跳转,地址栏不改变。
执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转之前一定要释放全部资源)。
request设置的属性在跳转后的页面仍然可以使用。

response跳转:
客户端跳转,地址栏改变。
所有代码执行完毕后跳转。
跳转后页面不能使用上一个页面的request。
使用地址重写传递参数(response.sendRedirect(“URL?参数名=参数值”))。

6、JSP的常用指令
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)

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

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

9、页面间对象传递的方法
request,session,application,cookie,input隐藏域,超链接,表单等

10、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是”类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

11、四种会话跟踪技术
会话作用域ServletsJSP 页面描述
page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

12、Request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性

13、Servlet执行时一般实现哪几个方法?
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()JSP

14、讲下servlet的执行流程。
Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》
方法初始化servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁。

15、Get和Post的区别
在页面提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显示,post不显示,所以post比get安全.

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

17、写一个自定义标签要继承什么类
SimpleTagSupport,一般调用doTag方法
或者实现SimpleTag接口

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

19、如何处理Servlet的线程不安全问题

  • 最简单的就是不使用字段变量
  • 使用final修饰变量
  • 线程安全就是多线程操作同一个对象不会有问题,线程同步一般来保护线程安全,所以可以在Servlet的线程里面加上同步方法或同步块。

(Synchronized)可以保证在同一时间只有一个线程访问,(使用同步块会导致性能变差,最好不去使用实例变量)

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

21、Jsp可以操作窗口吗?
Jsp不能够直接调用窗口,只能先生成打开窗口的js,再由js调用窗口

22、Session的主要几个方法的区别
Session不能通过new创建,需要通过调用getSession()或者getSession(true)方法创建,getSession()是自动创建session,
getSession(true)是强制创建session,setAttribute()方法可以用于传值,getAttribute()可以用于取值
(第一次创建session的时候,就是访问第一次一个jsp页面<这个页面的page指令 没有设置session=false>)
销毁session调用invalidate方法
通过setMaxInactiveInterval()可以设定session的生存时间(web.xml可以设置session的生存时间),默认为半小时

23、Jsp的九大内置对象,三大指令,七大动作的具体功能
JSP九大内置对象:
pageContext :只对当前jsp页面有效,里面封装了基本的request和session的对象 Request :对当前请求进行封装
Session :浏览器会话对象,浏览器范围内有效
Application :应用程序对象,对整个web工程都有效 Out :页面打印对象,在jsp页面打印字符串
Response :返回服务器端信息给用户
Config :单个servlet的配置对象,相当于servletConfig对象
Page :当前页面对象,也就是this
Exception :错误页面的exception对象,如果指定的是错误页面,这个就是异常对象

三大指令:
Page :指令是针对当前页面的指令
Include :用于指定如何包含另一个页面
Taglib :用于定义和指定自定义标签

七大动作:
Forward,执行页面跳转,将请求的处理转发到另一个页面
Param :用于传递参数
Include :用于动态引入一个jsp页面
Plugin :用于下载javaBean或applet到客户端执行 useBean:javaBean :新建javaBean实例
setProperty :修改javaBean实例的属性值
getProperty :获取javaBean实例的属性值

24、获取页面的元素的值有几种方式,分别说一下
在servlet中
request.getParameter() 返回客户端的请求参数的值
request.getParameterNames() 返回所有可用属性名的枚举
request.getParameterValues() 返回包含参数的所有值的数组
表单获取
隐藏域获取

ssm还可以直接使用对象名字获取

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

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

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

28、会话跟踪有哪些,他们的区别是什么,Cookie和Session,application的区别
Cookie,session和application都是会话跟踪
Cookie是http对象,客户端与服务端都可以操纵
cookie是在客户端保持状态,session是在服务器端保持状态,由于cookie是保存在客户端本地的,所以数据很容易被窃取,当访问量很多时,使用session则会降低服务器的性能,application的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,
因此application也是不安全的

29、说说Jsp的隐藏对象有哪些
Request,out,response , pageContext , session , application , config , page , exception,也即jsp的九大内置对象

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

31、为什么在session少放对象
因为session底层是由cookie实现的,当客户端的cookie被禁用后,session也会失效,且应尽量少向session中保存信息,session的数据保存在服务器端,当有大量session时,会降低服务器的性能

32、怎么判断浏览器是否支持Cookie
可以使用javaScript的方法navigator.cookieEnabled判断浏览器是否支持cookie

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

34、Jsp页面跳转
Jsp页面跳转有两种方式,forward和redirect(转发和重定向)

35、说出Jsp内置对象以及方法.
Request:客户端发送请求
getParameter() 得到前台传入的参数值
setCharacterEncoding(String arg0):设置编码格式
getCharacterEncoding():获取编码格式
getRequestDispatcher(String path):返回一个RequestDispatcher对象

Response:服务器端返回信息给用户
setAttribute(“name”,Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
getAttribute(“name”):返回name属性值
getAttributeNames():返回所有可用属性名的枚举
setCharacterEncoding(String charset):设置编码格式
getCharacterEncoding():获取编码格式
sendRedirect(String location):返回对包装的响应对象调用
pageContext:网页的属性是在这里管理的
setAttribute(“name”,Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
getAttribute(“name”):返回name属性值
getAttributeNames():返回所有可用属性名的枚举

Session:与请求有关的会话期
setAttribute(“name”,Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
getAttribute(“name”):返回name属性值
getAttributeNames():返回所有可用属性名的枚举
invalidate():使当前会话失效
setMaxInactiveInterval():指定在Servlet容器使此会话失效之前客户端请求之间的时间间隔,以秒为单位。负数时间指示会话永远不会超时
getMaxInactivelnterval():返回servlet 容器在客户端访问之间将使此会话保持打开状态的最大时间间隔,以秒为单位。在此间隔之后,servlet 容器将使会话无效

Application:Servlet正在执行的内容
setAttribute(“name”,Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
getAttribute(“name”):返回name属性值

Out:用来传送回应的输出
print():打印信息
println():换行打印信息

Config:Servlet的构架部件
getInitParameter(String paramNarne):从web.xml中获取指定名称的值
getInitParameterNames():从web.xml中获取所有的名称

Page:JSP页面本身

Exception:针对错误网页,未捕捉的例外
getMessage():返回异常的详细信息
getClass():返回异常的名称

36、有几种方式将页面的值传到后台
可通过get或post将值传递到后台,也可通过Jsp里面的setAttribute()方法将值传递到后台
直接在jsp使用${对象}方式(EL表达式)和JSTL(标准通用标签库)获取,后端直接传对象

37、一个form表单的值如何获取
在Servlet中通过request.getParameter()方法可以获取表单的值或者是request.getParameterValues();

38、Jsp中父页面中怎么拿到子页面的表单元素,不是拿值怎么拿

  • 通过ajax方式

实现过程:通过ajax请求到子页面中,子页面获取参数id使用java和js变量的交互后,返回需要的模板信息

缺点:把js变量转换成java变量比较麻烦,需要使用form表单来提交,而且jsp中的java脚本是在服务器端运行的,需要服务器端资源开销,而且增加了交互次数

  • 通过iframe 引入

实现过程:使用iframe引入子页面,然后通过$(iframe.contents().find("#"+id)[0]).val()获得需要的模板.

缺点:不确定iframe是不是可以延迟加载,如果也想一样把整个页面都导入进来,这个方法也不算ok

后端:(通过设置属性setAttribute(),通过getAttribute()拿值,getParameter()方法可以做到)

39、404和500是什么意思
是http协议的状态码
200:ok已经执行成功
404 :找不到url请求的路径,一般是工程名不对或者拼写错误
500 :服务器内部错误,一般是服务器内部代码编写错误,也有可能是抛异常导致

40、写出5种JSTL(通用标准标签库)常用标签
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>

41、Jsp页面把一个元素隐藏的方法
通过使用属性hidden可以将元素隐藏

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

43、怎么判断用户请求时是第一次,如果客户端和服务端断开怎么连到上一次操作
通过session中的isNew()可以判断是否是新用户,可以用cookie来保存信息到客户端,可以连接到上一次操作

44、如果创建servlet实例不用构造方法,怎么创建一个servlet实例
Web容器会自动为servlet写一个无参的构造器,它使用class.forName("").newInstance()反射来创建servlet实例的

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

46、说明一下jsp中<jsp: include page…>和<%@ include file%>的区别;动态导入和静态导入

<jsp: include page…>动态导入
是行为元素、是在请求处理阶段引入的,引入执行页面或servlet所生成的应答文本
先编译,后包含,就是将每个jsp页面都单独转化成html页面,最后再将所有的html页面相加,如果有相同变量不会冲突

<%@ include file="" %> 静态导入
是指令元素
是编译时包含,引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。先包含,后编译
就是将多个jsp一起解析,最后再一起生成html页面,如果有相同变量会冲突

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

48、Servlet是单例还是多例
是单例的,可以提高性能(但是是多线程的,而且线程不安全)

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值