面试_技术问题_sevrlet与jsp

时间:2022-08-05 12:04:08

0、JSP编译指令标记

page指令、include指令、taglib指令(声明自定义的标签库)

 

1, JSP中九大内置对象为:

request  请求对象  类型 javax.servlet.ServletRequest  作用域Request

response  响应对象   类型 javax.servlet.SrvletResponse   作用域Page

pageContext  页面上下文对象  类型 javax.servlet.jsp.PageContext  作用域  Page

session   会话对象  类型 javax.servlet.http.HttpSession  作用域Session

application  应用程序对象  类型 javax.servlet.ServletContext  作用域Application

out  输出对象  类型 javax.servlet.jsp.JspWriter  作用域  Page

config  配置对象 类型 javax.servlet.ServletConfig   作用域Page

page   页面对象   类型 javax.lang.Object   作用域  Page

exception  例外对象    类型 javax.lang.Throwable  作用域  page

 

2jsp有哪些动作?作用分别是什么?

:JSP共有以下6种基本动作

jsp:include:在页面被请求的时候引入一个文件(在页面得到请求时动态包含一个文件)。

jsp:useBean:寻找或者实例化一个JavaBean

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性(获取JavaBean的属性值并输出)。

jsp:forward:把请求转到一个新的页面。

jsp:plugin:根据浏览器类型为Java插件生成OBJECTEMBED标记(连接客户端的AppletBean插件)

jsp:param

3JSP中动态INCLUDE与静态INCLUDE的区别?

答:动态INCLUDEjsp:include动作实现

<jsp:include page="included.jsp" flush="true" />总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

静态INCLUDEinclude伪码实现,不会检查所含文件的变化,适用于包含静态页面

<%@ include file="included.htm" %>

 

两者之间的区别:

1) 静态包含在转换成为java文件的时候将要包含的文件包含进来,作为一个整体编译。动态包含是各个包含文件分别转换,分别编译。

2) 静态包含在两个文件中不能有相同的变量,动态包含允许

3) 静态包含只能包含文件,动态包含还可以包含servlet输出的结果

4) 静态包含不能使用变量作为文件名,动态包含可以使用变量作为文件名

5) 动态包含文件发生变化,包含文件会感知变化。

 

4, 跳转有两种方法:RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法.

   区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值。后者则是完全的跳转,浏览器将会得到跳转的地址,

   并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用Request

   Dispatcher.forward()方法,这样也有助于隐藏实际的链接。   

 

 

重定向:response.sendRedirect("URL");---不带request信息跳转

转发:request.getRequestDispatcher("URL").forward(request,response);      /  <jsp:forward>      ---带着request中的信息跳转

   1.转发在服务器端完成的;重定向是在客户端完成的

2.转发的速度快;重定向速度慢

3.转发的是同一次请求;重定向是两次不同请求

4.转发地址栏没有变化;重定向地址栏有变化

5.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成  

   

5, 说一说Servlet的生命周期?

    1,初始化阶段  调用init()方法

2,响应客户请求阶段  调用service()方法,根据请求参数的不同调用doGet()或者doPost()方法

3,终止阶段  调用destroy()方法

 

6.说出在JSP页面里是怎么分页的?

页面需要保存以下参数:

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

每页显示行数:设定值

当前页数:请求参数

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

7getpost的区别?

    1Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

2Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,

   按照变量和值相对应的方式,传递到action所指向URL

3Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,

这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。

4Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。

5Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

6GetForm的默认方法。

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

   <%@ page isThreadSafe=”false”%>

 

9JSP四种会话跟踪技术。

   page          是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的include 指令,但是没有include 动作)表示。

   request       是代表与 Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web组件(由于 forward指令和 include动作的关系)

   session       是代表与用于某个 Web客户机的一个用户体验相关的对象和属性。一个 Web会话可以也经常会跨越多个客户机请求

   application   是代表与整个 Web应用程序相关的对象和属性。这实质上是跨越整个 Web应用程序,包括多个页面、请求和会话的一个全局作用域

 

10, JSPServlet的区别、共同点、各自应用的范围?

    尽管JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事物处理而通过Servlet来生成动态网页很不直观;

JSPHTML代码和JSP标签构成可以方便地编写动态网页因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页

11.描述CookieSession的作用,区别和各自的应用范围,Session工作原理。

    cookie记录在客户端,session记录在服务器端;cookie因为保存在客户端,所以不是很安全,保存在服务器端会更安全。

cookie有长度限制,session没有。每一个session在服务端有一个sessionID作一个标识。存储的数据量大;浏览器的Cookies 不能超过300

    个,并且每个不能超过 4KB,因此总Cookie 文件大小限制在1200KB 之内。

Cookie是在客户端开辟的一块可长期存储用户信息的地方;Session是在服务器内存中开辟的一块存储用户信息的地方;当客户第一次访问服务器时,

服务器在内存创建对应的Session给访问客户,当客户离开或时间过期时;服务器自动销毁SessionSession是由容器管理的。

12. 列出Jsp中包含外部文件的方式,两者有何区别。

    1<jsp:include page="b.jsp" /> 2: <%@ include file="b.jsp">

    区别1<jsp:include page="b.jsp" />(先执行,后包含)此标签表示法:能动态区别加进来的是动态页面还是静态页面,对于静态页面则直接将资源包含(仅取其文本)

<%@ include file="b.jsp">此指令表示:静态地包含页面,不管其内容如何,不过是静态页面还是动态页面都首先将页面的内容先加进来。

区别2<jsp:include page="b.jsp" />可以分开写成:<jsp:include page="b.jsp" ><jsp:param name="参数名" value="参数值"/></jsp:include>这样就可以传递参数。

13. 说明JsperrorPage的作用,应用范围。

    表示错误页的操作,在一般的站点中,只要一个程序出现了错误,就是产生了异常,则可以统一跳转到一个页面进行显示,那么这种操作就属于错误页的处理,

要想进行错误页的设置,需要满足以下两个条件:

    1、在错误能够处理的页上的page指令中,增加:isErrorPage="true",表示可以处理错误

    2、在每一个页面指定errorPage,指向isErrorPagetrue的页面。

    如果希望配置一种全局的错误处理,则可以在web.xml中进行配置

    <error-page>

        <error-code>404</error-code>

        <location>/error.jsp</location>

    </error-page>

    <error-page>

        <exception-type>java.lang.NullPointException</exception-type>

        <location>/error.jsp</location>

    </error-page>

   一旦发生错误就会跳转到指定页面,此方法属于服务器跳转

   

14.JspServlet中的请求转发分别如何实现。

   jsp        request.getRequestDispatcher("/*.jsp").forward(request,response);

   servlet     sendRedirect();  forward();

      

15,servlet 如何得到服务器的name,port,info?

   ServletRequest.getServletName();

   ServletRequest.getServletPort();

   ServletRequest.getServletInfo();

   

16,servlet如何得到客户端信息?

   ServletRequest.getRemoteAddr();

   ServletRequest.getRemoteHost();

   

17, filter的作用是什么?主要实现什么方法?doFilter()方法中 参数request,response的全称是什么?

    filter使用户可以改变一个request和修改一个response,它并不是一个servlet,不能产生一个response。它能在一个request到达servlet之前预处理request,也可以在离开servlet时处理

response.换句话说,filter其实是一个“servlet chaining(servlet)。一个filter包括:

servlet调用之前截获

servlet调用之前检查servlet request

根据需要修改request头 和request 数据

根据需要修改response头 和response数据

servlet调用之后截获

Filter接口定义了三个方法:

  1void setFilterConfig(FilterConfig config); //设置filter的配置对象

  2FilterConfig getFilterConfig();//返回filter的配置对象

  3doFilter(ServletRequest req,ServletResponse res,FilterChain chain);//执行filer工作。

request 全称: HttpServletRequest   response全称: HttpServletResponse

18,当容器调用servletdestory()方法的时候,servlet会马上销毁么? 如果当时这个servlet正在执行其他任务或者线程呢?

是的, 当容器调用servletdestory()方法的时候,servlet会马上销毁,但是容器在调用destory()

方法之前,会等servlet service()方法结束剩余的任务。

 

19,我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢?

    容器会自动为servlet写一个无参的构造方法,并通过Class.forName(className).newInstance()来创建servlet实例

20,页面间对象传递的方法?

     request,session,application,cookie