1、jsp有哪些内置对象?作用分别是什么? 分别有什么方法?
JSP共有以下9个内置的对象:
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)。
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例。
2、jsp有哪些动作?作用分别是什么?
JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
3、JSP的常用指令与标签
Jsp指令:
语法:<%@ 指令名 属性="值"%>.
jsp指令负责告诉jsp引擎如何把页面翻译成servlet.
page指令:用于定义jsp页面的各种属性,最好放在jsp页面的起始位置,属性有language,extends,import,session,buffer,autoFlush,isThreadSafe,info,isErrorPage,contentType,pageEncoding,isELIgnored.
include指令:在后面与include标签对比讲解.
2.
out对象:这个out不是servlet里面的out.是PageContext.getWriter()方法返回的out对象.
实验1:
< %
out.println("first");
response.getWriter("second");
%>
结果如下:
second
first
为什么out的后输出?这是因为jsp引擎先把内容放到PageContext.getWriter()方法返回的out对象的缓冲区.写完后再交给servlet的response.getWriter()方法写到servlet引擎提供的缓冲区,缓冲区再把内容写到客户端.
实验2:
< %
ServletOutputStream sos = response.getOutputStream();
sos.println("hehe");
%>这里加上一个换行
运行结果报错了,为什么?上面说过,out最终会调用response.getWriter()方法返回的out对象,我们这个实验首先使用了response.getOutputStream()方法,记住我们写的所有的jsp页面都会翻译成Servlet的,然而在这里的代码中输出换行符时又去调用了response.getWriter()方法,而response的getWriter()和getOutputStream()不能同时在一个方法里面调用,所以报错了.注意:用了ServletOutputStream 就不能再使用out对象了.
实验3:
< %
RequestDispatcher rd = application.getRequestDispatcher("/test.html");
rd.forward(request,response);
%>在这里回车
结果报告有错.为什么?
实际上当调用forward方法时,是去找了一个缺省的servlet,这个缺省的servlet使用的是getOutputStream()方法,而这里的回车使用的是jsp的out对象打印出来的.这个out对象最终要使用的是getWriter(),而上面说过response的getWriter()和getOutputStream()不能同时使用,所以报错了.当然在前面加上回车也是一样的效果.
3.
pageContext对象:->request->session->application
pageContext对象代表此jsp页面,它是通过调用JspFactory.getPageContext方法返回的,在自定义标签用的非常多.
可以使用pageContext得到其他8大内置对象.
实验4:
这是一个换行
<%
1.//RequestDispatcher rd = application.getRequestDispatcher("/test.html");
//rd.forward(request,response);
2. pageContext.forward("/test.html");
%>
第一种方法会出错,第二种不会,为什么?
第一种出错的原因我们在上面说过,第二种为什么不会出错呢?我们说过,pageContext包装了其他八大隐式对象,所以它的forward方法内部也是调用了request.getRequestDispatcher的forward方法,但是在执行RequestDispatcher的forward方法之前调用了out.clear()方法.这样就不会出错了,去掉前面的换行,在%>后面加一个换行,两种方法都会报错.
几个常用的方法:
setAttribute(String name,Object object);
setAttribute(String name,Object object,int scope);scope代表指定的范围(page,request,session,application)
getAttribute(String name);
getAttribute(String name,int scope);
removeAttribute(String name);
findAttribute(String name);此方法依次从page,request,session,appllication这四个范围去找,直到找到为止.如果没找到则返回null.
4.
jsp标签:
< %@ include file=""%>:静态包含,a包含b,编译过程中a会受到b的jsp指令的影响,例如,b中有一个isELIgnored指令,会影响b,效率更高,不仅仅是引入输出内容,引入共同的的编译元素,不会检查所含文件的变化,适用于包含静态页面
<jsp:include page=""/>:动态包含,a包含b,a在执行过程中调用b,page的值可以是变量.它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
<jsp:forward>:此forward调用的pageContext的forward然后return了
<jsp:param>:用于给上面两个标签传参数.
以下是jsp2.0里面才可以使用的标签:
< jsp:scriptlet>:相当于<%%>
< jsp:scriptlet>
int x = 3;
if(x < 5){
out.println(x);
}
< /jsp:scriptlet>
会报错.因为在此使用了"<"这个符号,必须用
<![CDATA[
代码
]]>
<jsp:declartion>
< /jsp:declaration>相当于<%!%>
<jsp:exdivssion>
< /jsp:exdivssion>相当于<%=%>
<jsp:directive.指令名 属性="值"/>相当于<%@ page 属性="值"%>
<%@ page contentType="text/html;charset=gb2312"%>
< %
out.println("中国");
%>
和
<%
response.setContentType("text/html;charset=gb2312");
out.println("中国");
%>
的效果是不一样的.前者打印出了"中国"两字,后者打印出来的是乱码,为什么呢?
前者告诉jsp引擎按照指定的contentType去把jsp的内容翻译成servlet,因为charset指定为了gb2312,所以正常的输出了.
后者为什么是乱码呢?这是因为jsp源文件的中文字符在翻译成Servlet源文件时已经不是其正确的unicode编码了,当服务器把这两个字符按照gb2312输出正文时,出现的就是乱码了.
<jsp:setProperty name="date" property="time" param="time"/>
和
<jsp:setProperty name="date" property="time" value="<%=Integer.parseInt(request.getParameter("time"))%>"/>
意思是一样的.
自省机制:<jsp:setProperty name="date" property="*"/>
这种形式用于对javaBean实例对象中的多个属性赋值,它表示将请求消息中的参数逐一与javaBean实例对象中的属性进行比较,如果两个属性同名,则将该参数值赋值给该属性.注意:必须是同名的才赋值.
<jsp:useBean id="date" class="java.util.Date" scope="request"/>
这个jsp标签的含义为:
在指定范围(这里是request,如果不写,默认为page)内去找一个名字为date的对象,如果找到了则把它取出来,如果没找到则实例化一个新的类型为java.util.Date的名字为date的对象,并将它保存在request中,
<jsp:useBean id="date" class="java.util.Date" scope="request">
......
< /jsp:useBean>
如果上面的语句这样写,其含义则为:
在指定范围(这里是request,如果不写,默认为page)内去找一个名字为date的对象,如果找到了则把它取出来,"......"地方的代码不再执行.如果没找到则实例化一个新的类型为java.util.Date的名字为date的对象,并将它保存在request中,还将执行"......"地方的代码.
5.
forward() 与redirect()的区别?
答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。
4、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现
<jsp:include page=included.jsp flush=true />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file=included.htm %>
5、JSP中两种跳转方式分别是什么?有什么区别?
有两种,分别为:
<jsp:include page=included.jsp flush=true>
<jsp:forward page= nextpage.jsp/>
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。
相关推荐
JSP 面试题详解 本文对 JSP 面试题进行了详细的解析,涵盖了 JSP 的基础知识、内置对象、指令、生命周期、单线程模式、页面间对象传递、JSP 和 Servlet 的区别等方面。 JSP 的基础知识 JSP(Java Server Pages)...
jsp经典面试题 JSP(Java Server Pages)是一种基于Java技术的服务器端脚本语言,主要用于动态生成Web页面。下面是关于JSP的经典面试题,涵盖了JSP的基础知识和高级应用。 1、如何混合使用 Jsp 和 SSI #include? ...
jsp 面试题库 在这篇文章中,我们将对 JSP 面试题库进行总结和分析,从中我们可以看到 JSP 的基本概念、JSP 声明、JDBC、JavaBean 等知识点。 首先,让我们来看一下 JSP 的基本概念。JSP(Java Server Pages)是一...
jsp面试题及答案 JSP(Java Server Pages)是一种服务器端脚本语言,用于创建动态网页。下面是关于JSP的一些知识点: 1.JSP与HTML的关系 JSP与HTML之间的关系是,JSP在服务器端执行,返回给客户端的是一个HTML...
很实用、经常被问到的 关于jsp方面的面试题
收集的有关于jsp 和servlet的面试题。仅供大家参考,
jsp页经典面试题java程序员面试经常考到的面试题总结 jsp是一种基于Java技术的服务器端编程语言,广泛应用于Web开发中。以下是jsp页经典面试题总结,涵盖了jsp的基本概念、jsp与ssi的混合使用、线程安全、html表单...
jsp servlet面试题总结 jsp 中九大内置对象为: 1. request 请求对象,类型 javax.servlet.ServletRequest,作用域 Request 2. response 响应对象,类型 javax.servlet.SrvletResponse,作用域 Page 3. ...
4. **JSP面试题**: - JSP的基本语法,如声明、脚本元素、指令元素。 - JSP和Servlet的关系是什么?何时使用JSP,何时使用Servlet? - JSP内置对象及其作用,如pageContext、request、response、session、out等。...
### JSP总结与相关面试题解析 #### JDBC核心包java.sql的作用及组件 JDBC(Java Database Connectivity)是Java中用来对关系型数据库进行统一访问的API,它提供了一种标准的方式来连接各种类型的数据库,使得Java...
总结了最近去面试遇见的一些servlet和jsp的面试题,自己总结并风分享给大家。
### Java面试题概览 #### 1. Java类基础 - **`java.lang.Thread`:** 此类为线程提供了基本的功能支持。在Java中创建线程时可以直接继承此类或者实现`Runnable`接口。 - **`java.lang.Number`:** `Number`类是一个...
### JSP面试题详解 #### 1. HTTP 协议的无状态特性及有状态协议的概念 HTTP(HyperText Transfer Protocol)是一种应用层协议,用于从Web服务器传输超文本到本地浏览器的传输协议。它是一种**无状态协议**,这意味...
文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...
常考面试题 1.讲下servlet的执行流程。 Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》 方法初始化...
JSP + Servlet 面试题知识点总结 以下是 JSP 和 Servlet 相关的知识点总结: 一、JSP 和 Servlet 基础知识 * JSP 和 Servlet 都是服务器端执行的,通常返回给客户端的是一个 HTML 文本。 * JSP 在服务器上执行,...
Java-SSH面试题主要涉及到Java企业级开发中的三个重要框架:Struts、Hibernate和Spring,它们合称为SSH。这些框架的使用和集成是Java web开发中的常见知识点。 **MVC设计模式** MVC(Model-View-Controller)是一种...
Java是企业级应用开发的...这些面试题涵盖了Java基础、集合框架、多线程、网络编程、Servlet和JSP等多个核心领域,全面展示了开发者应该具备的技能和知识。理解和掌握这些内容对于成为一名优秀的Java开发人员至关重要。
JAVA笔试面试资料JDBC HTTP、JSP、Servlet、Struts面试题汇总资料: 2014年最新Java笔试题及答案.docx 225道Java面试题 学会了Java面试随你问.docx Ant和Maven的作用是什么?两者之间功能、特点有哪些区别?.docx ...