JSP总结(一)
2013-10-24 21:55
561 查看
1)JSP--Java Server Pages
2)拥有Servlet的特性与优点(因为本身就是一个Servlet)
Tomcat在客户端第一次访问hello.jsp的时候帮你转换成servlet代码,并且帮你
编译好。
具体为:
JSP程序由JSP Engine 先将它转换成Servlet代码,接着将它编译成类文件载入执行。
只有当客户端第一次请求JSP时,才需要将其转换、编译。
JSP编程--基本语法
JSP传统语法
1) Declaration
<% ! accessCount
void m(){ }
%>
说明:在此声明的变量、方法都会保留;accessCount会变成类的一个成员变量。(尽量不要设计成员变量!)
也就是说其他客户端上也可以访问到accessCount,这样可以计数访问量。
<% i %>
说明:在此声明的变量、方法不会保留;i是类的一个局部变量。
<% void t(){ } % >这样写jsp将无法编译,因为t()方法会被到_jspService()方法内部,编译无法通过!!!
2) Scriptlet(java代码片)
<% java代码%>
在jsp中嵌入的Scriptlet是在服务器端计算好了,然后将结果返回到客户端。
3) Expression(表达式)
<% =request.getParameter("name")%>
4) Comment(注释)
<!-- html注释 --> :客户端注释
<%--java注释--%>
5) Directives(编译指令)
相当于编译期间的命令,jsp转换成servlet之中需要用到的指令。
格式:<%@Directive 属性="属性值"%>
常见的Directive:
a.page
<%@page language="java"|
extends="className"|
import="importList"| --常用
buffer="none|kb size"| --none:不缓冲,默认缓冲,大小为8K
session ="true|false" --是否可以使用session,默认true
isThreadSafe="True|false" --默认false(永远不要设成true,因为设成true之后,
会在_jspService()方法前面加上"同步“关键字,客户端访问需要排队,严重影响
访问效率!)
info="infoText"| --任何字符,没多大用
errorPage="errorPageUrl"| --当前页面出错的话转到“errorPageUrl”处理
isErrorPage="true|false"| -- 表示当前页面是一个统一处理错误页面的页面
contentType="contentTypeInfo"|
pageEncoding="gb2312" --常用(解决乱码问题)
%>
b.include(静态包含)--常用
将制定的JSP程序或者HTML文件包含进来。
格式:
<%@include file="fileURL" %>
JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行
转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换盒编译,只生产一个java和class)
限制:
不能向fileURL中传递参数
如:不能abc.jsp?user=aaa
因为这样相当于在编译期间传递参数user=aaa;肯定出错,而且也是没有意义的。
另外:
1)包含文件和被包含文件访问同一个request对象。(因为两个文件合并为一个文件)
2)两个文件的字符集要一致!
c.taglib(框架中用的较多)
6) Action(动作指令)
在运行期间的命令
常见的:
a 、jsp:useBean
jsp:setProperty
jsp:getProperty
b、jsp:include(动态包含)--不常用
可以传参数
被包含页面和包含页面的request不是同一个对象,但是被包含页面可以取得包含页面的
request的参数。
静态包含和动态包含的区别:
c、jsp:forward
1.testForward.jsp
<% response.sendRedirect("IsForward.jsp"); out.println("ddd"); %>
2.IsForward.jsp
<html> <body> I am IsForward.jsp page. </body>
说明:
1)第一个页面转向后,后面的代码out.println("ddd")可以继续执行。
2)这个转换过程是这样的:
客户端输入localhost:/my/testForward.jsp访问testForward.jsp,
服务器会将这个请求返回到客户端,告诉浏览器把地址改为localhost:/my/IsForward.jsp,按下”转到“,
然后客户端访问到IsForward.jsp,然后把结果再返回到客户端。
这个过程效率会受到一定的影响。
也可以在testForward.jsp里面传参数:
<% response.sendRedirect("IsForward.jsp?name=123"); out.println("ddd"); %>
在IsForward.jsp可以接受到参数:
<html> <body> I am IsForward.jsp page. <%=request.getParameter("name")%> </body>
forward 和 Sendredirect的区别
d、jsp:plugin
嵌入applet
7) 内置对象
a. out
b.request
c.response
d.session
e.application
f.exception
8)JSTL(框架中用的较多)
9)JSF
注意:WEB-INF子目录下面不能放置html
、jsp等文件!