useBeanid=""...scope=""/>来引用javabean.
Iscope的值有哪些,这些值的区别是什么?
不同的jsp页面中引用javabean时,id能否相同,如果能相同,对scope的值有什么要求?
scope可以为:
application|page|session|requeat这个东西就是指定ID的有效范围。
女口果scope=page,
那么useBean的有用范围就只能在page内有效,到了session|application|requeat就无效了。
可以指
定scope属性,使得Bean不只是与当前页面建立单关联。
如果共享了Bean,获取对现有Bean的引用就
很有用,因此jsp;useBean操作表示公当不存在具有相同id和scope的对象时才实例化一个新对象。
这
样就可以节约资源。
二、问答题
1.JSP的内置对象及方法
Request表示HttpServletRequest对象。
它包含了有关浏览器请求的信息,并且提供了几个用于获取
cookie,header,和session数据的有用的方法。
Response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,
头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContextservlet相关的对象的API,并且包装了通用的servletSession表示一个请求的javax.servlet.http.HttpSessionapplicaton表示一个javax.servlet.ServletContext
境的信息
config表示一个javax.servlet.ServletConfig对象。
Page表示从该页面产生的一个servlet实例
2.JSP的常用指令
对象。
它是用于方便存取各种范围的名字空间、相关功能的方法。
对象。
Session可以存贮用户的状态信息
对象。
这有助于查找有关servlet引擎和servlet环
该对象用于存取servlet实例的初始化参数。
<%@page
Ianguage="scriptingLanguage":
主要指定JSPContainer要用什么语言来编译JSP网页。
JSP2.0规
范中指出,目前只可以使用
Java
extends="className":
Java语言,不过未来不排除增加其他语言,如C、C++Perl等等。
默认值为
主要定义此JSP网页产生的Servlet是继承哪个父类
import="importList":
主要定义此JSP网页可以使用哪些JavaAPI
session="true|false":
决定此JSP网页是否可以使用session对象。
默认值为true
buffer="none|sizeinkb":
决定输出流(outputstream)是否有缓冲区。
默认值为8KB的缓冲区
autoFlush="true|false":
决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常
(Exception)。
默认值为tisThreadSafe="true|false"
rue
:
主要是告诉JSPContainer,此JSP网页能处理超过一个以上的请求。
默认值为true,如果此值设为false,SingleThreadModel将会被使用。
SingleThreadModel在Servlet2.4中已经声明不赞成使用(deprecate)
info="text":
主要表示此JSP网页的相关信息errorPage="error_url":
表示如果发生异常错误时,网页会被重新指向那一个URLisErrorPage="true|false":
表示此JSPPage是否为处理异常错误的网页contentType="ctinfo":
表示MIME类型和JSP网页的编码方式
pageEncoding="ctinfo":
表示JSP网页的编码方式
isELIgnored="true|false":
表示是否在此JSP网页中执行或忽略EL表达式。
如果为true时,JSP
Container将忽略EL表达式;反之为false时,EL表达式将会被执行注意:
只有import这个属性可以重复设定,其他则否。
%><%@includefile="filename"%>
<%@taglibprefix="c"uri="http:
//"%>
3.Request对象的主要方法:
setAttribute(Stringname,Object):
设置名字为namel的request的参数值
getAttribute(Stringname):
返回由nam£旨定的属性值getAttributeNames():
返回request对象所有属性的名字集合,结果是一个枚举的实例getCookies():
返回客户端的所有Cookie对象,结果是一个Cookie数组getCharacterEncoding():
返回请求中的字符编码方式getContentLength():
返回请求的Body的长度getHeader(Stringname):
获得HTTP协议定义的文件头信息getHeaders(Stringname):
返回旨定名字的requestHeader的所有值,结果是一个枚举的实例getHeaderNames():
返回所以requestHeader的名字,结果是一个枚举的实例getInputStream():
返回请求的输入流,用于获得请求中的数据getMethod():
获得客户端向服务器端传送数据的方法
getParameter(Stringname):
获得客户端传送给服务器端的有name指定的参数值
getParameterNames():
获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例getParameterValues(Stringname):
获得有name旨定的参数的所有值
getProtocol():
获取客户端向服务器端传送数据所依据的协议名称
getQueryString()getRequestURI()getRemoteAddr()getRemoteHost()
:
获得查询字符串
:
获取发出请求字符串的客户端地址
:
获取客户端的IP地址
:
获取客户端的名字
getSession([Booleancreate]):
返回和请求相关SessiongetServerName():
获取服务器的名字
getServletPath():
获取客户端所请求的脚本文件的路径
getServerPort():
获取服务器的端口号removeAttribute(Stringname):
删除请求中的一个属性
4.jsp有哪些动作?
作用分别是什么?
JSP共有以下6种基本动作
jsp:
include:
在页面被请求的时候引入一个文件。
Jsp:
useBean:
寻找或者实例化一个JavaBean。
Jsp:
setProperty:
设置JavaBean的属性。
Jsp:
getProperty:
输出某个JavaBean的属性。
Jsp:
forward:
把请求转到一个新的页面。
Jsp:
plugin:
使您能插入所需的特定的浏览器的OBJECT或EMBEDS素来指定浏览器运行一个JAVAApplet
所需的插件。
根据浏览器类型为Java插件生成OBJECT或EMBEDS记。
vjsp:
plugintype="bean|applet"code="classFileName"codebase="classFileDirectoryName"
[name="instanceName"]
[archive="URIToArchive,..."]
[align="bottom|top|middle|left|right"]
[height="displayPixels"]
[width="displayPixels"]
[hspace="leftRightPixels"]
[vspace="topBottomPixels"]
[jreversion="JREVersionNumber|1.1"]
[nspluginurl="URLToPlugin"]
[iepluginurl="URLToPlugin"]>
[vjsp:
params>
[vjsp:
paramname="parameterName"
value="{parameterValue|v%=expression%>}"/>]+
v/jsp:
params>]
[vjsp:
fallback>textmessageforuserv/jsp:
fallback>]
v/jsp:
plugin>
举例:
vjsp:
plugintype=appletcode="Molecule.class"codebase="/html">
vjsp:
params>
vjsp:
paramname="molecule"value="molecules/benzene.mol"/>
v/jsp:
params>
vjsp:
fallback>
vp>Unabletoloadappletv/p>
v/jsp:
fallback>
v/jsp:
plugin>
5.过滤器监听servlet三者的区别和实际中主要的应用场景
过滤器(Filter)
作为过滤器,在Servlet作为过滤器使用时,它可以对客户的请求进行过滤处理,当它处理完成后,它会交给下一个过滤器处理,就这样,客户的请求在过滤链里一个个处理,直到请求发送到目标。
举个例子,某个网站里有提交”修改的注册信息"的网页,当用户填写完成修改信息并提交后,服务端在进行真正的处理时需要做两个处理:
客户端的会话是否有效;对提交的数据进行统一的编码,比如GB2312这
两个处理可以在由两个过滤器组成的过滤链里进行处理。
当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功(比如客户端的会话无效),它将把视图派发到指定的错误页面。
可以看出,过滤器就像一扇门,客户端要和服务端的某个目标交互,必须通过这扇门。
过滤器是用于过滤Servlet的请求和响应,过滤器是存在于请求和被请求资源之间的。
过滤器就像当于一个中间件,请求要经过过滤器,然后过滤器才去调用Servlet,Servlet的响应也会被
过滤器截获并作相应的处理。
Filter是一个接口,要写一个自己的Filter就只能实现Filter接口。
Filter也有自己的生命周期,他的生命周期和Servlet比较相似,也是会先调用init()方法,然后再调
用核心的处理过滤的方法doFilter(),这个方法中可定义过滤规则,然后是destory()方法销毁Filter对象。
dofilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)
这个是过滤的核心方法,FilterChain的方法doFilter(ServletRequestrequest,ServletResponse
response)也就是过滤后的请求调用资源的方法,如果不写这个方法,也就不会去调用相应的资源。
Filter的配置
Filter的配置和Servlet相似。
SessionFilter
alan.filter.SessionFilter
SessionFilter
/protected/*
--这里的url-pattern就是要过滤的Servlet的url-pattern-->
request
forward
include
--上面的三个是过滤的范围-->
CharArrayWriter类,是一个将数据保存在字符数组中的输出流,我们可以使用它来构造一个PrintWriter
对象,也就实现了向内存输出。
CharArrayWriter类的toString()和toCharArray()方法就可以取得写入内存中的数据。
注意:
CharArrayWriter类是一个不会真正输出的类,他的write()方法只会将内容写入字符数组,而且
这个字符数组是会自动增长的。
例子:
两个JSP页面,前一个页面用户输入一些信息然后提交,后一个页面显示用户提交的信息。
在提
交信息后,要经过两个过滤器的处理,一个检查用户是否登录,一个把用户的提交信息用GB2312进行重
新编码。
开发一个Filter,这个Filter需要实现Filter接口,Filter接口定义了以下的方法:
destroy()//由Web容器调用,销毁此Filter
init(FilterConfigfilterConfig)///由Web容器调用,初始化此Filter
doFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)〃具体过滤处理代码
对提交信息用GB2312进行重新编码的Filter:
1//====================ProgramDiscription=====================
2//程序名称:
示例14-7:
EncodingFilter.java
3〃程序目的:
学习使用编码过滤器
4//==========================================================
5importjavax.servlet.FilterChain;
6importjavax.servlet.ServletRequest;
7importjavax.servlet.ServletResponse;
8importjava.io.IOException;
9importjavax.servlet.Filter;
10importjavax.servlet.http.HttpServletRequest;
11importjavax.servlet.http.HttpServletResponse;
12importjavax.servlet.ServletException;
13importjavax.servlet.FilterConfig;
15publicclassEncodingFilterimplementsFilter
16{
18privateStringtargetEncoding="gb2312";
19protectedFilterConfigfilterConfig;
21publicvoidinit(FilterConfigconfig)throwsServletException{
22this.filterConfig=config;
23this.targetEncoding=config.getInitParameter("encoding");
24}
27publicvoiddoFilter(ServletRequestsrequest,Servl