JSP面试题.docx

上传人:b****6 文档编号:5151786 上传时间:2022-12-13 格式:DOCX 页数:19 大小:28.57KB
下载 相关 举报
JSP面试题.docx_第1页
第1页 / 共19页
JSP面试题.docx_第2页
第2页 / 共19页
JSP面试题.docx_第3页
第3页 / 共19页
JSP面试题.docx_第4页
第4页 / 共19页
JSP面试题.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

JSP面试题.docx

《JSP面试题.docx》由会员分享,可在线阅读,更多相关《JSP面试题.docx(19页珍藏版)》请在冰豆网上搜索。

JSP面试题.docx

JSP面试题

JSP面试题

1、JSP四种范围是什么?

区别是什么?

Page:

指单单一页jsppage的范围;

Request:

的范围只在一jsp页发出请求到另一页之间,随后这个属性失效;

Session:

范围是用户和服务器连接的那段时间,用户与服务器断开属性就失效; 

Application:

作用范围最大,在服务器一开始执行服务到服务器关闭为止。

可能造成服务器负载过重。

2、JSP有哪些内置对象?

作用和分别是什么?

答:

JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

 request用户端请求,此请求会包含来自GET/POST请求的参数

response网页传回用户端的回应

pageContext网页的属性是在这里管理

session与请求有关的会话期

applicationservlet正在执行的内容

out用来传送回应的输出

configservlet的构架部件

pageJSP网页本身

exception针对错误网页,未捕捉的例外

3、JSP有哪些动作?

作用分别是什么?

答:

JSP共有以下6种基本动作

jsp:

include:

在页面被请求的时候引入一个文件。

jsp:

useBean:

寻找或者实例化一个JavaBean。

jsp:

setProperty:

设置JavaBean的属性。

jsp:

getProperty:

输出某个JavaBean的属性。

jsp:

forward:

把请求转到一个新的页面。

jsp:

plugin:

根据浏览器类型为Java插件生成OBJECT或EMBED标记

4、getAttribute()和setAttribute()的作用是什么?

5、get和post的区别?

Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。

二者主要区别如下:

1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?

”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。

另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。

Post的所有操作对用户来说都是不可见的。

4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。

5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

6、Get是Form的默认方法。

6、写一个JSP页面,里面要包含一个表单、表单包含文本框、列表框、单选按扭、复选框。

7、当前页面是a.jsp,用forward显示b.jsp的内容。

8、什么是taglib?

如何使用?

有哪些方式?

1、问题:

Tag究竟是什么?

如何实现一个Tag?

  一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。

这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。

而这两个类是由jsp容器提供的,无须开发人员自己实现。

换句话说,你只需把实现了业务逻辑的类继承TagSupport或者BodyTagSupport,再做一些特别的工作,你的类就是一个Tag。

并且它自己负责和jsp页面的交互,不用你多操心。

“特别的工作”通常有以下几个步骤:

  1)提供属性的set方法,此后这个属性就可以在jsp页面设置。

以jstl标签为例<c:

outvalue=""/>,这个value就是jsp数据到tag之间的入口。

所以tag里面必须有一个setValue方法,具体的属性可以不叫value。

例如:

setValue(Stringdata){this.data=data;}

  这个“value”的名称是在tld里定义的。

取什么名字都可以,只需tag里提供相应的set方法即可。

  2)处理doStartTag或doEndTag。

这两个方法是TagSupport提供的。

还是以<c:

outvalue=""/>为例,当jsp解析这个标签的时候,在“<”处触发doStartTag事件,在“>”时触发doEndTag事件。

通常在doStartTag里进行逻辑操作,在doEndTag里控制输出。

  3)编写tld文件。

  4)在jsp页面导入tld

  这样,你的jsp页面就可以使用自己的tag了。

  通常你会发现自己绝大多数活动都集中在doStartTag或doEndTag方法里。

确实如此,熟悉一些接口和类之后,写taglib很容易。

正如《jsp设计》的作者所言:

里面的逻辑稍微有点复杂,但毕竟没有火箭上天那么难。

2、一个简单的例子:

OutputTag

packagediegoyun;

importjavax.servlet.jsp.JspException;

importjavax.servlet.jsp.JspWriter;

importjavax.servlet.jsp.tagext.TagSupport;

/**

*@authorchenys

*/

publicclassOutputTagextendsTagSupport

{

privateStringname=null;

publicvoidsetName(Stringname)

{

this.name=name;

}

publicintdoStartTag()throwsJspException{

try

{

JspWriterout=pageContext.getOut();

out.print("Hello!

"+name);

}

catch(Exceptione)

{

thrownewJspException(e);

}

returnEVAL_PAGE;

}

}

  简要说明:

  1、如何输出到jsp页面:

  调用JspWriterJspWriterout=pageContext.getOut();out.print......

  记住这个方法就可以了。

  2、输出后如何作处理

  函数会返回几个值之一。

EVAL_PAGE表示tag已处理完毕,返回jsp页面。

还有几个值,例如EVAL_BODY_AGAIN和EVAL_BODY_INCLUDE等,后面我们会作讨论

  编写tld

<?

xmlversion="1.0"encoding="ISO-8859-1"?

<!

DOCTYPEtaglib

PUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.2//EN"

"

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>1.2</jsp-version>

<short-name>diego</short-name>

<!

--OutputTag-->

<tag>

<name>out</name>

<tag-class>diegoyun.OutputTag</tag-class>

<body-content>empty</body-content>

<attribute>

<name>name</name>

<required>false</required>

<rtexprvalue>false</rtexprvalue>

</attribute>

</tag>

</taglib>

  在WEB-INF下新建tlds文件夹,把这个文件取名为diego.tld,放到tlds文件夹下。

路径应该这样:

WEB-INF\tlds\diego.tld

关于tld的简单说明:

  short-name:

taglib的名称,也称为前缀。

比如<c:

outvalue=""/>里的“c”

  name:

tag的名字。

例如<c:

outvalue=""/>里的"out”,我们的类也取名为out,由于有前缀作区分,不会混淆

  tag-class:

具体的tag类。

带包名

  body-content:

指tag之间的内容。

例如<c:

outvalue="">......</c>起始和关闭标签之间就是body-content。

由于没有处理body-content,所以上面设为empty

  <attribute>里的name:

属性名字。

例如<c:

outvalue=""/>里的value。

名字可任意取,只要类里提供相应的set方法即可。

  required:

是否必填属性。

  rtexprvalue:

是否支持运行时表达式取值。

这是tag的强大功能。

以后我们会讨论。

暂时设为false

  编写jsp页面

<%@pagelanguage="java"%>

<%@tagliburi="/WEB-INF/tlds/diego.tld"prefix="diego"%>

<html>

<body>

TestTag:

<diego:

outname="diegoyun"/>

</body>

</html>

  我的编程环境是eclipse+tomcat.启动服务器,如果一切按照上面步骤的话,就能看到TestTag:

Hello!

diegoyun字样

  最简单的tag就这么出来了。

并不难,是不是?

9、Jsp跳转有几种方式?

分别是什么?

10、JavaBuan的范围?

useBean>标签里有一属性scope,它用来设定JavaBean的范围,它的值只能为Page,request,session,application,不可为其它值。

使用不同的scope属性值,能在不用的范围共享JavaBean.

11、JSP中动态INCLUDE与静态INCLUDE的区别?

答:

动态INCLUDE用jsp:

include动作实现

includepage="included.jsp"flush="true"/>它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

<%@includefile="included.htm"%>

12、两种跳转方式分别是什么?

有什么区别?

答:

有两种,分别为:

includepage="included.jsp"flush="true">

forwardpage="nextpage.jsp"/>

前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。

执行完后还会回来,相当于函数调用。

并且可以带参数.后者完全转向新页面,不会再回来。

相当于goto语句。

JAVA方面

1、Java的类型转换,日期与字符串间的转换。

如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,例如\r

  charc='c';    inti=c;    System.out.println("output:

"+i);

输出:

output:

99;

对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。

shorti=99;charc=(char)i;System.out.println("output:

"+c);

输出:

output:

c;

但根据笔者的经验,byte,short,int三种类型都是整型,因此如果操作整型数据时,最好统一使用int型。

2.2强制类型转换

 将高级变量转换为低级变量时,情况会复杂一些,你可以使用强制类型转换。

即你必须采用下面这种语句格式:

inti=99;byteb=(byte)i;charc=(char)i;floatf=(float)i;

   可以想象,这种转换肯定可能会导致溢出或精度的下降,因此笔者并不推荐使用这种转换。

 2.3包装类过渡类型转换

  在我们讨论其它变量类型之间的相互转换时,我们需要了解一下Java的包装类,所谓包装类,就是可以直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,我们会大量使用这些包装类。

Java共有六个包装类,分别是Boolean、Character、Integer、Long、Float和Double,从字面上我们就可以看出它们分别对应于boolean、char、int、long、float和double。

而String和Date本身就是类。

所以也就不存在什么包装类的概念了。

  在进行简单数据类型之间的转换(自动转换或强制转换)时,我们总是可以利用包装类进行中间过渡。

  一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。

例如:

 例1,当希望把float型转换为double型时:

 floatf1=100.00f;  FloatF1=newfloat(f1);  Doubled1=F1.doubleValue();//F1.doubleValue()为Float类的返回double值型的方法

  当希望把double型转换为int型时:

  doubled1=100.00;    DoubleD1=newDouble(d1);    inti1=D1.intValue();

  当希望把int型转换为double型时,自动转换:

   inti1=200;    doubled1=i1;

   简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。

即:

Boolean(booleanvalue)、Character(charvalue)、Integer(intvalue)、Long(longvalue)、Float(floatvalue)、Double(doublevalue)

而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。

利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。

 3字符串型与其它数据类型的转换

   通过查阅类库中各个类提供的成员方法可以看到,几乎从java.lang.Object类派生的所有类提供了toString()方法,即将该类转换为字符串。

例如:

Characrer,Integer,Float,Double,Boolean,Short等类的toString()方法toString()方法用于将字符、整数、浮点数、双精度数、逻辑数、短整型等类转换为字符串。

如下所示:

inti1=10;floatf1=3.14f;doubled1=3.1415926;IntegerI1=newInteger(i1);//生成Integer类\rFloatF1=newFloat(f1);//生成Float类\rDoubleD1=newDouble(d1);//生成Double类\r//分别调用包装类的toString()方法转换为字符串Stringsi1=I1.toString();Stringsf1=F1.toString();Stringsd1=D1.toString();Sysytem.out.println("si1"+si1);Sysytem.out.println("sf1"+sf1);Sysytem.out.println("sd1"+sd1);

五、将字符型直接做为数值转换为其它数据类型

将字符型变量转换为数值型变量实际上有两种对应关系,在我们在第一部分所说的那种转换中,实际上是将其转换成对应的ASCII码,但是我们有时还需要另一种转换关系,例如,'1'就是指的数值1,而不是其ASCII码,对于这种转换,我们可以使用Character的getNumericValue(charch)方法。

六、Date类与其它数据类型的相互转换

 整型和Date类之间并不存在直接的对应关系,只是你可以使用int型为分别表示年、月、日、时、分、秒,这样就在两者之间建立了一个对应关系,在作这种转换时,你可以使用Date类构造函数的三种形式:

Date(intyear,intmonth,intdate):

以int型表示年、月、日

Date(intyear,intmonth,intdate,inthrs,intmin):

以int型表示年、月、日、时、分

Date(intyear,intmonth,intdate,inthrs,intmin,intsec):

以int型表示年、月、日、时、分、秒\r

在长整型和Date类之间有一个很有趣的对应关系,就是将一个时间表示为距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数。

对于这种对应关系,Date类也有其相应的构造函数:

Date(longdate)

获取Date类中的年、月、日、时、分、秒以及星期你可以使用Date类的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以将其理解为将Date类转换成int。

而Date类的getTime()方法可以得到我们前面所说的一个时间对应的长整型数,与包装类一样,Date类也有一个toString()方法可以将其转换为String类。

有时我们希望得到Date的特定格式,例如20020324,我们可以使用以下方法,首先在文件开始引入,

importjava.text.SimpleDateFormat;importjava.util.*;java.util.Datedate=newjava.util.Date();//如果希望得到YYYYMMDD的格式SimpleDateFormatsy1=newSimpleDateFormat("yyyyMMDD");StringdateFormat=sy1.format(date);//如果希望分开得到年,月,日SimpleDateFormatsy=newSimpleDateFormat("yyyy");SimpleDateFormatsm=newSimpleDateFormat("MM");SimpleDateFormatsd=newSimpleDateFormat("dd");Stringsyear=sy.format(date);Stringsmon=sm.format(date);Stringsday=sd.format(date);

结束语:

当然,笔者的论述只是一人之见,如果希望更多了解有关JAVA数据类型转换的知识,笔者建议参考JAVA类库java.util.*下面的

Integer类\r

Boolean类\r

Character类\r

Float类\r

Double类\r

String类\r

Date类

根据自己的需要,参考不同类的各种成员方法进行数据类型之间的转换。

大家可以参考JAVA的网上类库或下载一份,来更灵活的利用其中的成员方法进行数据类型之间的转换,IP地址:

补充:

 如何将字串String转换成整数int?

A.有两个方法:

1).inti=Integer.parseInt([String]);或i=Integer.parseInt([String],[intradix]);2).inti=Integer.valueOf(my_str).intValue();注:

字串转成Double,Float,Long的方法大同小异.2如何将整数int转换成字串String?

A.有叁种方法:

1.)Strings=String.valueOf(i);2.)Strings=Integer.toString(i);3.)Strings=""+i;注:

Double,Float,Long转成字串的方法大同小异.这是一个例子,说的是JAVA中数据数型的转换.供大家学习

2、连一个数据库。

给一个SQL语句,对返回的结果集进行操作。

packagecom.bluedot.util;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

publicclassConnDB

{

publicstaticStringjdbcDriver="org.gjt.mm.mysql.Driver";

publicstaticStringurl="jdbc:

mysql:

//localhost:

3306/test_user";

publicstaticStringname="root";

publicstaticStringpassword="root";

publicConnDB()

{

super();

}

publicstaticConnectiongetConnection()

{

Connectionconn=null;

try

{

Class.forName(jdbcDriver).newInstance();

conn=DriverManager.getConnection(url,name,password);

}

catch(InstantiationExceptione)

{

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

catch(IllegalAccessExceptione)

{

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

catch(ClassNotFoundExceptione)

{

//TODOAuto-generate

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1