JSP面试知识.docx
- 文档编号:10598524
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:24
- 大小:28.52KB
JSP面试知识.docx
《JSP面试知识.docx》由会员分享,可在线阅读,更多相关《JSP面试知识.docx(24页珍藏版)》请在冰豆网上搜索。
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-generatedcatch
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 面试 知识