Servlet面试题

更新时间:2023-10-14 10:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、Servlet如何得到服务器的信息?

Servlet可以使用如下四种方法来得到server的name, port和info publicString ServletRequest.getServerName() publicString ServletRequest.getServerPort() publicString ServletContext.getServerInfo()

publicString ServletRequest.getAttributes(String name)

如下代码实现用servlet取得server的信息并输出到客户端浏览器: importjava.io.*; importjava.util.*; importjavax.servlet.*; importjavax.servlet.http.*;

public classDemoServerSnoopextendsGenericServlet{

publicvoidservice(ServletRequest req , ServletResponse res) throwsServletException,IOException{

res.setContentType(\); PrintWriter out= res.getWriter();

out.println(\+ req.getServerName()); out.println(\+ req.getServerPort());

out.println(\+ getServletContext().getServerInfo());

out.println(\+

getServerInfoName(getServletContext().getServerInfo()));

out.println(\+

getServerInfoVersion(getServletContext().getServerInfo()));

out.println(\+ getServletContext().getAttribute(\)); }

privateString getServerInfoName(String serverInfo){

intslash = serverInfo.indexOf('/'); if(slash==-1)

returnserverInfo; else

return(String)serverInfo.subSequence(0,slash); }

privateString getServerInfoVersion(String serverInfo){

intslash = serverInfo.indexOf('/'); if(slash==-1) return null; else

returnserverInfo.substring(slash +1); }}

2、Servlet如何得到客户端机器的信息?

Servlet可以使用getRemoteAddr()和getRemoteHost()来得到客户端的IP地址和host, 代码如下所示:

publicString ServletRequest.getRemoteAddr() publicStirng ServletRequest.getRemoteHost()

用这些方法来访问客户端有所限制,如下代码实现了对客户端配置进行检查并把相关消息发送到客户端的功能: importjava.io.*; importjava.util.*; importjavax.servlet.*; importjavax.servlet.http.*;

public classDemoExportRestrictionextendsHttpServlet{

publicvoiddoGet(HttpServletRequest req,HttpServletResponse res) throwsServletException,IOException{

res.setContentType(\); PrintWriter out= res.getWriter();

//得到客户端的hostname

String remoteHost = req.getRemoteHost();

//查看客户端是否允许这样的操作 if(!isHostAllowed(remoteHost)){

out.println(\); }else{

out.println(\); } }

privatebooleanisHostAllowed(String host) { return(host.endsWith(\))|| (host.indexOf('.')==-1);//没有域名 ok } }

3、一家美资企业的java servlet面试题

filter 的作用是什么?主要实现什么方法?doFilter方法里面的2个参数request 和 response 他问 这两个接口的全称是什么?

1.Filter使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).一个filter 包括:

1. 在servlet被调用之前截获;

2. 在servlet被调用之前检查servlet request; 3. 根据需要修改request头和request数据; 4. 根据需要修改response头和response数据; 5. 在servlet被调用之后截获.

2. request的全称是 HttpServletRequest response的全称是 HttpServletResponse . 4、JDBC操作数据库的基本流程是什么?

所有的JDBC应用程序都具有下面的基本流程: 1、建立到数据库的连接。 2、执行SQL语句。 3、处理结果。 4、从数据库断开连接。

下面我们就来仔细看一看每一个步骤。 建立到数据库的连接

通过JDBC使用数据库的第一步就是建立一个连接。JDBC连接是由URL指定的,它的格式如下:

jdbc::

其中subprotocol是被请求的数据库连接的类型(如ODBC,ORACLE,Informix等等),而subname提供了所要建立的连接的一些附加信息。当JDBC驱动程序管理器收到一个连接的URL时,所有已知的JDBC驱动程序会被询问是否可以为这个URL服务。请求一个通过JDBC-ODBC桥到叫做MyData的ODBC数据源的连接的例子如下: Connection con = DriverManage.getconnection(”jdbc:odbc:MyData”);

看上去一切都很顺利,但是JDBC驱动程序管理器是怎么知道哪些JDBC驱动程序在当前的系统中可用呢?有两种机制可以通知驱动程序管理器一个JDBC驱动程序可以使用:sql.drivers属性和JDBC驱动程序注册。

驱动程序管理器引用sql.drivers系统属性来取得当前系统中可用的JDBC驱动程序列表。这个系统属性包含一些用冒号隔开的JDBC驱动程序的类名,通过这个类名,驱动程序管理器可以试图满足一个连接请求。

使用驱动程序注册更为常见。这种方法使你对你要使用的JDBC驱动程序有更多的控制。所有的JDBC驱动程序在实例化的时候都必须在驱动程序管理器中注册自己,注册可以通过下列两个方法来实现:

1.Class.forName(”foo.Driver”).newInstance(); 2.new foo.Driver();

我个人比较喜欢使用Class.forName()这种方法,不过这两种方法的效果是相同的。JDBC驱动程序用驱动程序管理器注册自己,这样,它就可以为连接请求服务了。 执行SQL语句

在数据库连接成功建立之后,我们就可以执行那些完成实际工作的SQL语句了。在执行SQL语句之前,我们必须首先创建一个语句对象,这个对象提供了到特定数据库SQL引擎的接口。有下列三种不同类型的语句对象:

1.Statement——基本的语句对象,它提供了直接在数据库中执行SQL语句的方法。对于那些只执行一次的查询以及DDL语句如CREATE TABLE,DROP TABLE等等来说,statement对象就足够了。

2.Prepared statement——这种语句对象用于那些需要执行多次,每次仅仅是数据取值不同的SQL语句,它还提供了一些方法,以便指出语句所使用的输入参数。

3.Callable statement——这种语句对象被用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入输出参数。

下面是一个用语句类来执行SQL SELECT语句的一个例子: Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery(”SELECT * FROM MyTable”); 处理结果

在执行了一个SQL语句之后,我们必须处理得到的结果。有些语句仅仅返回一个整形数,指出受到影响的行数(比如UPDATE和DELETE语句)。SQL查询(SELECT语句)返回一个含有查询结果的结果集。结果集由行和列组成,各列数据可以通过相应数据库类型的一系列get方法(如getString,getInt,getDate等等)来取得。在取得了一行数据的所有数据之后,我们可以调用next()方法来移到结果集中的下一条记录。JDBC规范的1.1版只允许forward-onle(只向前)型的游标,而在JDBC2.0中有更健壮的游标控制功能,我们可以向后移动游标而且可以将游标移动到指定行。 从数据库断开连接

在结果集、语句和连接对象用完以后,我们必须正确地关闭它们。连接对象、结果集对

象以及所有的语句对象都有close()方法,通过调用这个方法,我们可以确保正确释放与特定数据库系统相关的所有资源。

有些开发者喜欢将引用乱放,然后用一个垃圾收集程序专门负责正确清除对象。我强烈建议大家在使用了JDBC驱动程序之后调用close()方法。这样可以尽可能的减少由于挂起的对象残留在数据库系统中而造成的内存泄漏。

5、为什么要使用servlet

servlet可以很好地替代公共网关接口(Common Gateway Interface,CGI)脚本。通常CGI脚本是用Perl或者C语言编写的,它们总是和特定的服务器平台紧密相关。而servlet是用Java编写的,所以它们一开始就是平台无关的。这样,Java编写一次就可以在任何平台运行(write once,run anywhere)的承诺就同样可以在服务器上实现了。servlet还有一些CGI脚本所不具备的独特优点:

■servlet是持久的。servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。与之相反,CGI脚本是短暂的、瞬态的。每一次对CGI脚本的请求,都会使Web服务器加载并执行该脚本。一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。CGI脚本的每一次使用,都会造成程序初始化过程(例如连接数据库)的重复执行。

■servlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。

■servlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet自然也具备了这些特征。

■servlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。

■setvlet可以在多种多样的客户机上使用。由于servlet是用Java编写的,所以你可以很方便地在HTML中使用它们,就像你使用applet一样。在本书中您将看到这一点。 6、什么是servlet

servlet可以被认为是服务器端的applet。servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。

使用servlet的基本流程如下:

·客户端(很可能是Web浏览器)通过HTTP提出请求。

·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。 ·servlet将接收该HTTP请求并执行某种处理。 ·servlet将向Web服务器返回应答。

·Web服务器将从servlet收到的应答发送给客户端。

由于servlet是在服务器上执行,通常与applet相关的安全性的问题并不需实现。servlet

javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。

这一步中,对于JSP源程序文件是不同的,对于JSP,这个过程是这样的:即WEB容器调用JSP编译器,JSP编译器先查看JSP文件中是否设置有文件编码格式,如果JSP文件中没有设置JSP文件的编码格式,则JSP编译器调用JDK先把JSP文件用JVM默认的字符编码格式(也即WEB容器所在的操作系统的默认的file.encoding)转化为临时的Servlet类,然后再把它编译成UNICODE格式的class类,并保存在临时文件夹中。如:在中文win2k上,WEB容器就把JSP文件从GBK编码格式转化为UNICODE格式,然后编译成临时保存的Servlet类,以响应用户的请求。 第三步,运行第二步编译出来的类,分为三种情况: A、 直接在console上运行的类

B、 EJB类和不可以直接运行的支持类(如JavaBean类) C、 JSP代码和Servlet类 D、 JAVA程序和数据库之间 下面我们分这四种情况来看。 A、直接在console上运行的类

这种情况,运行该类首先需要JVM支持,即操作系统中必须安装有JRE。运行过程是这样的:首先java启动JVM,此时JVM读出操作系统中保存的class文件并把内容读入内存中,此时内存中为UNICODE格式的class类,然后JVM运行它,如果此时此类需要接收用户输入,则类会默认用file.encoding编码格式对用户输入的串进行编码并转化为unicode保存入内存(用户可以设置输入流的编码格式)。程序运行后,产生的字符串(UNICODE编码的)再回交给JVM,最后JRE把此字符串再转化为file.encoding格式(用户可以设置输出流的编码格式)传递给操作系统显示接口并输出到界面上。

以上每一步的转化都需要正确的编码格式转化,才能最终不出现乱码现象。 B、EJB类和不可以直接运行的支持类(如JavaBean类)

由于EJB类和不可以直接运行的支持类,它们一般不与用户直接交互输入和输出,它们常常与其它的类进行交互输入和输出,所以它们在第二步被编译后,就形成了内容是UNICODE编码的类保存在操作系统中了,以后只要它与其它的类之间的交互在参数传递过程中没有丢失,则它就会正确的运行。 C、JSP代码和Servlet类

经过第二步后,JSP文件也被转化为Servlets类文件,只不过它不像标准的Servlets一校存在于classes目录中,它存在于WEB容器的临时目录中,故这一步中我们也把它做为Servlets来看。

对于Servlets,客户端请求它时,WEB容器调用它的JVM来运行Servlet,首先,JVM把Servlet的class类从系统中读出并装入内存中,内存中是以UNICODE编码的Servlet类的代码,然后JVM在内存中运行该Servlet类,如果Servlet在运行的过程中,需要接受从客户端传来的字符如:表单输入的值和URL中传入的值,此时如果程序中没有设定接受参数时采用的编码格式,则WEB容器会默认采用ISO-8859-1编码格式来接受传入的值并在JVM中转化为UNICODE格式的保存在WEB容器的内存中。Servlet运行后生成输出,输出的字符串是UNICODE格式的,紧接着,容器将Servlet运行产生的UNICODE格式的串(如html语法,用户输出的串等)直接发送到客户端浏览器上并输出给用户,如果此时指定了发送时输出的编码格式,则按指定的编码格式输出到浏览器上,如果没有指定,则默认按ISO-8859-1编码发送到客户的浏览器上。 D、Java程序和数据库之间

对于几乎所有数据库的JDBC驱动程序,默认的在JAVA程序和数据库之间传递数据都是以ISO-8859-1为默认编码格式的,所以,我们的程序在向数据库内存储包含中文的数据时,JDBC首先是把程序内部的UNICODE编码格式的数据转化为ISO-8859-1的格式,然后传递到数据库中,在数据库保存数据时,它默认即以ISO-8859-1保存,所以,这是为什么我们常常在数据库中读出的中文数据是乱码。 3、分析常见的JAVA中文问题几个必须清楚的原则

首先,经过上面的详细分析,我们可以清晰地看到,任何JAVA程序的生命期中,其编码转换的关键过程是在于:最初编译成class文件的转码和最终向用户输出的转码过程。 其次,我们必须了解JAVA在编译时支持的、常用的编码格式有以下几种: *ISO-8859-1,8-bit, 同8859_1,ISO-8859-1,ISO_8859_1等编码 *Cp1252,美国英语编码,同ANSI标准编码 *UTF-8,同unicode编码

*GB2312,同gb2312-80,gb2312-1980等编码 *GBK , 同MS936,它是gb2312的扩充

及其它的编码,如韩文、日文、繁体中文等。同时,我们要注意这些编码间的兼容关体系如下:

unicode和UTF-8编码是一一对应的关系。GB2312可以认为是GBK的子集,即GBK编码是在gb2312上扩展来的。同时,GBK编码包含了20902个汉字,编码范围为:0×8140-0xfefe,所有的字符可以一一对应到UNICODE2.0中来。

再次,对于放在操作系统中的.java源程序文件,在编译时,我们可以指定它内容的编码格式,具体来说用-encoding来指定。注意:如果源程序中含有中文字符,而你用-encoding指定为其它的编码字符,显然是要出错的。用-encoding指定源文件的编码方式为GBK或gb2312,无论我们在什么系统上编译含有中文字符的JAVA源程序都不会有问题,它都会

正确地将中文转化为UNICODE存储在class文件中。

然后,我们必须清楚,几乎所有的WEB容器在其内部默认的字符编码格式都是以ISO-8859-1为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以UTF-8的方式来传递参数的。所以,虽然我们的Java源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以ISO-8859-1来处理的。 4、中文问题的分类及其建议最优解决办法

了解以上JAVA处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的办法。

我们的目标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的JAVA源程序经编译后可以移值到任何其它的操作系统中正确运行,或拿到其它操作系统中编译后能正确运行,能正确地传递中文和英文参数,能正确地和数据库交流中英文字符串。

我们的具体思路是:在JAVA程序转码的入口和出口及JAVA程序同用户有输入输出转换的地方限制编码方法使之正确即可。 具体解决办法如下:

1、 针对直接在console上运行的类

对于这种情况,我们建议在程序编写时,如果需要从用户端接收用户的可能含有中文的输入或含有中文的输出,程序中应该采用字符流来处理输入和输出,具体来说,应用以下面向字符型节点流类型:

对文件:FileReader,FileWrieter

其字节型节点流类型为:FileInputStream,FileOutputStream 对内存(数组):CharArrayReader,CharArrayWriter

其字节型节点流类型为:ByteArrayInputStream,ByteArrayOutputStream 对内存(字符串):StringReader,StringWriter 对管道:PipedReader,PipedWriter

其字节型节点流类型为:PipedInputStream,PipedOutputStream 同时,应该用以下面向字符型处理流来处理输入和输出: BufferedWriter,BufferedReader

其字节型的处理流为:BufferedInputeStream,BufferedOutputStream InputStreamReader,OutputStreamWriter

其字节型的处理流为:DataInputStream,DataOutputStream

其中InputStreamReader和InputStreamWriter用于将字节流按照指定的字符编码集转换到字符流,如:

InputStreamReader in = new InputStreamReader(System.in,”GB2312″); OutputStreamWriter out = new OutputStreamWriter (System.out,”GB2312″); 例如:采用如下的示例JAVA编码就达到了要求: //Read.java import java.io.*;

public class Read {

public static void main(String[] args) throws IOException {

String str = ” 中文测试,这是内部硬编码的串”+” test english character”; String strin= “”; BufferedReader BufferedWriter stdout.write(”请输入:”); stdout.flush();

strin = stdin.readLine();

stdout.write(”这是从用户输入的串:”+strin); stdout.write(str); stdout.flush(); }}

同时,在编译程序时,我们用以下方式来进行: javac -encoding gb2312 Read.java

2、 针对EJB类和不可以直接运行的支持类(如JavaBean类)

由于这种类它们本身被其它的类调用,不直接与用户交互,故对这种类来说,我们的建议的处理方式是内部程序中应该采用字符流来处理程序内部的中文字符串(具体如上面一节中一样),同时,在编译类时用-encoding gb2312参数指示源文件是中文格式编码的即可。 3、 针对Servlet类

针对Servlet,我们建议用以下方法:

在编译Servlet类的源程序时,用-encoding指定编码为GBK或GB2312,且在向用户输出时的编码部分用response对象的setContentType(”text/html;charset=GBK”);或gb2312来设置输出编码格式,同样在接收用户输入时,我们用request.setCharacterEncoding(”GB2312″);这样无论我们的servlet类移植到什么操作系统中,只有客户端的浏览器支持中文显示,就可以正确显示。如下是一个正确的示例: //HelloWorld.java package hello; import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

public void init() throws ServletException { }

public void doGet(HttpServletRequest request, HttpServletResponse response) throws

stdin stdout

= =

new new

BufferedReader(new BufferedWriter(new

InputStreamReader(System.in,”gb2312″)); //设置输入接口按中文编码 OutputStreamWriter(System.out,”gb2312″)); //设置输出接口按中文编码

IOException, ServletException {

request.setCharacterEncoding(”GB2312″); //设置输入编码格式

response.setContentType(”text/html;charset=GB2312″); //设置输出编码格式 PrintWriter out = response.getWriter(); //建议使用PrintWriter输出 out.println(”


”);

out.println(”Hello World! This is created by Servlet!测试中文!”); out.println(”


”); }

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

request.setCharacterEncoding(”GB2312″); //设置输入编码格式

response.setContentType(”text/html;charset=GB2312″); //设置输出编码格式 String name = request.getParameter(”name”); String id = request.getParameter(”id”); if(name==null) name=”\if(id==null) id=”\

PrintWriter out = response.getWriter(); //建议使用PrintWriter输出 out.println(”


”);

out.println(”你传入的中文字串是:” + name); out.println(”


你输入的id是:” + id); out.println(”
”); }

public void destroy() { } }

请用javac -encoding gb2312 HelloWorld.java来编译此程序。 测试此Servlet的程序如下所示:

<%@page contentType=”text/html; charset=gb2312″%> <%request.setCharacterEncoding(”GB2312″);%>

//testchinese.jsp

<%@page pageEncoding=”GB2312″%>

<%@page contentType=”text/html; charset=gb2312″%> <%request.setCharacterEncoding(”GB2312″);%> <%

String action = request.getParameter(”ACTION”); String name = “”; String str = “”;

if(action!=null && action.equals(”SENT”)) {

name = request.getParameter(”name”); str = request.getParameter(”str”); } %>

<%

if(action!=null && action.equals(”SENT”)) {

out.println(”
你输入的字符为:”+name); out.println(”
你通过URL传入的字符为:”+str); } %>

由于大多数本地测试环境是TOMCAT,现也将其中文问题一并附上。 Tomcat中文问题- -

在tomcat5中发现了以前处理tomcat4的方法不能适用于处理直接通过url提交的请求,上网找资料终于发现了最完美的解决办法,不用每个地方都转换了,而且无论get,和post都正常。写了个文档,贴出来希望跟我有同样问题的人不再像我一样痛苦一次:-) 问题描述:

1 表单提交的数据,用request.getParameter(“xxx”)返回的字符串为乱码或者?? 2 直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用request.setCharacterEncoding(”GBK”);也不管用 原因:

1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理 2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。 解决办法:

首先所有的jsp文件都加上:

1 实现一个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。) 1)

%TOMCAT

%/

webappsservlets-examplesWEB-INFclassesfiltersSetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。 2)在你的web.xml里加入如下几行: Set Character Encoding filters.SetCharacterEncodingFilter

encoding

GBK

Set Character Encoding /* 3)完成.

2 get方式的解决办法

1) 打开tomcat的server.xml文件,找到区块,加入如下一行: URIEncoding=”GBK” 完整的应如下:

port=”80″ maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ debug=”0″ connectionTimeout=”20000″ disableUploadTimeout=”true” URIEncoding=”GBK” />

2)重启tomcat,一切OK。 执行如下jsp页页测试是否成功

<%@ page contentType=”text/html;charset=gb2312″%> <%@ page import=”java.util.*”%> <%

String q=request.getParameter(”q”); q = q == null? “没有值” : q; %>

新闻列表显示

你提交了: <%=q%>

测试结果如果你输入文本框或者点超链都会显示:你提交了”中国”,说明成功!!!!! 10/forward与sendRedirect区别是什么?

1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servletengine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递。 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=value,这样不行,可以程序内通过request.setAttribute(”name”,value)来传至下一个页面。 重定向后浏览器地址栏URL不变,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个异常 例:servlet文件中重定向

public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType(”text/html; charset=gb2312″); ServletContext sc = getServletContext(); RequestDispatcher rd = null; rd = sc.getRequestDispatcher(”/index.jsp”); rd.forward(request, response); }

2.response.sendRedirect() 是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=value传至下个页面,同时它可以重定向至不同的主机上,且在浏览器地址栏上会出现重定向页面的URL。HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下: public void sendRedirect(java.lang.String location)throws java.io.IOException

这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL,如response.sendRedirect (”http://java.sun.com”)也可以使用相对的URL。如果location以”/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现 3.如何得到RequestDispatcher 有三种方法可以得到Request Dispatcher对象。 (1).javax.servlet.ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。如果path以”/”开头,则解析为相对于当

前上下文的根。

(2).javax.servlet.ServletContext的getRequestDispatcher(String path)方法,其中path必须以”/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。

(3).使用javax.servlet.ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。

这三种方法的使用有细微的差别。比如,下面是一个应用的配置文件web.xml:

FirstServlet

org.javaresearch.redirecttest.ServletOne

SecondServlet FirstServlet

SecondServlet

org.javaresearch.redirecttest.ServletTwo

/servlet/firstservlet

/servlet/secondservlet

其中定义了两个Servlet,名字分别为FirstServlet和SecondServlet,对应的类

org.javaresearch.redirecttest.ServletOne

org.

javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问: http://localhost:8080/servlet/firstservlet

使用(1)中方法,例如在firstservlet可以写入下面的代码: RequestDispatcher

rd

=

request.getRequestDispatcher(”/second/servlet”);

rd.forward(request, response);

此时控制权将转向到第二个Servlet了。

使用(2)中的方法,可以从Servlet Context中得到RequestDispatcher代码如下: RequestDispatcher

rd

=

getServletContext().getRequest

Dispatcher(”/servlet/secondservlet”); rd.forward(request, response);

使用(3)中的方法,从上面的web. xml配置文件可以看到定义了两个Servlet,名字分别为FirstServlet和SecondServlet,所以可以得到命名的Dispatcher:

RequestDispatcher rd = getServletContext().getNamedDispatcher(”SecondServlet”); rd.forward(request, response);

这样也可以重定向到SecondServlet了。

JSP页面中的重定向,JSP在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代码,并且,JSP还提供了更便利的操作,如下:

JSP页面执行到这儿,将终止当前的处理,将控制权交由nextpage.jsp。 4.如何选择

RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 HttpServletResponse.sendRequest()方法。 11/JSP&Servlet技术面试题 1. 描述JSP和Servlet的区别、共同点、各自应用的范围

2. 在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(< > & “”) 3. 在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。

4. 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5. 列出Jsp中包含外部文件的方式,两者有何区别。 6. 说明Jsp中errorPage的作用,应用范围。 7. 介绍在Jsp中如何使用JavaBeans。 8. 简单介绍JSP的标记库

9. Jsp和Servlet中的请求转发分别如何实现。 12/某个公司的面试测试题 两天时间完成

请在2日内完成该测试;提交完整的eclipse工程和数据库建表语句。 功能简单说明:

用户登录:按设置的用户名登录系统

客户管理:设置客户编号(ajax查询),名称,地址,增删改查 CRUD

员工设置:设置姓名,登录用户名(ajax查询),密码,管理的客户(多选),增删改查 入库扫描:录入一个客户编号,回车ajax显示客户信息

再录入运单号,回车ajax检查是否重复运单,回车保存后数据列表局部刷新,页面下方显示一条数据

订单查询:根据客户和入库时间(可勾选),查询订单数据,列出:运单号 客户编号 客户名称 客户地址 入库时间

分页显示,包括合计,可以导出excel 4 技术要求:

JSP+servlet+JDBC(标准sql),允许使用需要的第三方jar包

数据库连接使用连接池方式(tomcat配置或者使用其他java连接池类读取db.properties文

件方式)

业务层,数据层严格分开 注释清晰

请保证自己独立完成

13/一套Java笔试题 包括JSP和JDBC等方面知识

1.编写一个JSP页面,页面中含有一个表单、文本框、下拉列表框、单选框、复选框。 2.展示JDBC连数据库的调用方法。

3.描述page|request|session|application适用范围的含义。 4.数据类型之间的转换: (1)String、java.Util.date (2)String、float (3)”123″、long (4)String、TimeStamp

5.通过JSP代码片段展示forword动作的使用方法. 6.描述getProperty和setProperty动作的作用 7.post、get两种方法的区别和特点

8、什么是taglib,如何在Jsp中使用自定义的标记,请结合自己的项目实际描述说明 9.通过jsp+javascript代码实例展示如何在一个jsp页面中动态显示属性列表,树的层次和每个层次包含的节点树由数据库动态查出来! 14/某公司的Java JSP上机题

1 请按测试demo页面需要实现的功能自行设计数据表,数据库不限(oracle,mysql,sqlserver均可)

2 所需JSP页面可以按测试demo功能,自己做JSP,有录入框和表格即可,页面无需任何美化

3 测试demo地址:http://124.42.120.53/test/index.html (无需密码,直接登录) 功能简单说明:

用户登录:按设置的用户名登录系统

客户管理:设置客户编号(ajax查询),名称,地址,增删改查 CRUD

员工设置:设置姓名,登录用户名(ajax查询),密码,管理的客户(多选),增删改查 入库扫描:录入一个客户编号,回车ajax显示客户信息

再录入运单号,回车ajax检查是否重复运单,回车保存后数据列表局部刷新,页面下方显示一条数据

订单查询:根据客户和入库时间(可勾选),查询订单数据,列出:运单号 客户编号 客户名称 客户地址 入库时间

分页显示,包括合计,可以导出excel 4 技术要求:

JSP+servlet+JDBC(标准sql),允许使用需要的第三方jar包

数据库连接使用连接池方式(tomcat配置或者使用其他java连接池类读取db.properties文件方式)

业务层,数据层严格分开 注释清晰

请保证自己独立完成

15/Servlet都有哪些方法?主要作用是什么?

HttpServlet 类包含 init() 、 destroy() 、 service() 等方法。其中 init() 和 destroy() 方法是继承的。 (1) init() 方法

在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet 。 无论有多少客户机访问 Servlet ,都不会重复执行 init() 。

缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法来覆盖它,典型的是管理服务器端资源。 例如,可能编写一个定制 init() 来只用于一次装入 GIF 图像,改进 Servlet 返回 GIF 图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。缺省的 init() 方法设置了 Servlet 的初始化参数,并用它的 ServletConfig 对象参数来启动配置, 因此所有覆盖 init() 方法的 Servlet 应调用 super.init() 以确保仍然执行这些任务。在调用 service() 方法之前,应确保已完成了 init() 方法。 (2) service() 方法

service() 方法是 Servlet 的核心。每当一个客户请求一个 HttpServlet 对象,该对象的 service() 方法就要被调用,而且传递给这个方法一个“请求”( ServletRequest )对象和一个“响应”( ServletResponse )对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET ,则缺省情况下就调用 doGet() 。 Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。

= 当一个客户通过 HTML 表单发出一个 HTTP POST 请求时, doPost ()方法被调用。 与 POST 请求相关的参数作为一个单独的 HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用 doPost() 方法。

= 当一个客户通过 HTML 表单发出一个 HTTP GET 请求或直接请求一个 URL 时, doGet() 方法被调用。 与 GET 请求相关的参数添加到 URL 的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用 doGet() 方法。 Servlet 的响应可以是下列几种类型:

一个输出流,浏览器根据它的内容类型(如 text/HTML )进行解释。 一个 HTTP 错误响应 , 重定向到另一个 URL 、 servlet 、 JSP 。 (3) destroy() 方法

destroy() 方法仅执行一次,即在服务器停止且卸装 Servlet 时执行该方法。典型的,将

Servlet 作为服务器进程的一部分来关闭。缺省的 destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。

当服务器卸装 Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个 Servlet 在运行 service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成。 (4) GetServletConfig()方法

GetServletConfig ()方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext 。 ServletContext 接口提供有关 servlet 的环境信息。 (5) GetServletInfo()方法

GetServletInfo ()方法是一个可选的方法,它提供有关 servlet 的信息,如作者、版本、版权。

当服务器调用 sevlet 的 Service ()、 doGet ()和 doPost ()这三个方法时,均需要 “请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个通信途径。 javax.servlet 软件包中的相关类为 ServletResponse 和 ServletRequest ,而 javax.servlet.http 软件包中的相关类为 HttpServletRequest 和 HttpServletResponse 。 Servlet 通过这些对象与服务器通信并最终与客户机通信。 Servlet 能通过调用“请求”对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。 Servlet 可以调用“响应”对象的方法发送响应,该响应是准备发回客户机的。

16/Java Servlet的主要功能和作用是什么?

Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet ,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet 。装入后, Servlet 继续运行直到其它客户机发出请求。 Servlet 的功能涉及范围很广。例如, Servlet 可完成如下功能:

(1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML 页面。 (2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面( HTML 片段)。 (3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。

(4) 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如, Servlet 可

以是多参与者的游戏服务器。

(5) 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至 applet 的新连接,并将该连

接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下, applet 也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP )进行通信。

(6) 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括( SSI )。 (7) 将定制的处理提供给所有服务器的标准例行程序。例如, Servlet 可以修改如何认证用户。

17/Request对象的主要方法有哪些?

setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例 getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组 getCharacterEncoding():返回请求中的字符编码方式 getContentLength():返回请求的Body的长度 实例

getInputStream():返回请求的输入流,用于获得请求中的数据 getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值 getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值 getProtocol():获取客户端向服务器端传送数据所依据的协议名称 getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址 getRemoteAddr():获取客户端的IP地址 getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径 getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性 18/某银行信息中心的J2EE笔试题

1.jsp中定义javabean的作用域可以在用户会话注销后仍能够访问的是?(多选) a.page b.session c.application d.request

2.当浏览器第二次访问以下下jsp网页时输出结果是什么? <%! int a=0; %> <% int b=0;

a++; b++; %>

a:<%=a %>
b:<%=b %>

3.web.xml中不包括哪些定义(多选) a.默认起始页

b.servlet启动延迟时间定义 c.error处理页面

d.jsp文件改动后重新载入时间

4.需要在两个数据库之间完成事务交易,需要应用服务器中配置那种连接池?(多选) a.XA Datasource b.C3PO的连接池 c.type2的连接池 d.type4方式的连接池。

5.使用纯java 实现的jdbc 驱动是哪种类型的驱动(多选) a.type1 b,type2 c.type3 d,type4 6.线程安全的类是那些?(多选) a.webwork 1.x框架中的action 处理类 b.struts1.x 框架中的action处理类 c.普通的Servlet d.普通的Filter

7.下列解析大量数据XML的方式那种速度最快?(多选) a.DOM b. SAX c.JDOM d.JAX

8.JSP中定义<%@ page contentType=”text/html;charset=utf-8″ pageEncoding=”GBK”%>, 说明(多选)

a.输出的网页编码是utf8的 b.输出的网页编码是GBK的

c.输出的网页采用utf编码,显示在页面的字符集使用GBK d.输出的网页采用GBK编码,显示在页面的字符集使用utf8编码 9.在servlet的doGet方法,下面哪几个说法是错误的(多选)

a.redirect到一个jsp页面时,之前doGet 放在request中的对象都会丢失 b.redirect到一个jsp页面时,之前doGet 放在session中的对象都会丢失 c.forward到一个jsp页面时,之前doGet 放在request中的对象都会丢失 d.forward到一个jsp页面时,之前doGet 放在session中的对象都会丢失 10.web.xml中定义了如下内容,下列哪种说法是错误的?(多选)

/sys/myresource javax.sql.DataSource Container

a.应用服务器需要配置名为/sys/myresource的数据库连接池,才能为应用提供数据访问 b.应用代码中使用了look up (”/sys/myresource”) 的方式获得资源 c./sys/myresource的资源的认证方式是在应用服务器中配置的 d./sys/myresource在war的文件部署时需要映射到应用服务器上

11.在j2ee服务中,下列哪些url进行GET方式调用时,可以被配置成Filter类拦截(多选) a./jsp/hello.jsp b./images/logo.gif c./webapp/showView.do d./webapp/showChart

19/描述JSP和Servlet的区别、共同点、各自应用的范围

JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet

来生成动态网页;JSP由HTML代码和JSP标签构成,可以方便地编写动态网页

因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层. 答案2:

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

20/介绍一下javax.servlet.Servlet接口及其主要方法

Servlet接口的主要作用是提供Servlet生命周期的init()、service()和destroy()方法。 servlet接口中的主要方法有:

1、void init(ServletConfit config)throws ServletException

在servlet被载入后和实施服务前由servlet引擎进行一次性调用。如果init()产生溢出UnavailableException,则 servle退出服务。 2、ServletConfig getServletConfig()

返回传递到servlet的init()方法的ServletConfig对象 void service(ServletRequest request, ServletResponse response)throws ServletException,IOException 处理request对象中描述的请求,使用response对象返回请求结果

String getServletInfo() 返回描述servlet的一个字符串

void destory() 当servlet将要卸载时由servlet引擎调用,销毁Servlet实例。 21/HttpServlet类中的主要方法都有哪些?各自的作用是什么?

HttpServlet的主要方法有 doGet, doPost, doPut, doDelete, doTrace等等 Void

doGet(HttpServletRequest

request,HttpServletResponse

response)throws

ServletException,IOException 由servlet引擎调用用处理一个HTTP GET请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。 Void

doPost(HttpServletRequest

request,HttpServletResponse

response)throws

ServletException,IOException 由servlet引擎调用用处理一个HTTP POST请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。 Void

doPut(HttpServletRequest

request,HttpServletResponse

response)throws

ServletException,IOException 由servlet引擎调用用处理一个HTTP PUT请求。本方法中请求URI指出被载入的文件位置。 Void

doDelete(HttpServletRequest

request,HttpServletResponse

response)throws

ServletException,IOException 由servlet引擎调用用处理一个HTTP DELETE请求。请求URI指出资源被删除。

Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由servlet引擎调用用处理一个HTTP OPTIONS请求。返回一个Allow响应头标表明此servlet支持的HTTP方法。一个servlet不需要覆盖此方法,因为 HttpServlet方法已经实现规范所需的功能。 Void

doTrace(HttpServletRequest

request,HttpServletResponse

response)throws

ServletException,IOException 由servlet引擎调用用处理一个HTTP TRACE请求。使得请求头标被反馈成响应关标。一个servlet不需要覆盖此方法,因为HttpServlet方法已经实现HTTP规范所需的功能。 Void

service(HttpServletRequest

request,HttpServletResponse

response)throws

ServletException,IOException Service(Request request,Response response)调用的一个立即方法,带有指定HTTP请求和响应。此方法实际上将请求导向doGet()、doPost()等等。不应该覆盖此方法。

Void service(Request request,Response response)throws ServletException,IOException 将请求和响应对象置入其指定的HTTP子类,并调用指定HTTP的service()方法。 22/JSP&Servlet技术面试题

1.描述JSP和Servlet的区别、共同点、各自应用的范围

2.在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(< > &“”) 3.在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。 4.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。

5.列出Jsp中包含外部文件的方式,两者有何区别。 6.说明Jsp中errorPage的作用,应用范围。 7.介绍在Jsp中如何使用JavaBeans。 8.简单介绍JSP的标记库

9. Jsp和Servlet中的请求转发分别如何实现。

23/Java Web方向的综合面试题

1. HTML全称,和XML的相同点和不同点。 2. 简述HTML的作用,以及掌握HTML的要点。 3. CSS中层叠的含义

4. 写出CSS选择符的种类以及它们的层叠次序。 5. 你对盒子模式的理解 6. 什么是JSP

7. JSP执行原理,并解释JSP第一次执行慢的原因。 8. JSP和servlet的相同点和不同点

9. JSP页面中代码混乱,如何顺利调试一个页面。

10. 在JSP网页开发中,include包含的好处是什么。要注意些什么问题

11. 你在开发页面时,如果出现图片没有显示,或CSS样式没有发挥作用你会如何处理 12. setAttribute的作用,使用时如何避免错误

13. 谈谈jsp jsp+javabean,MVC ,框架技术(比如DWR)的优缺点。 14. 你在写MVC增删改查时的步骤。容易出bug的地方有哪些 15. 404错误的原因

16. 简述application session request生命周期与作用域

17. servlet转页面的两种方式,不同点是什么。JS能转页吗。如果能怎么写 18. AJAX包括哪些技术 19. AJAX的原理

20. 你对AJAX的认识(越多越好) 21. JS的常规套路

22. javascript在浏览器的作用 23. JS的语法中function的特点。

24. 陈述js中的事件使用方式,不同事件的应用的场合 25. 什么是DOM 什么是BOM。DOM的使用要点 26. JSON的作用。

27. setInterval和setTimeout的区别 28. open()和showModalDialog()的区别 29. frameset frame iframe的区别 30. JS提交表单的好处 31. 你对JS验证的认识

32. 写一个迭代JS数组的小例子 33. 写一个迭代JSON的小例子

34. 全局函数parseInt, parseFloat ,eval的作用 35. 写例子能说明DOM增删改查。 36. DWR的配置流程。

37. 在dwr中得到ServletAPI要通过哪个类 38. 用EXTJS做表示层,后台需要做那些改变 39. 无级树的实现要点。

40. 谈谈SQL中在写分组是的要领 41. 你对手册的认识,对英文文档的认识 42. 谈谈你在写SQL语句时的分析步骤

43. 描述PreparedStatement和Statement的区别 44. DatabaseMetadata和ResultSetMetadata的区别 45. RIA的认识

46. 数据库中索引的作用。索引是否越多越好,为什么? 47. 简述笛卡尔乘积与多表连接查询 48. 子查询在SQL语句个子句中的作用 49. 你如何看待编码规范。

50. “在一个团队中要么付出你的汗水,要么付出你的智慧,如果都没有,请你走开”。你对这句话的理解

24/几道JSP面试题(附答案)

1、如何混合使用Jsp和SSI #include? 在JSP中可以使用如下方式包含纯HTML:

但是如果data.inc中包含JSP CODE ,我们可以使用: 2、如何执行一个线程安全的JSP? 只需增加如下指令

3、JSP如何处理HTML FORM中的数据? 通过内置的request对象即可,如下: 4、在JSP如何包含一个静态文件? 静态包含如下: 动态包含如下:

5、在JSP中如何使用注释? 主要有四中方法: 1。 2。// 3。/**与**/ 4。

6、在JSP中如何执行浏览重定向? 使

response.sendRedirect(”http://ybwen.home.chinaren.com/index.html”); 也能物理地改变HTTP HEADER属性,如下:

7、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 把如下脚本加入到JSP文件的开始即可: 8、在JSP中如何设置COOKIE?

COOKIE是作为HTTP HEADER的一部分被发送的,如下方法即可设置: 9、在JSP中如何删除一个COOKIE?

10、在一个JSP的请求处理中如何停止JSP的执行 如下例:

11、在JSP中如何定义方法

你可以定义方法,但是你不能直接访问JSP的内置对象,而是通过参数的方法传递。如下: 12、如果BROWSER已关闭了COOKIES,在JSP中我如何打开SESSION来跟踪 使用URL重写即可,如下: hello1.jsp hello2.jsp hello2.jsp

13、在JSP中能发送EMAIL吗

可以使用SUN的专用包:sun.net.smtp包。如下脚本使用SmtpClient类发送EMAIL。 14、在SERVLET中我能调用一个JSP错误页吗

当然没问题,如下展示了如何在一个SERVLET控制逻辑单元内调用一个JSP错误页面。 protected void sendErrorRedirect(HttpServletRequest request HttpServletResponse response String errorPageURL Throwable e)

throws ServletException IOException {

request.setAttribute (”javax.servlet.jsp.jspException” e); getServletConfig().getServletContext().

getRequestDispatcher(errorPageURL).forward(request response); }

public void doPost(HttpServletRequest requestHttpServletResponse response) { try {

// do something } catch (Exception ex) { try {

sendErrorRedirect(requestresponse”/jsp/MyErrorPage.jsp”ex);

} catch (Exception e) { e.printStackTrace(); } } }

15、JSP和applet如何通讯 JSP如何与EJB SessionBean通讯 下面的代码段作了很好的示范

16、当我使用一个结果集时,如何防止字段为”null”的字域显示在我的HTML输入文本域中? 可以定义一个简单的函数来达到目的,如下: 然后在JSP的FORM中,可以这样使用

17、如何中SERVLET或JSP下载一个文件(如:binarytextexecutable)? 现提供两个解决方案: A:使用HTTP,

B:在Servlet中,通过设置ContentType和使用java.io包的Stream等类可作到.例如: response.setContentType(”application/x-msword”); 然后想输出缓冲中写一些东东即可。

18、使用useBean标志初始化BEAN时如何接受初始化参数 使用如下两标签即可:

19、使用JSP如何获得客户浏览器的信息? 使用request.getHeader(String)即可 20、能象调用子程序一样调用JSP吗? 当然可以,用

21、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS? 与之间的差别?

前一个为静态包含,而后一个为动态包含 22、JSP的缺点?

1。对JAVA程序进行调试没有好东东

2。因大多数的servlet引擎不支持connection pooling 3。Servlet引擎没有标准 4。JSP与其它脚本语言的交互 23、JSP能进行递归调用吗? 当然可以如对form的提交给本页 34、如何实现JSP的国际化?

为各种版本提供resource bundles属性文件即可 25、在JSP中如何写文本文件? 使用PrintWriter对象,如:

26、如何在JSP中包括绝对路径文件? 使用URLConnection即可。

27、在servlets和JSP之间能共享session对象吗? 当然可以,

HttpSession session = request.getSession(true); session.putValue(”variable”\”);

28、javascript的变量能复制到JSP的SESSION中吗? 29、如何设置cookie在某一时间后过期? 用Cookie.setMaxAge(int)

30、如何获得当前的sessions数?

可以使用HttpSessionBindingListeners来跟踪

31、能设置一些代码在我所有的JSP文件之上运行?如果可以,能共享吗?

当然可以可以为你的JSP文件定义一个别名:/jsp/=ybwen.genius.myPreprocessingServlet而以/jsp/为前缀的文件可以使用

32、对一个JSP页,如果多个客户端同时请求它,同步可能吗? 在jsp:useBean语法中使用beanName有何好处? beanName使用Beans.instantiate()初始化Bean 33、当我使用时,在浏览器的地址栏没有改变? 使用response.sendRedirect(”newURL”) 34、如何转换JSP 0.9版本的文件到JSP1.1? 可使用sed/awk即可

35、使用JSP能设置HTML FORM中输入域的焦点,不用javascript? 没办法

36、使用JSP连接到数据库连接缓冲池的最好方法是什么? 1.使用JDBC2。0中带有此服务的Driver 2.使用提供有此服务的Application server 3.自己写

25/在servlets和JSP之间能共享session对象吗? 当然可以,

HttpSession session = request.getSession(true); session.putValue(”variable”,”value”); 26/在JSP中如何写文本文件? 使用PrintWriter对象,如: <%@ page import=”java.io.*” %> <%

String str = “print me”;

String nameOfTextFile = “/usr/anil/imp.txt”;

try {

PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile)); pw.println(str); pw.close();

} catch(IOException e) { out.println(e.getMessage()); } %>

27/JSP的缺点?

1.对JAVA程序进行调试没有好东东

2.因大多数的servlet引擎不支持connection pooling 3.Servlet引擎没有标准 4.JSP与其它脚本语言的交互

28/如何中SERVLET或JSP下载一个文件(如:binary,text,executable)? 现提供两个解决方案: A:使用HTTP,

B:在Servlet中,通过设置ContentType和使用java.io包的Stream等类可作到.例如: response.setContentType(”application/x-msword”); 然后想输出缓冲中写一些东东即可。

29/如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 把如下脚本加入到JSP文件的开始即可: <%

response.setHeader(”Cache-Control”,”no-store”); //HTTP 1.1 response.setHeader(”Pragma”,”no-cache”); //HTTP 1.0

response.setDateHeader (”Expires”, 0); //prevents caching at the proxy server %>

30/Servlet执行时一般实现哪几个方法? public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo()

public void service(ServletRequest request,ServletResponse response) public void destroy() 31/Request对象的主要方法

setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例 getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式 getContentLength():返回请求的Body的长度

getHeader(String name):获得HTTP协议定义的文件头信息

getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例 getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例 getInputStream():返回请求的输入流,用于获得请求中的数据 getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值 getProtocol():获取客户端向服务器端传送数据所依据的协议名称 getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址 getRemoteAddr():获取客户端的IP地址 getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径 getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性 32JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是”类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 33/如何现实servlet的单线程模式 <%@ page isThreadSafe=”false”%>

34/说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

35/用ServletRequest和ServletContext调用ReqestDispatcher有什么区别?

在用ServletRequest调用RequestDispatcher的时候可以用相对URL, 但是ServletContext

不行。

36/当容器调用servlet的destory()方法的时候,servlet会马上销毁么? 如果当时这个servlet正在执

行其他任务或者线程呢?

是的, 当容器调用servlet的destory()方法的时候,servlet会马上销毁,但是容器在调用destory()方法之前,会等servlet的service()方法结束剩余的任务。 37/我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢? 容器会自动为

Servlet

写一个无参的构造方法,容器是用

Class.forName(className).newInstance()来创建servlet的实例的。 38/Servlet的实例是在生命周期什么时候创建的? 配置servlet最重要的是什么?

Servlet实例是在servlet第一次在容器中被加载的是时候创建的, Init()方法是用来配置这个servlet实力的, 这个方法在servlet的生命周期中只被调用一次,所以应该把所有servlet生命周期中的配置 39/Servlet的生命周期?

Servlet是一种可以 在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命 周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生 命周期的具体说明如下:

Servlet容器完成加载Servlet类和实例化一个Servlet对象 init()方法完成初始化工作,该方法由Servlet容器调用完成 service()方法处理客户端请求,并返回响应结果

destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源

本文来源:https://www.bwwdw.com/article/wtmf.html

Top