1、语法
分为JSP传统语法,JSTL和JSF。
1.1 JSP传统语法
1.1.1 Declaration
格式:<%! %>
说明:声明变量、方法,在当前JSP文件中是唯一的;
实例:<%! int i; public void method(){......}%>;
1.1.2 Scriptlet
格式:<%标准java代码%>
1.1.3 打印表达式
格式:<%=表达式 %>
注意:=后面必须是字符串变量或者可以被转换成字符串的表达式;不需要以“;”结束;只有一行。
实例:
<%=“hello world”%><%=i+1%><%= request.getParameter (“name”)%>
常见的Directive有:page,include, taglib
<%@page ...%> 指明与JSP容器的沟通方式。
<%@include file="fileURL"%>包含文件,可以是JSP程序或者HTML文件,JSP Engine会在JSP程序的转换时期先把file文件包含进来,然后开始执行转换和编译的工作,最后只生成一个java和class。
JSP注释格式:
<%--… …--%>
<%//… …%>
<%/*… …*/%>
1.1.4 Action
Acton是在运行期间的命令
jsp:useBean可以在JSP中使用定义好的Bean。
id: 对象实例名称scope:Bean 作用的范围, 默认为 page ,对整个 jsp 页面有效class:Bean 类名称 ( 全名)type:Bean 实例类型,可以是本类,或其父类,或实现的接口,默认为本类
page: 仅涵盖使用 JavaBean 的页面request: 有效范围仅限于使用 JavaBean 的请求session: 有效范围在用户整个连接过程中(整个会话阶段均有效)application: 有效范围涵盖整个应用程序。也就是对整个网站均有效
<jsp:setPropertyname=“beanName”
property=“propertyName”|property=“*”
value=“propertyvalue” |param=“paramName”/>
相当于 beanName.setPropertyName (value) 方法调用 ( setXxx () 方法 )
< jsp:getProperty name=“ beanName ” property=“ propertyName ”/>相当于 beanName.getPropertyName () 方法调用( getXxx () 方法)建立表单参数和Bean属性之间的关联通过 param 指定表单元素的名称,通过 perperty 指定对应的 Bean 属性名称,由此建立这两个变量的关联 ,用 url 传递参数通过*来设置所有属性和输入参数之间的关联在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据
jsp:inclue
用于动态包含文件。只有执行到该指令时,才会被JSP Engine编译,动态包含的文件和被包含文件使用同一个request对象。
jsp:param用于设定include文件时的参数和对应的值
<jsp:includepage=“URLSpec” flush=“true”>
<jsp:paramname=“ParamName” value=“paramValue”/>
</jsp:include>
jsp:forward用于将一个jsp的内容传送到page指定的JSP程序或者Servlet中处理,forward的页面和forward到的页面使用同一个request。
jsp:param指定参数和值
<jsp:forwardpage=“urlSpec”>
<jsp:paramname=“paramName” value=“paramValue”/>
</jsp:forward>
<jsp:forward>
使用同一个request
forward后的语句不会继续发送给客户端
速度快
服务器内部转换,
可以传参数
response.sendRedirect
是不同的request
send后的语句会继续执行,除非return
速度慢
需要到客户端的往返,可以转到任何页面
可以传参数,直接写在url后面
jsp:plugin
1.1.5 JSP内置对象
out :是缓存输出流,用于向客户端返回信息。
println () :向客户端输出各种类型数据newLine () :输出一个换行符close() :关闭输出流flush() :输出缓冲区里的数据clearBuffer () :清除缓冲区里的数据,同时把数据输出到客户端clear() :清除缓冲区里的数据,但不把数据输出到客户端getBufferSize () :返回缓冲区的大小
request:表示当前JSP页面的请求。通常,request对象是javax.servlet.http.HttpServletRequest接口的一个实例
常用方法:
getMethod () :返回客户端向服务器端传送数据的方法getParameter(StringparamName):返回客户端向服务器端传送的参数值,该参数由paramName指定
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration)
getParameterValues(String name):获得指定参数的所有值,由name指定
getRequestURI():获得发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端机器名称
getServerName():获取服务器的名字
getServletName():客户端所请求的脚本文件路径
getServerPort():获取服务器端的端口
response:表示将返回给客户端的响应,是javax.servlethttp.HttpServletResponse接口的一个实例。
cookie:
addCookie (Cookie cookie ) :添加一个 Cookie 对象,用于在客户端保存特定的信息addHeader (String name,String value) :添加 HTTP 头信息,该 Header 信息将发送到客户端containsHeader(String name):判断指定名字的HTTP文件头是否存在
sendError(int):向客户端发送错误的信息
sendRedirect(Stringurl):重定向JSP文件
和<jsp:forward>的区别
sendRedirect通过客户端发起二次申请,不同的request对象
Jsp:forward是同一个request,在服务器内部转发
setContentType(StringcontentType):设置MIME类型与编码方式
Http协议的无连接性要求出现一种保存C/S间状态的机制
Cookie:保存到客户端的一个文本文件,与特定客户相关
Cookie以“名-值”对的形式保存数据
通过getName和getValue的方式得到相应的名字和值
session:
void setAttribute(Stringname,Object value)
Object getAttribute(Stringname)
booleanisNew()
application
对应于ServletContext
es
2 Servlet 和JSP的通信
a. 从JSP调用Servlet可用<jsp:forward>,请求信息自动传递到Servlet中,或者通过调用response.sendRedirect。
b. 从Servlet调用JSP方法:
使用RequestDispatcher接口中的forward(req, res)方法,请求信息需要加到req参数中;
或者通过response.sendRedirect方法。
c. forward可以用绝对路径"/",是指web app的根路径,而Servlet forward jsp时必须要使用"/"开头。
d. jsp sendRedirect servlet应该使用相对路径,因为这里"/"指的是网站的根路径
e. servlet sendRedirect jsp 也应该使用相对路径。