面试常备题-----jsp基础知识
已经大三了,开始为明年的工作而奔波,这里收集一些面试和笔试的题目。下面是jsp的一些基础知识。
jsp(Java Server Pages)是在传统的网页HTML文件中插入java程序段和jsp标记,从而形成jsp文件,类似于ASP。用jsp开发的web应用的好处就和java一样,是跨平台的。jsp的特点就是所有的操作都是在服务器端执行,客户端得到的仅仅是结果,这样就能大大降低了对客户浏览器的要求,即使客户浏览器不支持java,也可以访问jsp网页。
介绍完jsp后,接下来就是一些常见的jsp面试和笔试题目。
1.jsp:include,jsp:forward两种跳转方式分别是什么?有什么区别?
首先必须知道,jsp:include和jsp:forward是jsp动作,即一系列可以调用内建于网络服务器中的功能的XML标签。
<jsp:include>:Java Servlet 暂时接管指定的jsp页面的请求和响应,当处理完该jsp页面后就马上把控制权交还给当前jsp页。这样的好处就是jsp代码可以在多个jsp页中共享而不用复制,这就像是我们在javascript中提倡使用js文件的原因。
<jsp:forward>:用于处理对另一个jsp或servlet的请求和响应,控制权永远不会交还给当前jsp页,因此后面的部分永远不会被执行。
常用的跳转页面有两种方式:
(1)forward跳转:
像是这样:
<jsp:forward page="跳转页面"/>
采用这种方式,只需要服务器端跳转,地址栏不改变。执行到跳转语句后马上无条件跳转,之后的代码不再执行,所以我们在跳转前一定要记得释放全部资源。request设置的属性在跳转后的页面仍可以使用,传递参数是通过<jsp:param name="参数名" value="参数值"/>进行传递。
(2)response跳转:
像是这样:
response.sendRedirect("跳转页面地址");
采用这种方式,客户端跳转,地址栏也会改变。所有的代码执行完毕后跳转,跳转后的页面不能使用上一个页面的request属性,使用地址重写传递参数。像是这样:
response.sendRedirect("URL?参数名=参数值")
2.简述jsp的内置对象及作用
jsp有九大内置对象,它们是可以不加声明就在jsp页面脚本(java程序片和java表达式)中使用的成员变量。内置对象有以下特点:
(1)由jsp规范提供,不用编写者实例化;
(2)通过Web容器实现和管理;
(3)所有jsp页面均可以使用;
(4)只有在脚本元素的表达式或代码段中才可以使用,像是这样:<%=内置对象%>或<%内置对象%>
接下来就是分别简单介绍一下各个内置对象:
(1)输入/输出对象
a.request对象(Javax.servlet.http.HttpServletRequest)
包含了有关浏览器请求的信息,通过该对象可以获得请求中的头信息,Cookie和请求参数,也就是封装了客户端请求信息的对象。
b.response对象(javax.servlet.http.HttpServletResponse)
作为jsp页面处理结果返回给用户的响应存储在该对象中,并提供了设置响应内容,响应头以及重定向的方法,像是Cookie,头信息等。
c.out对象(javax.servlet.jsp.jspWriter)
用于将内容写入jsp页面实例的输出流中,提供了用于向浏览器回送输出结果的方法。
(2)通信控制对象
a.pageContext对象(javax.servlet.jsp.PageContext)
描述了当前jsp页面的运行环境,可以返回jsp页面的其他隐式对象及其属性的访问,还实现了将控制权从当前页面传输至其他页面的方法。使用该对象,我们可以访问jsp页面所有的对象及命名空间,像是本页所有的session,或者本页面所在的application的某一属性值。
b.session对象(javax.servlet.http.HttpSession)
会话对象指的是客户端与服务器的一次会话并存储有关此会话的信息,可以将属性赋给另一个会话,每个属性都有名称和值。所谓的会话对象主要用于存储和检索属性值。
c.application对象(javax.servlet.ServletContext)
存储了运行jsp页面的servlet以及在同一应用程序中的任何Web组件的上下文信息。它实现了用户间的数据共享,可存放全局变量。它存活于服务器的启动到关闭期间,这样的好处就是在用户的前后连接或不同用户间的连接中,可以对此对象的同一属性进行操作。但正如全局变量的坏处一样,我们在任何地方对此对象属性的操作,都将影响到其他用户的访问。
(3)Servlet对象
a.page对象(java.lang.object)
表示当前jsp页面的servlet实例,相当于类中的this指针。
b.config对象(javax.servlet.ServletConfig)
该对象用于存取servlet实例的初始化参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。
(4)错误处理对象---exception对象(java.lang.Throwable)
在某个页面抛出异常时,将转发至jsp错误页面,提供此对象是为了在jsp中处理错误,只有在错误页面中才可使用,像是这样:
<%@page isErrorPage=“true”%>
这是必须的,否则就无法进行编译。
3.Servlet的基本架构
先简单介绍一下Servlet。Servlet是服务器端的java应用程序,它起源于java applet。它具有独立于平台和协议的特性,可以生成动态的web页面。它担当客户请求(Web浏览器或其他Http客户程序)与服务器响应(Http服务器上的数据库或应用程序)的中间层。
Servlet的基本架构可以简单的归纳为下面的过程:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SomeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 使用“request”读取和请求有关的信息(比如Cookies) // 和表单数据 // 使用“response”指定HTTP应答状态代码和应答头 // (比如指定内容类型,设置Cookie) PrintWriter out = response.getWriter(); // 使用 "out"把应答内容发送到浏览器 } }
如果我们要想使某个类成为Servlet,就必须使它继承自HttpServlet,根据数据是通过GET还是POST发送选择覆盖doGet,doPost方法之一或全部。HttpServletResponse除了提供用于指定HTTP应答状态,应答头的方法之外,最重要的是它提供了一个用于向客户端发送数据的PrintWriter。对于简单的Servlet,它的大部分工作都是通过println语句生成向客户端发送的页面。
使用Servlet的大概过程像是下面这样:
Server创建一个Servlet的实例---Server调用Servlet的init()方法---一个客户端的请求到达Server---Server创建一个请求对象---Server创建一个响应对象---Server激活Servlet的service()方法,传递请求和响应对象作为参数---service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息。
service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其他方法以处理请求,如doGet()或doPost()或程序员自己开发的新方法。
4.getServletContext()和getServletConfig()的意思
(1)getServletConfig()
在servlet初始化时,容器传递进来一个ServletConfig对象并保存在servlet实例中,该对象允许访问两项内容:初始化参数和ServletContext对象,前者通常由容器在文件中指定。它允许在运行时向servlet传递有关调度信息,更重要的是,可以让servlet在任何时候获得该对象及配置信息,获得的是<servlet><init-param>配置的参数。
(2)getServletContext()
一个Servlet可以使用getServletContext()方法得到web应用的servletContext,该方法同样可以获得相关配置信息,但是该配置信息是<context-param>配置的参数。
getServletContext()应用于整个web App,而getServletConfig()仅应用于当前Servlet。但是ServletConfig对象拥有ServletContext的引用,所以可以通过getServletConfig()来获得web App的。
5.filter的作用是什么?主要实现什么方法?request()和response()全称是什么?
filter使用户可以改变一个request和修改一个response,它的实质意义是"servlet chainning"(servlet链)。
一个filter的功能包括:
(1)在servlet被调用前截获;
(2)在servlet被调用前检查servlet request;
(3)根据需要修改request头和request数据;
(4)根据需要修改response头和response数据;
(5)在servlet被调用后截获。
主要实现三个方法:init(FilterConfig config),doFilter(ServletRequest request, ServletResponse response, FilterChain chain)和destroy()。
request的全称是 HttpServletRequest,response的全称是 HttpServletResponse 。