Javaweb常见面试题分析及答案解析

  1. Servlet中forward()与redirect()的区别是什么?

redirect() 会丢失request的所有信息  它属于页面级的重定向,仅仅让你的浏览器重新访问一个新的url,作为浏览者,能很明显的看到浏览器url地址的变化,这和点击了一个普通的超链接的后果是一样的。

而 RequestDispatcher 的forward() 方法,是转发,需要request 和 response最为参数,就是将用户的请求,连同请求信息等内容,一起转发到服务器的另外一个servlet去处理,它不会丢失request信息。这一过程是服务器内部完成的,作为访问者,是感觉不到了,或者说是透明的,因此访客浏览器的url 是不会发生变化的。

forward是转发,redirect是跳转。相同点都是为了两个组件之间的相互调用。forward的运行原理是服务器端内部的调用,所以它不需要通过浏览器来请求,所url地址不会改变,request的作用范围也没有中断过,它的作用域仍然有效。而redirect是重定向,是服务器发送消息告诉浏览器,让浏览器重新向新的地址请求,所以,url地址是会改变的,由于重新请求了,因而request也中断了,重新请求了,它的作用范围也失效了,放在request里面的信息也随之而清空了。

  1. 列举JSP的内置对象,同一应用中页面有哪些方法?

九大内置对象:

1.输出输入对象:request对象、response对象、out对象

2.通信控制对象:pageContext对象、session对象、application对象

3.Servlet对象:page对象、config对象

4.错误处理对象:exception对象

① 、直接在URL请求后添加  如:

< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a> 特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码: response.sendRedirect("thexuan.jsp?action=transparams&detail=directe") ,可用request.getParameter(name)取得参数

②、jsp:param  它可以实现主页面向包含页面传递参数,如下:

  1. < jsp:include page="Relative URL">  
  2.    < jsp:param name="param name" value="paramvalue" />  
  3. < /jsp:include >  

还可以实现在使用jsp:forward动作做页面跳转时传递参数,如下:

  1. < jsp:forward page="Relative URL">  
  2.    < jsp:param name="paramname" value="paramvalue" />  
  3. < /jsp:forward >    

通过这种方式和一般的表单参数一样的,也可以通过request.getParameter(name)取得参数  

3、设置session和request通过显示的把参数放置到session和request中,以达到传递参数的目的 session.setAttribute(name,value); request.setAttribute(name,value)   取参数:  value=(value className)session.getAttribute(name);   

value=(value className)request.getAttribute(name);   

大家肯定已经注意到了,在取参数的时候,做了类型转换,这是因为放置在session和

request中的对象的属性被看作 java.lang.Object类型的了,如果不转换,在将直付给value时会报classcastexception异常。

  1. JSP如何获取HTML FORM中的数据?

html页面的表单

  1. <form action="myjsp.jsp" method="post">  
  2.   你要输入的数据:<input type="text" name="data ">  
  3. </form>  

在表单中,action动作和method合起来表示把数据交给mujsp.jsp页面去处理,

在jsp页面呢,用

<% request.getParmerter("data");%>获取html页面传递过来的数据,

要注意的是,有时候连个页面之间的传递会出现中文乱码现象,

解决乱码的做法是:在jsp页面加上

  1. <% request.setCharacterEncoding("GB2312"); %> 

这样就不用担心编码问题了

另一种:是form表单提交方式获取表单数据。

  1. JSP中redirect和forward的区别是什么?(类似1

forward是使用同一个request,也就是说用forward传递后可以在页面中获取request

中的变量或属性。

redirect是新建一个request用新建的request传递。

比如有三个jsp文件,第一个里面有<input name="name"> 提交到第二个页面进行

处理,若想在第三个页面中获取name的值就要用forward。

  1. JSP中对象的传递有哪些方法?

request,session,application,cookie

区别:page的生命周期最短,依次是request,session,application.他们保存在服务器端.

cookie是保存在客户端的,用来解决HTTP无状态问题.

范围不同,最小的是page然后request,session,application范围依次增大

  1. Http协议中返回状态200、404、302、301、500、502各式什么含义?

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。

301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或

HEAD 请求的响应)时,会自动将请求者转到新位置。

302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置

来进行以后的请求。

404 (未找到) 服务器找不到请求的网页。

500 (服务器内部错误) 服务器遇到错误,无法完成请求。

502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

  1. 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理

实现sessionid的保存和传输。是cookie,将http的请求变得有状态。session的实现是web服务

器的事情,不过很显然默认是利用会话cookie,也就是存放在浏览器内存里的那种cookie来实现的,在cookie里只是存放了SessionID,然后在服务器上建立了一张表,对应客户端的SessionID。这张表是存放在服务器上的进程中的,也就是服务器的内存里,也就是Application里。当客户端请求服务器的时候,如果服务器发现这是一个新的请求,就会分配给他一个SessionID,也就是在浏览器写入一个sessionID的cookie。你可以试一下,在你请求过一次服务器之后,在服务器遍历客户端所有的cookie,就会发现这个叫做SessionID的cookie。

但是,这只是session实现sessionid状态记录的一种方法,如果客户端浏览器禁用了cookie,很多

网站还是可以正常登录,还是可以正确识别浏览器的身份,这就是通过url重写的方式,每次交互都携带sessionid的信息。

还有一种方式,就是表单重写,有些服务器会在表单中增加隐藏域,来回传递sessionid。

所以在了解了这个session的原理之后我们可以自己来造一个自己的session,可以使用cookie,也

可以使用url重写方式,也可以使用表单方式。

session的结束问题

还有知道了session的原理就会明白一个session会话如何结束,除非服务器端可以清除一个session

会话,客户端是没有能力清除session的,关闭浏览器的时候并不能够结束当前的会话(忽略浏览器关闭事件),在不依赖于cookie的session中最明显,你可以记下你的sessionID那串字符串,关闭浏览器,打开,把sessionID自己替换,你就可以恢复刚才的会话了。所谓的20分钟session超时,是服务器每隔20分钟对于不活动的session清除而已。

还有要指出的是依赖于cookie的session是存放在浏览器内存中的,所以一个浏览器的进程就会产

生一个session,可以通过任务管理器查看进程,对于IE来说,只有双击桌面上的浏览器快捷方式才能新启动一个进程的,当然其他类似启动iexplorer.exe的行为也可以

到这里你会发现在依赖于cookie的session中,是需要浏览器的支持的!

对于js的ajax请求,确切的说是xmlhttp这个组件发送的http请求,虽然是你使用js的代码自己制

造的,但是依然是借助于浏览器发送的,所以可以获得session。

  1. 请列举几种重复提交的方式?

F5重复提交、浏览器前进和后退按钮重复提交、使用frameset框架右键的此框架重新

载入:1、使用遮罩,让用户提交完成之前等待。提交成功后执行页面重定向(redirect)。转到提交成功信息页面;

  1. XML是什么?针对它常用的工具包是什么?

XML全称为Extensible Markup Language,意思是可扩展的标记语言。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的,常用在保存关系型数据和配置文件。针对它常用的工具包是DOM4J

  1. 在web开发中,将GBK字符串,以utf-8的格式进行转换输出

new String("string".getBytes("GBK"),"UTF-8");

  1. 有一个长字符串,它的内部包含多个子字符串、子字符串之间用空格隔离,给出算法:如何去掉里面重复的字符串
  2. java递归调用输出一个目录下的所有子目录及文件名称
  3. public void fun(File file){  
  4.   File[] files = file.listFiles();  
  5.   for(File _file : files){  
  6.    if(_file.isDirectory()){  
  7.     fun2(_file);  
  8.    }else{  
  9.     System.out.println(_file);  
  10.    }  
  11.   }  
  12.  }  
  1. 一个月的图片的网站,用户每检索一次、阅读一张、下载一张图片就会扣除相应的签署,如果让你来设计计费模板、采用何种方式最能节省各方面的资源,谈谈想法!
  2. XML文档定义有几种形式?他们之间有何本质区别?解析XML文档有几种方式?

XML文档定义有几种形式:dtd文档类型定义和SchemaXML模式

本质区别:

XML Schema 和DTD都用于文档验证

XML Schema 是内容开放模型,可扩展,功能性强,而DTD可扩展性差。

XML Schema 支持丰富的数据类型,而 DTD不支持元素的数据类型,对属性的类型定义也很有限。

XML Schema 支持命名空间机制,而DTD不支持。

XML Schema 可针对不同情况对整个XML 文档或文档局部进行验证;而 DTD缺乏这种灵活性。

XML Schema 完全遵循XML规范,符合XML语法,可以和DOM结合使用,功能强大;而DTD 语法本身有自身的语法和要求,难以学习。

解析XML文档有几种方式:

DOM:所有内容都封装成对象,并且装入内存中,如果是大本文处理的时候,性能下降。可以做增删改查等一系列操作。

Sax:事件驱动.在读取的过程中.将遇到的文档的各个部分的内容.拆分各个事件.当我们遇到什么事件的时候,可以选择做相应事.sax只能做查询。

  1. XML的解析有哪几种方式,并用其中一种写出解析XML实例

XML的解析方式有很多种,目前常用的主要有:SAX解析和DOM解析

1、SAX解析是基于事件驱动的解析,处理的优点类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。另一方面,由于应用程序没有以任何方式存储数据,所以sax解析不能对文档进行增删改的操作。

2、DOM 解析是的基于文档驱动的解析,类似树的处理,具有以下几个特点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程,因此不适合解析大文档。

  1. getParameter与getAttribute的区别?

HttpServletRequest类既有getAttribute()方法,也有getParameter()方法,这两个方法有以下区别:

(1)getAttribute是返回对象,必须先存再取才能取到值,否则取不到,即在域空间中获取值;getParameter返回字符串,一般用在两个Web组件之间为链接关系时,类似post,get等方式传入的数据,在被链接的组件中通过getParameter()方法来获得请求参数,即在请求的过程中获取值。

(2)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法。

  1. 你在项目中用到了XML技术的哪些方面?如何实现的?请写出常用的XML操作API函数
  2. JSP中动态INCLUDE与静态的INCLUDE的区别

动态INCLUDE用jsp:include动作实现
<jsp:include page="included.jsp" flush="true" />
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
<%@ include file="included.htm" %>
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

  1. iframe,Frame中Session丢失的解决方法

在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的。因此,网上可以找到很多相关的文章,如果网站可以采用设置Web.Config中的配置:<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" 
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" 
timeout="40" /> 
把cookieless="false"改成"true"就可以了。但也同样有个小问题,就是如果页面中采用Javascript的window.location.href=''这样的方式来重定向的话,系统会认为这是另一个新的请求,产生一个新的SessionId,导致原Session同样的丢失。所以对于重定向,还是使用Response.Redirect()为好。 

除了Ifrmae有丢Session问题外,frameset也有同样的问题。Frameset的问题更不移定,是有时会丢,有时不会丢,这更认人头痛,在网上找到了一个方法,在页面page_onload里添加一语句: 
Response.AddHeader("P3P","CP=CAO PSA OUR")

IE框架中访问不同域的网页不能带入COOKIE————是IE浏览器的一个BUG? 
偶然中发现一个IE浏览器的问题: 
站点aa.com的页面a.aspx中存在一个iframe,iframe的src为站点bb.com的b.aspx。b.aspx设置了一个COOKIE(不管临时保存还是长期保存),然后刷新aa.com/a.aspx,bb.com/b.aspx也会被刷新,这时候会发现第二次向bb.com/b.aspx的请求里面并没有带入第一次设置的COOKIE。 
更确切地说:IE浏览器丢掉了框架中不同域的COOKIE。 

查看浏览器的隐私选项,默认是“中”。现在把隐私的等级修改成“低”,再次做上面的测试,然后发现框架中的COOKIE可以被带入了。 
从这个现象来看,应该是IE出于安全考虑而做了限制。但是!!!处于不同的两个域的的页面,应该被看成打开了两个互不相关的浏览器窗口,大家各自设置自己的COOKIE,各自带入到下次请求中,只要互不影响,不应该受到限制。 
恩,那么,为什么要限制呢?看来还是微软的程序员对自己浏览器的安全没什么信心,担心同一浏览器窗口不同域的情况下,黑客仍可能获取另一域的COOKIE,所以干脆把其中一个域的COOKIE干掉!!!人家FireFox为什么就没这种限制? 

IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存在此问题了。

解决方法: 
很简单,在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明,步骤如下(Session variables are lost if you use FRAMESET in Internet Explorer 6): 
1.打开IIS管理器 inetmgr 
2.选择被嵌入iframe源站点或者目录,右键点击打开属性框 
3.切换到HTTP头 
4.添加 
5.自定义HTTP头名: P3P 
6.自定义HTTP头值: CP="CAO PSA OUR" 
7.关闭属性框退出,即刻生效 

  • 30
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JavaWeb面试题通常涉及JavaEE规范和相关技术的问题。以下是一些常见JavaWeb面试题及其答案: 1. 什么是Servlet规范? Servlet规范是JavaEE规范的一部分,主要定义了用于扩展Java作为Web服务的功能的接口和类。它规范了Servlet接口、Filter接口、Listener接口、ServletRequest接口、ServletResponse接口等。Servlet规范由servlet-api.jar和jsp-api.jar这两个Jar文件提供支持。 2. 什么是Servlet和JSP的区别? Servlet和JSP都是JavaWeb开发中的技术,用于处理Web请求和生成动态内容。主要区别在于Servlet是基于Java的类,用于处理请求和生成响应,而JSP是一种将Java代码嵌入HTML中的技术,用于生成动态网页。Servlet可以在代码中直接编写Java逻辑,而JSP则允许在HTML页面中嵌入Java代码。 3. JavaWeb中的三大组件是什么? JavaWeb中的三大组件是Servlet、Filter和Listener。Servlet用于处理Web请求和生成响应,Filter用于对请求和响应进行过滤和修改,Listener用于监听Web应用程序的生命周期事件。这三个组件共同构成了JavaWeb应用的核心。 4. 在JSP中,有哪些无需创建就可以使用的对象? 在JSP中,无需创建就可以使用的对象有: - out对象:用于向客户端输出数据。 - request对象:封装了来自客户端的请求信息。 - response对象:封装了服务器的响应信息。 - exception对象:封装了JSP程序执行过程中的异常和错误信息。 - config对象:封装了应用程序的配置信息。 - page对象:指向了当前JSP程序本身。 - session对象:用于保存会话信息。 - application对象:代表了当前应用程序的上下文,可在不同用户之间共享信息。 - pageContext对象:提供了对JSP页面所有对象以及命名空间的访问。 希望以上内容能对你的面试准备有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Java基础面试题JavaWeb专题)](https://blog.csdn.net/qq_40695336/article/details/130597300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [java面试题Web篇](https://blog.csdn.net/weixin_52489114/article/details/122982656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵然间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值