1、jsp(Java Server Pages)是由Sun公司倡导、许多公司一起建立的一种动态网页技术的标准。事实上是由servlet发展而来的。
2、工作原理:Servlet容器会在第一次调用jsp页面时候自动编译它,通过编译后的类来给客户端响应。
3、jsp文件中的元素总结为5类:注释、模板元素、脚本元素、指令元素、动作元素。
4、注释
一、客户端注释:<!--<%=expression%>-->会jsp编译器编译。
二、隐藏注释:<%--隐藏注释--%>:不会被jsp编译器编译,在class文件中和客户端都不会出现
三、脚本中的注释: //单行注释 和 /** */多行注释。
5、模板元素:指的是html元素或者xml元素,可以说是网页的框架。在jsp文件里可以使用。
6、脚本元素:包括声明、表达式、脚本
一、声明全局变量或者方法:<%!String name%>、<%!String getDate(){return new Date().toLocaleString();}%>
二、表达式:<%=表达式%>例如<%="str"%>、<%=var%>
三、脚本:<% java代码 %>
7、指令元素:包括page、include、taglib,格式为<%@ 指令 属性="属性值"%>
一、page有很多属性:language、import、contentType、session、buffer、autoFlush、isThreaadSafe、info、errorPage、isErrorPage、extends、isELIgnored、pageEncoding
language:定义使用脚本的语言。目前是java语言。language="java"
import:总是放在jsp文件顶部。import="java.util.*,java.io.*"
session:指定一个http会话中这个页面是否参与,默认为session="true"
buffer:指定到客户端输出流缓存模式,如果为none则不缓冲,也可以指定缓存冲大小。与autoFlush一起用。默认值根据不同服务器而定。buffer="128k"
autoFlush:缓冲区满时是否刷新。默认为true。
info:关于jsp页面信息,也可以由servlet.getServletInfo()获得。
isErrorPage:表示当前页面是否作为errorPage目标。默认是false,如果为true则可以使用exception对象,用来输出一些异常信息。
errorPage:定义当前页面出异常时候调到哪个页面。errorPage="error.jsp"
isThreadSafe:用来设置jsp文件是否能多线程使用。默认为true。如果为false则该jsp文件只能一次处理一个请求。
contentType:定义页面响应的mime类型和jsp字符编码。contentType="text/html;charset=gb2312"
pageEncoding:指定jsp页面字符编码。pageEncoding="utf-8"
二、include有属性file,如<%@ include file="head.html" %>
file:要包含的文件。file="filename"在jsp被编译之前就合并起来。之后才编译。
三、taglib有属性uri、prefix。<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prifix="c" %>
uri:表示标签描述符,告诉容器怎么找到标签描述文件和标签库。
prefix:表示使用标签的前缀。如:prefix="c"
8、动作元素
<jsp:param>:为其他标签提供附加信息如<jsp:forward><jsp:plugin>,用法<jsp:param name="paramName" value="paramValue"/>
<jsp:include page="包含页面" flush="true">:允许在请求时间内现成的jsp页面包含静态或则动态资源.效率比<%@ include file="filename" %>低
index.jsp
<%@ page contentType="test/html;charset=gb2312" language="java" %>
<html>页面
<head><title>动态和静态包含</title></head>
<body>
<%@ include file="static.html" %>
<hr/>
<!--动态包含test.jsp文件,可以把参数传送过去-->
<jsp:include page="test.jsp" flush="true'>
<jsp:param name="var1" value="<%=request.getParameter("name")%>"/>
<jsp:param name="var2" value="<%=request.getParameter("password")%>"/>
</jsp:include>
</body>
</html>
static.html页面
<h3>静态包含进来的文件内容</h3>
test.jsp页面
<h3>动态包含进来的文件内容</h3>
<br/>
this is name=<%=request.getParameter("name")%>
<br/>
this is name=<%=request.getParameter("password")%>
<jsp:forward>:请求转向到另一个jsp、servlet或则静态文件。
用法<jsp:forward page="uri"/>或则<jsp:forward><jsp:param name="paramName" value="paramValue"/></jsp:forward>
<jsp:setProperty>:用来设置bean的属性。
例如<jsp:setProperty name="beanName" property="name" value="hello"/>表示给id为beanName的bean的属性name赋值为hello
例如<jsp:setProperty name="beanName" property="*" />表示给id为beanName的bean所有属性赋值。根据表单传送过来的参数来赋值。(表单的参数名字要和bean属性名一致)
<jsp:getProperty>:用来获得bean的属性值。
例如<jsp:getProperty name="beanName" property="name" />获得id为beanName的bean的name属性值
<jsp:useBean>:用来创建一个bean实例并指定它的名字及其作用范围。范围scope有:request、page、session、application
例如<jsp:useBean id="user" scope="page" class="bean.User"/>创建了一个User实例
例如创建一个bean并且给bean属性赋值
<jsp:useBean id="user" scope="page" class="bean.User">
<jsp:setProperty name="user" property="username" value="joe"/>
<jsp:setProperty name="user" property="password" value="222"/>
</jsp:useBean>
<jsp:plugin>:用来产生客户端浏览器的特别标签,可以插入Applet或则JavaBean
<jsp:plugin
type="bean|applet"
code="classFileName"
codebase="classFileDirectoryName"
[name="instanceName"]
[archive="URIToArchive,..."]
[align="bottom|top|middle|right"]
[height="displayPixels"]
[width="displayPixels"]
[hspace="leftRightPixels"]
[vspace="topBottomPixels"]
[jreversion="JREVersionNumber|1.1"]
[nspluginurl="URLToPlugin"]
[iepluginurl="URLToPlugin"]
[<jsp:params>[<jsp:param name="paramName" value="paramValue"/>]+</jsp:params>]
[<jsp:fallback>message for user</jsp:fallback>]
></jsp:plugin>
例如
<jsp:plugin type="applet" code="com.myApplet.class" codebase=".">
<jsp:params>
<jsp:param name="var1" value="varValue1"/>
</jsp:params>
<jsp:fallback>cannot load the applet</jsp:fallback>
</jsp:plugin>
<jsp:fallback>只能在<jsp:plugin>使用
9、jsp内置对象:request、response、pageContext、session、application、out、config、page、exception
一、request:客户端的请求。
二、response:给客户端的响应。
三、pageContext:值jsp的上下文,被封装程java.servlet.jsp.pageContext接口,管理属于jsp中特殊可见部分中已命名对象访问。
forward(java.lang.String path)重定向到另外一个页面或则servlet
getAttribute(String name)
getException()返回当前的exception对象
getRequest()返回当前的request对象
getResponse()返回当前的response对象
getServletConfig()返回当前页面的ServletConfig对象
getServletContext()返回ServletContext对象。对所有页面都是共享的。
getSession()返回当前的session
setAttribute(String name, Object value)增加或则修改属性
removeAttribute(String name)移除指定属性
四、session:指的是当前会话对象
五、applicatoin:web应用对象,在servlet环境通过getServletConfig().getContext()获得
getInitParameter(String name)返回名字为name属性初始值
getServletInfo()返回Servlet编译器的当前版本信息
六、out:输出流对象,可以打印基本类型和对象类型
out.flush()输出缓冲区里面的数据。即是刷新
out.close()关闭输出流
out.clear()清空清空缓冲区里面的数据,但是不会把数据输出到客户端。
out.clearBuffer()清空清空缓冲区里面的数据,并把数据输出到客户端。
out.getBufferSize()获得缓冲区的大小
out.getRemaining()获得缓冲区中没有被占用的空间大小
out.isAutoFlush()返回布尔值,如果是自动刷新返回true,否则返回false
七、config:页面的ServletConfig对象
getServletContext()返回servlet的上下文
getServletName()返回servlet的名字
getInitParameter(String name)返回初始化参数名为name的值
getInitparameterNames()返回jsp所有的初始化参数名
八、page:指的是本页面
九、exception:没有被throwable捕获的错误传向了errorpage的uri
例如<%=exception.getMessage()%>打印异常信息(需要在标有isErrorPage="true"?才能被别的页面传来exception信息)
10、表达式:语法${expression}
运算符
算术运算符:+、-、*、/、%、mod、dive
逻辑运算符:and、&&、or、||、not
关系运算符:==、eq、!=、ne、<、lt、>、gt、<=、ge、>=、le
空 空操作符是前缀操作,可用于确定值是否为空。
条件运算符:A?B:C
优先级
[].
()
not、!、empty
*、/、div、%、mod
+、-
<、>、<=、>=、lt、gt、le、ge
==、!=、eq、ne
&&、and
||、or
?:
11、jstl(JavaServer Pages Standard Tag Library)标准标签库
引用jstl标签库<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
12、JavaBean使用