Servlet&JSP&Struts面试50问

1、三个Statment区别,用法

Statment,基本的;PreparedStatement是可编译的,提高效率,callablestatment,存储过程

 

2、Cookie是什么?Cookie 与session 的区别?如何使用Cookie?

答:临时cookie存在于内存中,(公话),长时cookic存在于硬盘上长时coolkie和临时cookie 路径问题。session为短对话,Cookie可以设置任意时间的有效期。

Cookie ck=new Cookie(“name”,”sist”);

写入:response.addCookie(ck);

读取:Cookie[]ck=request.getCookies();

     If(ck==null)

for(int a=0;a<ck.length;a++)

{

If(“name”.equals(ck[a].getName()))

  Out.print(ck[a].getValue());

}

 

3、servlet调试方式几种方法

答:使用打印语句,使用TOMCAT日志,返回错误页面,使用IDE集成,重起服务器,直接查看HTML源代码,分别处理请求和响应数据。

 

4、Get请求和Post请求区别

答:a、Post是通过Http中的Post机制将表单中的数据提交道Action所制定的程序Get方法是通过Url请求来提交表单数据的。

b.Get适用于传输数据量小于1K数据,执行效率高。Post传输数据量较大,但也有限量。

 

5、描述servlet的生命周期,谁来控制servlet的生命周期,servlet生命周期在J2EE规范中是如何来定义的?

答: Servlet 的生命周期始于将它装入 Web 服务器的内存时,并在终止或重新装入 Servlet 时结束。包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet 接口的 init,  service 和 destroy 方法表达。服务器实例化一个servlet对象,容器运行其init方法,请求到达时运行其service方法,service方法根据请求的类型调用(doGet,doPost)方法,当服务器决定将实例销毁时调用其destory方法

 

6、Servlet和Jsp的区别?

答:Servlet是直接执行的文件Jsp是要被通过编译形成Servlet后才执行。JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

 

7、JSP构架模型

Model1:纯jsp 维护难,代码可复用性差

Model2:jsp+javabean 在jsp中使用usebean标签,代码在jsp中本质同Model1

Mvc:jsp+servlet+javabean

 

8、四大共享范围及区别

答:a、page 当前页面。

b、session 同一个网站内。

c、request 从上一页到下一个页面。

d、application 同一个网站内。

生命周期不同request产生响应时生命周期结束,session在web.xml中设置生命周期时间、手动清除web容器重启生命周期结束。Webapplication容器重启、手动清除

 

 

9、MVC——如何理解MVC

答:  MVC是Model-View-Controller的简写。

"Model" 代表的是应用的业务逻辑 (通过JavaBean,EJB组件实现),

"View" 是应用的表示面(由JSP页面产生),

"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

 

10、JSP生命周期

 

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

 

12、Forword和SendRedirect区别

答:  前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;

后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。但在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

 

13、如何设置/取得Bean 中的属性值?

答:设置属性值<jsp:setPropertyname=”haha”,property=”haha的属性” value=”变量值”/>

< jsp:setPropertyname=”haha”,property=”*” />获取从上一个表单中提交过来的,与Bean中变量名字相同的所有属性.

取得属性值:<jsp:getPropertyname=”haha” property=”bean的属性”/>

相当于:<%=getA()%>

 

14、JavaBean的使用:

<jsp:useBean id=”name” class=”sist.md5” scope=”page”/>或者<jsp:useBean id=”name”class=”sist.md5”scope=”page”></jsp:useBean>

 

15、实现页面跳转的两种方法:

答:a、<jsp:forwardpage=”for2.jsp”/>   b、<%response.sendRedirect(“for2.jsp”);%>

 

16、include指令标签:

<%@include file=”inc1.jsp”%> 简单的代码复制。

include动作标签:<jsp:include page =”inc2.jsp”>获取inc2.jsp的执行结果。

 

17、页面之间的值传递:

答:a、设置Session 变量:session.setAttribute(“name”,”sist”);

获取Session 变量:session.getAttribute(“name”);

b、地址方式传递:show.jsp?id=变量值

 

18、获取session ID: <%=session.getId()%>;判断session是否有效:session.isNew();

 

19、什么是servlet?什么是servlet容器?什么是JSP Page?

在web容器中运行的服务器端JAVA程序,主要用于响应HTTP请求。Servlet一般用于MVC中的控制器部分。用来管理servlet生命周期的应用程序如(tomcat)。java server page 是servlet的扩展,强调web页面表达,编译后是一个类servlet。

 

20、JSP标签

动作标签:jsp:include jsp:forword  jsp:usebean  jsp:set/get Property

指令标签:<%@page……%>  <%@include…..%>  <%@taglib…..%>

 

21、servlet中如何

A、从HTML表单中获得参数

request.getParameterNames();enumer;

request.getParameter(); String

b、如何获得请求头部的信息

Enumeration enumer=request.getHeaderNames();

While(enumer. HasMoreElements())

{

String header= enumer.next();

String result=request.getHeader(header);

Out.print(result);

}

C、如何获得客户cookie的信息

request.getCookies();array[]

d、如何设置response的头部信息

response.setHeader();

e、如何设置响应的content type

response.setContentType(“text/htmlcharset=utf-8”);

f、如何获得I/O流、text流、二进制流

g、如何从当前的servlet重定向到其他的URL

response.sendRedirect(“url”)

RequstDispatcher rd=request.getRequstDispatcher(“url”)

Rd.forword(request,response);

h如何向客户端写cookie

Cookie cookie=new Cookie(“object”,”jklj”);

Cookie.setMaxAge(时间);

Response.addCookie(cookie);

 

22、如何创建Request Dispatcher对象,如何将请求转发给其它的web资源(包含其它的web资源),描述如何利用request来存状态,以及与其它保存状态方法有什么区别

RequstDispatcher rd=request.getRequstDispatcher(“url”)

Rd.forword(request,response);

Request.setAttribute(“object”,”内容”);

一旦产生响应request的生命周期就结束了

 

23、如何在web.xml中配置servlet定义

<servlet>

<servlet-name>name</servlet-name>

<servlet-class>package</servlet-class>

</servlet>

映射

<servlet-mapping>

<servlet-name>name</servlet-name>

<url-patten>/patten</url-patten>

</servlet-mapping>

 

24、获得ServletConfig对象

ServletConfig sc=getServletConfig();

 

25、如何获得servletContext对象

servletContext sc=getservletContext();

 

26、<html><body>

<ahref=”/servlet/HelloServlet”>POST</a>

</body></html>

调用servlet时采用了doPost、doGet、doForm、doHref中的哪个方法

doGet方法

 

27、说明如下的web的资源应该放在web容器中的什么目录下,静态页面JSP、servlet class、web.xml、Tag libraries、JAR File、java class以及需要保护的资源文件

tomcat容器  web.xml, Tag libraries:\webapps\工程名\WEB-INF

servlet,javaclass: \webapps\工程名\WEB-INF\classes \

jar: \webapps\工程名\WEB-INF\lib\

 

28、JSP的常用指令
<%@page language="java"contenType="text/html;charset=gb2312" session="true"buffer="64kb" autoFlush="true"isThreadSafe="true" info="text"errorPage="error.jsp" isErrorPage="true"isELIgnored="true" pageEncoding="gb2312"import="java.sql.*"%>
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)
<%@include file="filename"%>
<%@taglib prefix="c"uri="http://......"%>

 

29、四种会话跟踪技术
1. Cookie:服务器在一个应答首部传递给浏览器的名称/值对。浏览器保存的时间由cookie的过期时间属性来指定。当浏览器向某个服务器发送一个请求 时,它会检查其保存的cookie,并在请求首部中包含从同一台服务器上接收到的所有cookie。     
2.Session tracking:在浏览器和服务器之间不直接传送所有的状态信息,而只是传递表示符(session ID)。浏览器发送sessionID,服务器跟踪与该会话相关联的所有信息。传递sessionID可以通过cookie和URL复写技术,大部分容器 都支持这两种技术。服务器无法分辨用户是否关闭了浏览器,因此关闭浏览器意味着与先前的会话关联的所有会话数据都保留在服务器上,直到会话超时,服务器销毁会话对像。&reg;跟踪同一会话中的请求的会话ID可以有多种方法,主要有cookie和url复写。
3.URL复写:把会话ID编码在URL中。          例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980这样,即使浏览器不支 持cookie,也能够实现会话跟踪。对于URL复写,服务器从请求的URI中提取出会话ID,并把该请求与相应的会话关联起来,然后在访问会话数据的时 候,JSP页面所进行的处理方式就和使用cookie跟踪会话id时所使用的方式完全相同。所以sesssion的实现要依靠cookie或URL复写技 术。如果想为不支持cookie的浏览器提供会话跟踪,就必须使用<c:url>行为对应用程序中的所有URL进行复写。这意味着应用程序中 的所有页面(至少是那些带有对其他页面引用的页面)都必须是JSP页面,这样页面引用才能以动态方式进行编码,如果遗漏了一个ur,那么服务就会失去对会 话的跟踪。
4.隐藏表单域:隐藏表单域是将会话ID添加到HTML的隐藏表单中(类型为hidden的input)。重定向和转发可以使用两种方法来调用另一个页 面,重定向和转发。i)                转发:<jsp:forward page=”userInfo.jsp”/>转发,JSP容器将使用一个内部方法来调用目标页面,新的页面继续处理同一个请求,而浏览器不会知道这个过程涉及到了多个页面。浏览器URL会保持不变。ii)               重定向:<c:redirect url=”userInfo.jsp”/>重定向与转发不同,重定向时,第一个页面会通知浏览器发送一个新的目标页面的请求。浏览器所显示的URL 会变成新页面的URL。重定向的速度比转发要慢,因为浏览器得发出一个新的请求。同时,由于重定向产生了一个新的请求,所以经过一次重定向之后请求作用域内的对象将无法再使用了。

 

30、简述Struts框架的初始化流程。

对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet

ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。

在Strutsframework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。

其中,Action扮演了真正的控制逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。

 

31、简Struts框架响应客户请求的工作流程

答:1.  检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。

2.  如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。

       3.  根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。

4.  如果ActionForm的validate()方法返回null或返回一个不包含ActionMessge的ActionErrors对象,就表示表单验证成功。

5. ActionServlet根据AtionMapping实例包含的映射信息决定将请求转发给哪个Action。如果应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。

6.  Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。

7. ActionForward对象指向的JSP组件生成动态页面,返回给客户。

对于以上流程的步骤(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法。

 

32、Struts框架的数据验证可分为几种类型?

表单验证(由ActionFormBean处理):如果用户没有在表单中输入姓名,就提交表单,将生成表单验证错误

业务逻辑验证(由Action处理):如果用户在表单中输入的姓名为“Monster”,按照本应用的业务规则,不允许向“Monster”打招呼,因此将生成业务逻辑错误。

 

33、简述Form Bean的表单验证流程。

答:1、当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionForm Bean中。

2、接下来Struts框架会调用ActionForm Bean的validate()方法进行表单验证。

3、如果validate()方法返回的ActionErrors 对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。

4、如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过<html:errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。

 

34、简单叙述ActionForm Bean的作用

答:1、ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。

2、Struts框架利用ActionForm Bean来进行View组件和Controller组件之间表单数据的传递。

3、Struts框架把View组件接受到的用户输入的表单数据保存在ActionForm Bean中,把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改,JSP文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。

 

35、叙述ActionForm执行步骤

答:(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射

(2)根据name属性,查找form bean的配置信息

(3)检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。

(4)假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。

(5)否则,就重新构建一个form bean的实例

(6)form bean的reset()方法备调用

(7)调用对应的setter方法,对状态属性赋值

(8)如果validatede的属性被设置为true,那么就调用formbean的validate()方法。

(9)如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。

 

36、在下面的标签中哪些是struts标签

A、<html:form>    B、<html:text>      C、<html:errors>   D、<html:message>

答案:A B C

 

37、Forward与Global-Forward的区别

答:Forward是根据Action return的值找到对应的JSP页。当多个Action共同return同一个值时,可将这个Forward元素写在Global-Forward中。

 

38、问题:在Struts应用的视图中包含哪些组件?

选项:(A) JSP(B)Servlet(C) ActionServlet   (D) Action      (E) 代表业务逻辑或业务数据的JavaBean (F) EJB   (G) 客户化标签

答案:A,G

 

39、问题:在Struts应用的控制器中包含哪些组件?

选项:(A) JSP(B)Servlet(C) ActionServlet   (D) Action      (E)代表业务逻辑或业务数据的JavaBean  (F) EJB   (G) 客户化标签

答案:B,C,D

 

40、在struts配置文件中action元素包含哪些属性和子元素?

答:path属性:指定请求访问Action的路径

type属性:指定Action的完整类名

name属性:指定需要传递给Action的ActionForm Bean

scope属性:指定ActionForm Bean的存放范围

validate属性:指定是否执行表单验证

input属性:指定当表单验证失败时的转发路径。

<action>元素还包含一个<forward>子元素,它定义了一个请求转发路径。

 

41、问题:在Struts应用的模型中包含哪些组件?  

选项:(A) JSP(B)Servlet(C) ActionServlet   (D) Action      (E) 代表业务逻辑或业务数据的JavaBean (F) EJB   (G) 客户化标签

答案:F

 

42、问题: struts框架中,关于FormBean,下列说法正确的是:       答案:A
   A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action
   B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证
   C 用户每次提交表单,都会产生一个新的FormBean实例
   D 动态FormBean不能进行验证操作

 

43、问题:struts框架中,在一个Action的配置信息中,name属性指的是:     答案:C
   A 当前action实例的名字
   B 当前action所在的类的名字
   C 该Action中调用的FormBean的实例的名字
   D 该Action中调用的FormBean的类的所在包名

 

44、问题:关于struts项目中的类与MVC模式的对应关系,说法错误的是?答案:D
   A Jsp文件实现视图View的功能
   B ActionServlet这一个类是整个struts项目的控制器
   C ActionForm、Action都属于Model部分
   D 一个struts项目只能有一个Servlet

 

45、问题:以下哪些说法是正确的?答案:C

选项:(A)每个HTTP请求对应一个单独的ActionServlet实例

(B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。

(C)每个子应用对应一个单独的RequestProcessor实例

(D)每个子应用对应一个单独的web.xml文件

 

46、ActionForm Bean对象是由谁创建的?答案:C

选项:(A)<html:form>标签处理类 (B)ActionServlet (C) RequestProcessor (D) Action

 

47、对于struts框架的描述,错误的是?        答案:C
   A Struts中无法完成上传功能
   B Struts框架基于MVC模式
   C Struts框架容易引起流程复杂、结构不清晰等问题
   D Struts可以有效地降低项目的类文件数目

 

48、问题:以下代码定义了一个变量,如何输出这个变量的值?

<bean:define id="stringBean"value=“helloWorld“/>

选项:(A)<bean:writename=“stringBean"/>

(B) <bean:writename=“helloWorld"/>

(C)<%= stringBean%>

(D)<% StringmyBean=(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);%>  <%=myBean%>

答案: A,D

 

49、问题:把静态文本放在ResourceBundle中,而不是直接在JSP文件中包含这些静态文本,有什么优点?

答案: 提高可维护性  提高可重用性  支持国际化

 

50、问题:关于struts项目中的类与MVC模式的对应关系,说法错误的是?答案:D
   A Jsp文件实现视图View的功能
   B ActionServlet这一个类是整个struts项目的控制器
   C ActionForm、Action都属于Model部分
   D 一个struts项目只能有一个Servlet

 

 

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值