Jsp、Servlet面试题及答案_第1页
Jsp、Servlet面试题及答案_第2页
Jsp、Servlet面试题及答案_第3页
Jsp、Servlet面试题及答案_第4页
Jsp、Servlet面试题及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、简答题1.forward和redirect的区别forward是效劳器请求资源,效劳器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道效劳器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect就是效劳端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚刚请求的所有参数重新请求,所以session,request参数都可以获取。2.说出Servlet的生命周期,并说出Servlet和CGI的区别Servlet被效劳器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法〔doGet,doPost〕等,当效劳器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于效劳器进程中,它通过多线程方式运行其service方法,一个实例可以效劳于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,效劳完成后就销毁,所以效率上低于servlet。3.JSP中动态INCLUDE与静态INCLUDE的区别?动态INCLUDE用jsp:include动作实现<jsp:includepage="included.jsp"flush="true"/>它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,并不会检查所含文件的变化,适用于包含静态页面<%@includefile="included.htm"%>4.什么情况下调用doGet()和doPost()?Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。5.servlet的生命周期web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法,根据请求的不同调用不同的do***()方法。结束效劳,web容器调用servlet的destroy()方法。6.如何现实servlet的单线程模式<%@pageisThreadSafe="false"%>7.页面间对象传递的方法request,session,application,cookie等8.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?JSP技术构建在Servlet技术之上,是Servlet技术的扩展,本质上是Servlet的简易方式,JSP能做到的,Servlet都能做到,但是它们却各有所长。JSP更强调应用的外表表达。JSP编译后是"类servlet"。Servlet比拟适合作为控制类组件,比方视图控制器等。另外,Servlet还可以作为过滤器、监听器等。Servlet不仅可以动态生成HTML内容,还可以动态生成图形。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里别离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。总而言之,Servlet在工程中作为控制类的组件,并且处理一些后台业务,JSP那么作为显示组件。JSP侧重于视图,Servlet主要用于控制逻辑。9.四种会话跟踪技术会话作用域ServletsJSP页面描述page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的Javaservlet类〔可以带有任何的include指令,但是没有include动作〕表示。这既包括servlet又包括被编译成servlet的JSP页面request是是代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件〔由于forward指令和include动作的关系〕session是是代表与用于某个Web客户机的一个用户体验相关的对象和属性。一个Web会话可以也经常会跨越多个客户机请求application是是代表与整个Web应用程序相关的对象和属性。这实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域10.Servlet执行时一般实现哪几个方法?Publicvoidinit(ServletConfigconfig)publicServletConfiggetServletConfig()publicStringgetServletInfo()publicvoidservice(ServletRequestrequest,ServletResponseresponse)publicvoiddestroy()11.url重写有几种方式?由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回效劳器。经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为:///xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764另一种是作为查询字符串附加在URL后面,表现形式为:///xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764这两种方式对于用户来说是没有区别的,只是效劳器在解析的时候处理的方式不同,采用第一种方式也有利于把sessionid的信息和正常程序参数区分开来。为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个sessionid。12.在jsp中引用使用<jsp:useBean

id="

"

...scope="

"/>来引用javabean.Ⅰscope的值有哪些,这些值的区别是什么?不同的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表示ServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header,和session数据的有用的方法。Response表示ServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法〔如cookies,头信息等〕out对象是的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContext表示一个ontext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。Session表示一个请求的对象。Session可以存贮用户的状态信息applicaton表示一个javax.servlet.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息config表示一个对象。该对象用于存取servlet实例的初始化参数。Page表示从该页面产生的一个servlet实例2.JSP的常用指令<%@pagelanguage="scriptingLanguage":主要指定JSPContainer要用什么语言来编译JSP网页。JSP2.0标准中指出,目前只可以使用Java语言,不过未来不排除增加其他语言,如C、C++、Perl等等。默认值为Java

extends="className":主要定义此JSP网页产生的Servlet是继承哪个父类

import="importList":主要定义此JSP网页可以使用哪些JavaAPI

session="true|false":决定此JSP网页是否可以使用session对象。默认值为true

buffer="none|sizeinkb":决定输出流(outputstream)是否有缓冲区。默认值为8KB的缓冲区

autoFlush="true|false":决定输出流的缓冲区是否要自动去除,缓冲区满了会产生异常(Exception)。默认值为true

isThreadSafe="true|false":主要是告诉JSPContainer,此JSP网页能处理超过一个以上的请求。默认值为true,如果此值设为false,SingleThreadModel将会被使用。SingleThreadModel在Servlet2.4中已经声明不赞成使用(deprecate)

info="text":主要表示此JSP网页的相关信息

errorPage="error_url":表示如果发生异常错误时,网页会被重新指向那一个URL

isErrorPage="true|false":表示此JSPPage是否为处理异常错误的网页

contentType="ctinfo":表示MIME类型和JSP网页的编码方式

pageEncoding="ctinfo":表示JSP网页的编码方式

isELIgnored="true|false":表示是否在此JSP网页中执行或忽略EL表达式。如果为true时,JSPContainer将忽略EL表达式;反之为false时,EL表达式将会被执行注意:只有import这个属性可以重复设定,其他那么否。%><%@includefile="filename"%><%@taglibprefix="c"uri="://……"%>3.Request对象的主要方法:setAttribute(Stringname,Object):设置名字为name的request的参数值getAttribute(Stringname):返回由name指定的属性值getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组getCharacterEncoding():返回请求中的字符编码方式getContentLength():返回请求的Body的长度getHeader(Stringname):获得协议定义的文件头信息getHeaders(Stringname):返回指定名字的requestHeader的所有值,结果是一个枚举的实例getHeaderNames():返回所以requestHeader的名字,结果是一个枚举的实例getInputStream():返回请求的输入流,用于获得请求中的数据getMethod():获得客户端向效劳器端传送数据的方法getParameter(Stringname):获得客户端传送给效劳器端的有name指定的参数值getParameterNames():获得客户端传送给效劳器端的所有参数的名字,结果是一个枚举的实例getParameterValues(Stringname):获得有name指定的参数的所有值getProtocol():获取客户端向效劳器端传送数据所依据的协议名称getQueryString():获得查询字符串getRequestURI():获取发出请求字符串的客户端地址getRemoteAddr():获取客户端的IP地址getRemoteHost():获取客户端的名字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或EMBED元素来指定浏览器运行一个JAVAApplet所需的插件。根据浏览器类型为Java插件生成OBJECT或EMBED标记。<jsp: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"]>

[<jsp:params>

[<jsp:paramname="parameterName"

value="{parameterValue|<%=expression%>}"/>]+

</jsp:params>]

[<jsp:fallback>textmessageforuser</jsp:fallback>]

</jsp:plugin>举例:<jsp:plugintype=appletcode="Molecule.class"codebase="/html">

<jsp:params>

<jsp:paramname="molecule"value="molecules/benzene.mol"/>

</jsp:params>

<jsp:fallback>

<p>Unabletoloadapplet</p>

</jsp:fallback>

</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,ServletResponseresponse)也就是过滤后的请求调用资源的方法,如果不写这个方法,也就不会去调用相应的资源。

Filter的配置Filter的配置和Servlet相似。

<filter>

<filter-name>SessionFilter</filter-name>

<filter-class>alan.filter.SessionFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>SessionFilter</filter-name>

<url-pattern>/protected/*</url-pattern>

<!--这里的url-pattern就是要过滤的Servlet的url-pattern-->

<dispatcher>request</dispatcher>

<dispatcher>forward</dispatcher>

<dispatcher>include</dispatcher>

<!--上面的三个是过滤的范围-->

</filter-mapping>

CharArrayWriter类,是一个将数据保存在字符数组中的输出流,我们可以使用它来构造一个PrintWriter对象,也就实现了向内存输出。CharArrayWriter类的toString()和toCharArray()方法就可以取得写入内存中的数据。

注意:CharArrayWriter类是一个不会真正输出的类,他的write()方法只会将内容写入字符数组,而且这个字符数组是会自动增长的。例子:两个JSP页面,前一个页面用户输入一些信息然后提交,后一个页面显示用户提交的信息。在提交信息后,要经过两个过滤器的处理,一个检查用户是否登录,一个把用户的提交信息用GB2312进行重新编码。

开发一个Filter,这个Filter需要实现Filter接口,Filter接口定义了以下的方法:destroy()//由Web容器调用,销毁此Filterinit(FilterConfigfilterConfig)///由Web容器调用,初始化此FilterdoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)//具体过滤处理代码对提交信息用GB2312进行重新编码的Filter:1

//====================ProgramDiscription=====================2

//程序名称:例如14-7:EncodingFilter.java3

//程序目的:学习使用编码过滤器4

//==========================================================5

importjavax.servlet.FilterChain;6

importjavax.servlet.ServletRequest;7

importjavax.servlet.ServletResponse;8

importjava.io.IOException;9

importjavax.servlet.Filter;10

importjavax.servlet..ServletRequest;11

importjavax.servlet..ServletResponse;12

importjavax.servlet.ServletException;13

importjavax.servlet.FilterConfig;15

publicclassEncodingFilterimplementsFilter16

{18

privateStringtargetEncoding="gb2312";19

protectedFilterConfigfilterConfig;21

publicvoidinit(FilterConfigconfig)throwsServletException{22

this.filterConfig=config;23

this.targetEncoding=config.getInitParameter("encoding");24

}27

public

voiddoFilter(ServletRequestsrequest,ServletResponse

sresponse,FilterChainchain)28

throwsIOException,ServletException{30

ServletRequestrequest=(ServletRequest)srequest;31

request.setCharacterEncoding(targetEncoding);//把请求用指定的方式编码32

//把处理发送到下一个过滤器33

chain.doFilter(srequest,sresponse);

34

}36

publicvoiddestroy()37

{38

this.filterConfig=null;39

}41

publicvoidsetFilterConfig(finalFilterConfigfilterConfig)42

{43

this.filterConfig=filterConfig;44

}45

}【程序注解】

正如前面所说,EncodingFilter的目的是把客户端的请求用指定的方式编码,具体的处理在request.setCharacterEncoding(targetEncoding)完成了。LoginFilter判断用户在进入目标之前是否登录,if((isLog!=null)&&((isLog.equals("true"))||(isLog=="true")))将检查用户是否登录,如果已登录,那么把视图让过滤链继续处理,如果没有登录,把视图派发到登录页面,过滤链处理结束。

下面我们来看怎么在web.xml里配置这两个过滤器,代码如下所示:1

//====================ProgramDiscription=====================2

//程序名称:例如14-7:EncodingFilter.java3

//程序目的:学习使用编码过滤器4

//==========================================================5

importjavax.servlet.FilterChain;6

importjavax.servlet.ServletRequest;7

importjavax.servlet.ServletResponse;8

importjava.io.IOException;9

importjavax.servlet.Filter;10

importjavax.servlet..ServletRequest;11

importjavax.servlet..ServletResponse;12

importjavax.servlet.ServletException;13

importjavax.servlet.FilterConfig;14

15

publicclassEncodingFilterimplementsFilter16

{18

privateStringtargetEncoding="gb2312";19

protectedFilterConfigfilterConfig;21

publicvoidinit(FilterConfigconfig)throwsServletException{22

this.filterConfig=config;23

this.targetEncoding=config.getInitParameter("encoding");24

}27

public

voiddoFilter(ServletRequestsrequest,ServletResponse

sresponse,FilterChainchain)28

throwsIOException,ServletException{30

ServletRequestrequest=(ServletRequest)srequest;31

request.setCharacterEncoding(targetEncoding);//把请求用指定的方式编码32

//把处理发送到下一个过滤器33

chain.doFilter(srequest,sresponse);

34

}36

publicvoiddestroy()37

{38

this.filterConfig=null;39

}40

41

publicvoidsetFilterConfig(finalFilterConfigfilterConfig)42

{43

this.filterConfig=filterConfig;44

}45

}【程序注解】

可以看出,配置Filter时,首先指定Filter的名字和Filter的实现类,如果有必要,还要配置Filter的初始参数;然后为Filter做映射,这个映射指定了需要过滤的目标〔JSP、Servlet〕。在上面的例子中,指定了EncodingFilter为所有的JSP和Servlet做过滤,LoginFilter为target.jsp做过滤。这样,当客户请求target.jsp时,首先要经过EncodingFilter的处理,然后经过LoginFilter的处理,最后才把请求传递给target.jsp。【运行程序】

把程序部署到Web效劳器里〔比方Tomcat〕,然后启动Web效劳器,在浏览器里输入以下URL〔根据具体请求改变URL〕:://127.0.0.1:8080/ch14/target.jsp那么Filter将会把视图派发到:://127.0.0.1:8080/ch14/init.jsp在init.jsp里,我们使用:<%session.setAttribute("isLog","true");%>来设置用户已经登录〔这里是简化的,在实际工程中,可能要经过验证处理〕。在init.jsp里,可以提交一些中文的信息。由于提交的信息被EncodingFilter使用GB2312统一编码了,故在target.jsp里能够正确显示中文。您可以做一个试验,把web.xml改为:<filter-mapping>

<filter-name>encoding</filter-name>

<url-pattern>/nothing</url-pattern>

</filter-mapping>然后重新启动Web效劳器。那么在target.jsp里,中文将不能正确显示。监听器Listener是Servlet的监听器,它可以监听客户端的请求、效劳端的操作等。通过监听器,可以自动激发一些操作,比方监听在线的用户的数量。当增加一个Session时,就激发sessionCreated(SessionEventse)方法,这样就可以给在线人数加1。以下是3个Listener接口。ServletContextAttributeListener:监听对ServletContext属性的操作,比方增加、删除、修改属性ServletRequestListener:SessionListener:监听Session的操作。当创立一个Session时,激发sessionCreated(SessionEventse)方法;当销毁一个Session时,激发sessionDestroyed(SessionEventse)方法SessionAttributeListener:监听Session中的属性的操作。当在Session增加一个属性时,激发attributeAdded(SessionBindingEventse)方法;当在Session删除一个属性时,激发attributeRemoved(SessionBindingEventse)方法;当在Session属性被重新设置时,激发attributeReplaced(SessionBindingEventse)方法ServletContextListener:监听ServletContext。当创立ServletContext时,激发contextInitialized(ServletContextEventsce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEventsce)方法这三个监听器接口,分别监听Servlet中3种比拟重要的对象的创立和销毁。这三个接口中分别有监听该对象创立和销毁事件的方法,效劳器本身就是事件源。listener的配置

<listener>

<listener-class>alan.servlet.listener.AlanContextListener</listener-class>

<!--listener-class也就是实现Listener接口的类-->

</listener>Servlet中的重要对象〔只针对应用〕数量生命周期是否线程平安ServletContext1全局的。只有在应用关闭时才销毁不平安。需要加同步访问Session和用户的数量相同局部的。只在有效时间内存在不平安。需要加同步访问ServletRequest多个局部的。只在service()和doGet()、doPost()中存在线程平安下面我们开发一个具体的例子,这个监听器能够统计在线的人数。在ServletContext初始化和销毁时,在效劳器控制台打印对应的信息。当ServletContext里的属性增加、改变、删除时,在效劳器控制台打印对应的信息。要获得以上的功能,监听器必须实现以下3个接口:

SessionListener

ServletContextListener

ServletContextAttributeListener//====================ProgramDiscription=====================2

//程序名称:例如14-9:EncodingFilter.java3

//程序目的:学习使用监听器4

//==============================================================5

importjavax.servlet..*;6

importjavax.servlet.*;8

publicclassOnLineCountListenerimplementsSessionListener,ServletContextListener,ServletContextAttributeListener9

{10

privateintcount;11

privateServletContextcontext=null;13

publicOnLineCountListener()14

{15

count=0;16

//setContext();17

}18

//创立一个session时激发19

publicvoidsessionCreated(SessionEventse)20

{21

count++;22

setContext(se);

24

}25

//当一个session失效时激发26

publicvoidsessionDestroyed(SessionEventse)27

{28

count--;29

setContext(se);30

}31

//设置context的属性,它将激发attributeReplaced或attributeAdded方法32

publicvoidsetContext(SessionEventse)33

{34

se.getSession().getServletContext().setAttribute("onLine",newInteger(count));35

}36

//增加一个新的属性时激发37

publicvoidattributeAdded(ServletContextAttributeEventevent){39

log("attributeAdded('"+event.getName()+"','"+40

event.getValue()+"')");42

}44

//删除一个新的属性时激发45

publicvoidattributeRemoved(ServletContextAttributeEventevent){47

log("attributeRemoved('"+event.getName()+"','"+48

event.getValue()+"')");50

}52

//属性被替代时激发53

publicvoidattributeReplaced(ServletContextAttributeEventevent){55

log("attributeReplaced('"+event.getName()+"','"+56

event.getValue()+"')");57

}58

//context删除时激发59

publicvoidcontextDestroyed(ServletContextEventevent){61

log("contextDestroyed()");62

this.context=null;64

}66

//context初始化时激发67

publicvoidcontextInitialized(ServletContextEventevent){69

this.context=event.getServletContext();70

log("contextInitialized()");72

}73

privatevoidlog(Stringmessage){75

System.out.println("ContextListener:"+message);76

}

77

}【程序注解】

在OnLineCountListener里,用count代表当前在线的人数,OnLineCountListener将在Web效劳器启动时自动执行。当OnLineCountListener构造好后,把count设置为0。每增加一个Session,OnLineCountListener会自动调用sessionCreated(SessionEventse)方法;每销毁一个Session,OnLineCountListener会自动调用sessionDestroyed(SessionEventse)方法。当调用sessionCreated(SessionEventse)方法时,说明又有一个客户在请求,此时使在线的人数〔count〕加1,并且把count写到ServletContext中。ServletContext的信息是所有客户端共享的,这样,每个客户端都可以读取到当前在线的人数。为了使监听器生效,需要在web.xml里进行配置,如下所示:<listener>

<listener-class>OnLineCountListener</listener-class>

</listener>测试程序:<%@pagecontentType="text/html;charset=gb2312"%>目前在线人数:<fontcolor=red><%=getServletContext().getAttribute("onLine")%></font><br>getServletContext().getAttribute("onLine")获得了count的具体值。客户端调用退出会话:<formaction="exit.jsp"method=post><inputtype=submitvalue="exit"></form>客户端调用:<%session.invalidate();%>使Session失效,这样监听器就会使count减1。web.xml做好以上的配置,把OnLineCountListener放在WEB-INF/class目录下,启动Web效劳器,在浏览器里输入以下URL〔根据具体情况不同〕:://127.0.0.1:8080/ch14/listener.jsp浏览器将会打印目前在线人数。在效劳器端有以下输出:…ContextListener:contextInitialized()ContextListener:attributeReplaced('org.apache.catalina.WELCOME_FILES','[Ljava.lang.String;@1d98a')…ContextListener:attributeAdded('onLine','1')ContextListener:attributeReplaced('onLine','1')ContextListener:attributeReplaced('onLine','0')ContextListener:attributeReplaced('onLine','1')ContextListener:attributeReplaced('onLine','2')三、程序题1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供resetimportjava.util.*;publicclassbycomma{publicstaticString[]splitStringByComma(Stringsource){if(source==null||source.trim().equals(""))returnnull;StringTokenizercommaToker=newStringTokenizer(source,",");String[]result=newString[commaToker.countTokens()];inti=0;while(commaToker.hasMoreTokens()){result[i]=commaToker.nextToken();i++;}returnresult;}publicstaticvoidmain(Stringargs[]){String[]s=splitStringByComma("5,8,7,4,3,9,1");int[]ii=newint[s.length];for(intI=0;i<s.length;i++){ii[i]=Integer.parseInt(s[i]);}Arrays.sort(ii);//ascfor(inti=0;i<s.length;i++){System.out.println(ii[i]);}//descfor(inti=(s.length-1);i>=0;i--){System.out.println(ii[i]);}}}2.我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?PublicStringtranslate(Stringstr){StringtempStr="";try{tempStr=newString(str.getBytes("ISO-8859-1"),"GBK");tempStr=tempStr.trim();}catch(Exceptione){System.err.println(e.getMessage());}returntempStr;}3.Session中存储一个String变量,变量名称为studentname,写出在jsp中如何得到这个session变量的值的语句。<% StringstudentName=session.getAttribute(“studentname〞)==null?“〞:(String)session.getAttribute(“studentname〞);%>4.在Web应用中,各举POST请求和GET请求应用场景的一个例子<formname=〞…〞method=〞get〞action=〞…〞></form><formname=〞…〞method=〞post〞action=〞…〞></form>5.编写一个servlet。servlet的功能要求:记录访问该servlet的客户端的ip和访问时间,把记录写入client_ip.log文件。client_ip.log里的格式大致如下:9:362005-4-89:362005-4-8packagecom.itjob.st;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.PrintWriter;importjava.text.SimpleDateFormat;importjava.util.Date;importjavax.servlet.ServletException;importjavax.servlet..Servlet;importjavax.servlet..ServletRequest;importjavax.servlet..ServletResponse;publicclassMyServletextendsServlet{ privateFileclientIp; privateFileOutputStreamfos; /** *Constructoroftheobject. */ publicMyServlet(){ super(); } /** *Destructionoftheservlet.<br> */ publicvoiddestroy(){ super.destroy();//Justputs"destroy"stringinlog //Putyourcodehere } publicvoidservice(javax.servlet..ServletRequestreq,javax.servlet..ServletResponseresp)throwsjavax.servlet.ServletException,java.io.IOException{ openFileOutputStream(); StringclientIp=req.getRemoteAddr(); SimpleDateFormatsdf=newSimpleDateFormat("HH:mmyyyy-MM-dd"); Datedate=newDate(); StringcurrDate=sdf.format(date); StringclientIpLog=clientIp+""+currDate; this.fos.write(clientIpLog.getBytes()); this.fos.flush(); closeFileOutputStream(); } /** *ThedoGetmethodoftheservlet.<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论