小博老师收集Java经典面试题 ——Servlet和JSP常见面试题

来源:互联网 发布:北京编程培训 编辑:程序博客网 时间:2024/05/22 17:02

[面试题]

1、简单说说tomcat的配置?

JAVA_HOME=JDK的根目录

CATALINA_HOME=tomcat的根目录

 

CATALINA-HOME\conf\server.xml:可以配置tomcat的端口,可以配置tomcat中下连接池。

CATALINA-HOME\common\lib:存放公用的类包

 

My eclipse中如何配置tomcat

在eclipse中,选择windows->preference->MyEclipse->ApplicationServer->Tomcat

选择Tomcat 的安装目录,并选择TomCat所需的jdk,选择enable,确定即可。

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

jsp:include:在运行时调用另一个页面,变量是可以重复的。

<%@include file=””%>:在转译时合在一起,会成为同一个类,变量不可以重复。

3forwardredirect的区别?

forward: 转发,在下一个页面中,request保留上一个页面中的request的所有值

redirect: 跳转,不传递request对象。

4Servlet的体系结构是什么? 

Servlet

GenericServlet

HttpServlet

自定义

5、如何实现一个自定义的servlet? 

extends HttpServlet 并覆盖doPost或doGet方法

 

web.xml中进行部署

6Servlet的生命周期是什么?

Init

多次执行doGet或doPost  

Destroy

 

 

7jsp就是一个servlet是否正确?

8、请罗列jsp中的脚本、指令及动作? 

脚本

<%%>  <%=%>  <%!%> <%----%>

指令

<%@page contentType=text/html;charset=utf-8language=javaimport=””%>

<%@include file=””%>

<%@taglib uri=”” prefix=””%>

动作:

<jsp:useBean class=”” id=”” scope=””>  在scope中如果没有实例化一个对象,如果有直接用以前的。

<jsp:getProperty name=”” property=””>  向一个bean中设置属性值

<jsp:forward >  jsp页的转发

<jsp:include page=””>  导入一个jsp页面

9JSP的内置对象及方法

Request  request表示HttpServletRequest对象。取客户端表单域信息及cookie, header, 和session

response response表示HttpServletResponse对象,对客户端的响应返回文本、写cookies。

out out 向客户端打印html文本.

pageContext :当前jsp页面的上下文环境,可以得到session、request、application等内置对象,在自定义标签中使用的很多。

session session表示一个请求的javax.servlet.http.HttpSession对象。Session一个用户多个页面共享同一变量。

application applicaton 表示一个javax.servle.ServletContext对象。存放容器级的变量。

config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page page表示从该页面产生的一个servlet实例

exception:异常,当iserrorpage=true

10、说出在JSP页面里是怎么分页的?

页面需要保存以下参数:(数据库的分页及比较)

总行数:根据sql语句得到总行数

每页显示行数:设定值

当前页数:请求参数

页面根据当前页数和每页行数计算出当前页第一行行数,定位结果集到此行,对结果集取出每页显示行数的行即可。

 

数据库:

Sqlserver:

SELECT TOP 页大小 *

FROM TestTable

 

WHERE (ID NOT IN

        (SELECT TOP 页大小*(页数-1) id

         FROM 表

         ORDER BY id))

ORDER BY ID

 

 

--pageSize=5  页大小

--pageIndex=2 所要的页

--如果有主键可以,没以及键不行

select top 5 *

from aa where a1 not in

(select top 5 a1 from aa order by a1)

order by a1;

 

oracle:

select * from '||v_sql||' where rownum<'||

         pageLastRow||'minus select * from '||v_sql

         ||' where rownum<'||pageFirstRow;

 

 

Session

先取出数据中的所有信息封装到对象并保存在session中,转发到jsp页面做如下处理。

<table border="1">

    <tr>

      <td>a1</td>

      <td>a2</td>

    </tr>

<%

     List l=(List)session.getAttribute("as");

     //一页显示多少行

     int pageSize=3;

     //总页数

     int pageCount=0;

     int currentPage=1;

     if(l!=null && l.size()>0)

     {

     pageCount=(l.size()/pageSize)+(l.size()%pageSize==0?0:1);

     if(request.getParameter("page")!=null)

     {

       currentPage=Integer.parseInt(request.getParameter("page"));

     }

     if(currentPage<1)

     {

       currentPage=1;

     }

     if(currentPage>pageCount)

     {

       currentPage=pageCount;

     }

     for (int i = (currentPage-1)*pageSize; i <(currentPage-1)*pageSize+pageSize; i++)

     {

       if(i>=l.size())

       {

         break;

       }

       Aa aa=(Aa)l.get(i);

       %>

        <tr>

      <td><%=aa.getA1()%></td>

      <td><%=aa.getA2()%></td>

    </tr>

       <%

       }

     }

%>

<tr>

  <td colspan="2">

    <%

    if(currentPage!=1)

    {

    %>

    <a href="page.jsp?page=1">首页</a>  

    <a href="page.jsp?page=<%=currentPage-1%>">上一页</a>  

    <%

    }

    if(currentPage!=pageCount)

    {

    %>

    <a href="page.jsp?page=<%=currentPage+1%>">下一页</a>  

    <a href="page.jsp?page=<%=pageCount%>">最后一页</a>  

    <%

    }

    %>

  </td>

</tr>

  </table>

11、include的两种实现方式的区别?

<@include file>:在将jsp生成servlet类前将两个文件和在一起,生成一个java类,一起运行的。所以是一家子,当中的变量名不能重名。

<jsp:include page>:是两个类,是一个调用关系,在运行时动态的调用,不是一家子,可以重复变量。

12jsp页面中两种跳转方式分别是什么?有什么区别?

转发: 保留上次的request

<jsp:forward>

actionMapping.findForWard(“”);

pageContext.forward();

request.getRequestDispacher(“a.jsp”).forward(request,response)

跳转:不保留上次的request

Response.setRedirect(“”)

13、描述JSPServlet的区别、共同点、各自应用的范围

Jsp主要在于页面的显示动态生成页面,可以与html标记一起使用,其还是要生成为一个servlet。

Servlet:主要是控制的处理,如调用业务层,跳转不同的jsp页面。

Mvc:

Jsp:v

Servlet:c

14、在JSP中如何读取客户端的请求,如何确定某个Jsp文件的真实路径?

Request.getparameter(“”)

<%=application.getRealPath("aa.jsp") %>

15、描述Cookie和Session的作用,区别和各自的应用范围Session工作原理。

Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。

Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。

16、说明Jsp中errorPage的作用,应用范围。

正常页面中

%@page erropage=error.jsp%

错误页面

<%@page iserrorpage=true%>

 有一内置对象:exception

17、介绍在Jsp中如何使用JavaBeans

<jsp:useBean class=”” id=””scope=””/>

<%

New 类();

%>

19、简单介绍JSP的标记库

做一个标记处理类 extends TagSupport

通过tld说明标记处理的类的前缀及后缀

web.xml中说明tld文件

<taglib>

<taglib-uri>

<taglib-location>

<taglib>

在jsp页面是引用tld<%@taglib uri=”” prefix=””%>

20Servlet中的核心类有那些,各有什么特点?

ServletContext:容器,放置全局变量

setAtribute()

getAttribute()

ServletConfig:一个servlet的配置

getInitParameter(”名称”)

HttpServletRequest:封装的所有的请求

getParameterValue(”名称”)

getParameterValues(”称”)

getSession();

getAttribute(” 名称”);

getRequestDispatch(a.jsp).forward(request,response)

HttpServletResponse:响应

getOut();

sendRedirect(””)

HttpSession:一个用户多个页面共享同一变量

setAttribute(””,””)

21Servlet中重要的包有那些,有什么区别?

javax.servlet.*;javax.servlet.http.*;

22、说出Servlet的生命周期,并说出ServletCGI的区别?

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

 

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

23、什么情况下调用doGet()doPost()

Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

25、如何现实servlet的单线程模式

在doGet及doPost方法前加入synchoronized

JSP:

<%@ page isThreadSafe="true"%>

27Request对象的主要方法

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):删除请求中的一个属性

28、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

  Public String translate (String str) {

    String tempStr = "";

    try {

      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

      tempStr = tempStr.trim();

    }

    catch (Exception e) {

      System.err.println(e.getMessage());

    }

    return tempStr;

  }

 

30、Servlet执行时一般实现哪几个方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

 

0 0
原创粉丝点击