首页 > 代码库 > JSP
JSP
1. web.xml(deployment descriptor) ,部署描述符
2. 我们可以将Servlet看作是嵌套了HTML代码的Java类;可以将JSP看作是嵌套了Java代码的HTML页面。
3. get和post方法之间的差别:
1). 浏览器地址栏呈现的结果不同(表象)
2). 真正的原因在于向服务器端发送请求时的形式不同
3). get请求格式:
4). post请求格式:
4. servlet可以通过输出流,直接输出HTML代码,如:
PrintWriter out = response.getWriter();
out.println("<HTML><HEAD><TITLE>Decision****");
5. JSP执行的详细流程:
6. JSP 最终都会转换为 Servlet 去执行。
7. JSP:声明的格式:<%! int a = 3;%>,脚本段:的形式: <% int b = 3;%> ,将当服务器将JSP转换为Servlet时,会将JSP中的声明转换为类的成员变量,
而将脚本段转换为方法中的局部变量,Servlet是单实例的,这样成员变量的值就只有一个,每个用户都会访问到它,而脚本段中的值则是局部变量,每个用户
访问的时候各有一份,互不影响。一般不使用前者,线程不安全。
8. <jsp:forward>指令用于转向页面,在该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面了。
9. getParameter(key)方法是getParameterValues(key)方法的特例,表示请求参数值只有一个, 如果请求参数值有多个,请使用getParameterValues方法。在
多选框的情况下,需要使用getParameterValues方法来获取用户所选择的多个复选框的值。
10. 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页
11. JSP所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访
问JSP网页。
12. Java Server Pages:
1). Servlet简化设计,逻辑与界面设计分开,开发更方便;
2). HTML语法的Java扩展,加入新的标签(<%, %>,…);
3). 强大的组件(Java Bean)支持功能;
13. JSP语法概述:
1). JSP原始代码中包含了JSP元素和Template(模板)data两类。Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的
内容等,这些数据会直接传送到客户端的浏览器
2). JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JAVA语法,否则会导致编译错误。
14. JSP语法分为三种不同的类型:
1). 编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>
2). 脚本语法(SCRIPTING)
3). 动作语法(ACTION) 例如: <jsp:forward>,<jsp:getProperty>,<jsp:include>
15. 脚本语法包括
1). “HTML注释”:<!— comments -->
2). “隐藏注释(JSP)”:<%-- comments --%>
3). “声明”
4). “表达式”
5). “脚本段”
16. 编译器指令包括“包含指令”, 页指令”和“taglib指令”。它们包含在“<%@ %>”卷标里。两个主要的指令是page与include。
17. 动作语法包括<jsp:forward>,<jsp:include>,<jsp:getProperty>,<jsp:setProperty>和<jsp:useBean>
18. HTML注释,JSP格式如下:
<!-- comment [ <%= expression %> ] --> 或 <!-- 注释 [<%= 表达式 %> ] -->
这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
隐藏注释,JSP语法格式如下:
<%-- 注释 --%>
不发送到客户端。
19. 声明,JSP语法格式如下:
1). <%! declaration; [ declaration; ] ...%> 或 <%! 声明; [声明; ] ... %>
2). <% declaration; [ declaration; ] ...%> 或 <% 声明; [声明; ] ... %>
20. 表达式,用于在页面上输出信息,语法格式如下: <%= expression %> 或 <%= 表达式 %>
21. 脚本段,JSP 语法格式如下:<% code fragment %> 或 <% 代码 %>
22. 转义符: 双引号 \“ ,单引号\’,反斜杠\\,回车\r,换行\n,制表符\t,退格 \b
23. 包含指令:
1). include指令:向当前页中插入一个静态文件的内容。JSP 语法格式如下:<%@ include file="relativeURL" %> 或 <%@ include file="相对位置" %>
2). "Page"指令用于定义JSP文件中的全局属性。JSP 语法格式如下:
<%@ page [ language="java" ] [ extends="package.class" ] [import="{package.class | package.*},..." ]
[ session="true | false" ][ isThreadSafe="true | false" ][ errorPage="relativeURL" ]
[ contentType="mimeType[;charset=characterSet]" | "text/html ; charset=ISO-8859-1" ]
[ isErrorPage="true | false" ]%>
属性:
a).language="java" 声明脚本语言的种类,目前只能用"java" 。
b). import="{package.class | package.* },..."需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。
下面的包在JSP编译时已经导入了, 所以就不需要再指明了:
java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*
c). errorPage="relativeURL" 设置处理异常事件的JSP文件。
d). isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception对象
e). “<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 “<jsp:include>”。
f). 可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的
import语句类似(参照Java Language,import语句引入的是Java语言中的类),所以此属性就能用多次。
g). 无论把“<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它
放在JSP文件的顶部。
3). taglib指令,JSP语法:<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 用于引入定制标签库
24. <jsp:forward> 语法格式:
1). <jsp:forward page={"relativeURL" | "<%=expression %>"} > 这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以
是JSP,或程序段
2). <jsp:param name="parameterName" value="http://www.mamicode.com/{parameterValue | }" />
[<jsp:param … />]</jsp:forward> (“[<jsp:param … />]”指可以有多个“<jsp:param/>” 标记。)
向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“<jsp:param>”;“name”指定参数名,
“value”指定参数值。
25. “<jsp:forward>”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“<jsp:forward>”标签以后的代码,将不能执行。
26. <jsp:include>:包含一个静态或动态文件,JSP语法格式如下:
1). <jsp:include page="{relativeURL | <%=expression%>}" flush="true" >
2). <jsp:param name="parameterName" value="http://www.mamicode.com/{parameterValue |}" />
[<jsp:param …/>] </jsp:include>a(“[<jsp:param … />]”指可以有多个“<jsp:param/>”标记。)
27. JSP 有以下九种内置对象,包括:
1). request请求对象:“request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是
getParameter、 getParameterNames 和 getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值
2). response响应对象:“response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式
比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。
3). pageContext页面上下文对象:“pageContext” 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、
getAttribute、getAttributesScope和getAttributeNamesInScope,一般情况下“pageContext” 对象用到得也不是很多,只有在项目所面临的情况比较复
杂的情况下,才会利用到页面属性来辅助处理。一般Servlet容器会使用该对象
4). session会话对象: “session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。
5). application应用程序对象:“application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。
6). out输出对象: “out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out”对象发送的内容将是浏览器需要显示的内容,是文本一级的,
可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了print和println之外,还包括clear、clearBuffer、flush、getBufferSize 和
getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
7). config配置对象: “config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
8). page页面对象:“page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。
9). exception异常对象:“exception” 对象则代表了JSP文件运行时所产生的异常对象,此对象不能在一般JSP文件中直接使用,而只能在使用了
“ <%@ page isErrorPage="true "%>”的JSP文件中使用
28. request的setAttribute与getAttribute 方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute 方法根据属性
获取到与该属性对应的对象值( 获取到之后一般都需要进行向下类型转换, 将属性值转换为真正的对象) 。setAttribute 与 getAttribute 方法都是在服
务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。
29. request 的 getParameter 方法的作用是获取到客户端 通过表单或url 请求参数所发送过来的参数值,是客户端与服务器端之间的交互,服务器端要想获取
到客户端发送过来的数据,就需要使用getParameter方法来获取。与 没有与 getParameter 方法对应的setParameter 方法。
30. request 对象内数据的存活范围就是在 request 对象的存活范围内,当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被
销毁了;之后再向服务器端发送新的请求时,服务器会创建新的 request 对象,该 request 对象与之前的request 对象没有任何关系,因此也无法获得在之
前的 request 对象中所存放的任何数据。
31. session 对象内数据的存活范围也就是 session 对象的存活范围( ?只要浏览器不关闭,session对象就会一直存在 ?) ,因此在同一个浏览器窗口中,无论
向服务器端发送多少个请求,session 对象只有一个。 Session存活跟浏览器是否关闭无关,之所以浏览器是关闭无法再获得原有的Session,是因为sessionId
在浏览器进程内存中。当浏览器关闭,进程内存释放,导致原来的sessionId消失。
32. application(应用对象) :存活范围最大的对象,只要服务器没有关闭,application 对象中的数据就会一直存在。在整个服务器运行过程当中,application
对象只有一个。
33. request、 session以及application这3个对象的范围是逐个增加的:request 只在一个请求的范围内;?session是在浏览器窗口的范围内 ? ;application 则
是在整个服务器的运行过程中。
34. HttpServletResponse 对象的 sendRedirect(String location)方法称作重定向。如果location地址前面加上“/” ,则表示相对于Servlet容器的根来请求,
即 http://localhost:8080,如果 location 地址前没有加上“/” ,则表示相对于当前请求的 URI 来寻找地址。
35. RequestDispatcher 的 forward(request, response)方法称作请求转发。
36. 请求转发与重定向的区别。
1). 请求转发,整个过程处于同一个请求当中
2). 重定向。实际上客户端会向服务器端发送两个请求。
3). RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
4). sendRedirect()是 HttpServletResponse 对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端
返回执行的结果。
37. 一个标准的JavaBean有以下几个特性:
1). JavaBean是一个公共的(public)类
2). JavaBean有一个不带参数的构造方法
3). JavaBean通过setXXX方法设置属性,通过getXXX方法获取属性
38. JSP访问JavaBean的语法:
1).导入JavaBean类,例如:<%@ page import="mypack.CounterBean" %>
2). 声明JavaBean对象,例如:<jsp:useBean id="myBean" class="mypack.CounterBean" scope="session" />
3). 访问JavaBean属性,例如:<jsp:getProperty name="myBean" property="count" />
39. 声明对象时的scope属性,表示JavaBean对象的生命周期范围。
40. <jsp:getProperty> 语法格式如下:
<jsp:getProperty name="beanInstanceName" property="propertyName" />
属性:
1).name="beanInstanceName" bean的名字,由<jsp:useBean>指定。
2).property="propertyName" 所指定的Bean的属性名。
41. <jsp:setProperty>,设置Bean的属性值,语法格式如下:
<jsp:setProperty name="beanInstanceName" { property= "*" | property="propertyName"
[ param="parameterName" ] |property="propertyName" value="http://www.mamicode.com/{string | }"}/>
属性:
1).name="beanInstanceName" 表示已经在“<jsp:useBean>”中创建的Bean实例的名字。
2).property="*" 储存用户在jsp输入的所有值,用于匹配Bean中的属性。
3). property="propertyName" [param="parameterName" ]– 用一个参数值来指定Bean中的一个属性值, 一般情况下是从request对象中获得的。
其中property指定Bean的属性名,param指定request中的参数名。
4). property="propertyName" value="http://www.mamicode.com/{string | }" 使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果
是字符串,那么它就会被转换成Bean属性的类型。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。不能在同一个
“<jsp:setProperty>”中同时使用param和value参数 。
42. include 两种用法的区别:
1). 执行时间上:
<%@ include file=”relativeURI”%> 是在翻译阶段执行。多用于引入一些相同的标头,底部等。
<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.
2). 引入内容的不同:
<%@ include file=”relativeURI”%>
引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.
<jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本.
另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径。将根据赋给应用程序的URI的前缀进行
解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.
JSP