•JSP脚本:可以包含任何可执行的Java代码。Java代码可通过JSP脚本嵌入html页面。
格式:<% java代码 %>
eg:
<body>
<h3>计算学生的平均成绩:</h3> <br>
<%
double math=90.0, chinese=85, english=72, average;
average=(math+chinese+english)/3;
out.print(average);
%>
</body>
•JSP表达式:提供了一种输出表达式值的简单方法,语法格式如<%=java表达式%>。
eg:
<body>
<%double r=10.0; %>
<%=3.14*r*r %>
</body>
•JSP声明:用于声明变量和方法。声明时不需要定义类。
格式:<%! 变量和方法声明 %>
JSP声明变量代码片段:
<%!
String name="liu";
int i=0;
%>
JSP声明方式还可以定义一个方法,定义方法格式如下:
<%!
返回值数据类型 函数名(数据类型 参数, …) {
语句;
return (返回值);
}
%>
•JSP注释:用于标注在程序开发过程中开发提示,不会输出到客户端。
1 输出注释
输出注释的语法规则如下:
<!-- 注释内容[<%=表达式%>]-->
这种注释和HTML文件中的注释很相似,唯一不同的是,前者可以在这个注释中用表达式,以便动态生成不同内容的注释。这些注释的内容在客户端是可见的,即能够返回到客户端html文件中。如下面一段注释:
<!-- 现在时间是:<%=(new java.util.Date()).toLocaleString() %> -->
2. 隐藏注释
隐藏注释的语法规则如下:
<%-- 注释内容--%>
隐藏注释与输出注释不同的是,这个注释虽然写在JSP程序中,但是不会发送给用户,即在返回到客户端html的文件中不可见。
JSP中的三个编译指令:
格式:<%@ 指令名称 属性1="属性值1" 属性2="属性值2" … 属性n="属性值n"%>
•JSP的编译指令是通知JSP引擎的消息,它不是直接生成输出。
•编译指令都有默认值,因此开发人员无须为每个指令设置值。
–page:该指令定义当前页面的属性
page指令用于设置JSP界面的属性,有以下的属性可以指定:language,import,isErrorPage,errorPage,buffer
<%@ page language = "Java" import ="java.util.*" buffer = "8kb"
errorPage="error.jsp" isErrorPage="false"%>
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ import="{package.class | package.*}, ..." ]
[ session="true | false" ]
[ buffer="none | 8kb | sizekb" ]
[ autoFlush="true | false" ]
[ isThreadSafe="true | false" ]
[ info="text" ]
[ errorPage="relativeURL" ]
[ contentType=“mimeType [ ;charset=characterSet ]” | “text/html ”]
[ isErrorPage="true | false" ]
%>
–include:用于指定包含另一个页面
include 指令用于在运行时将 HTML文件或 JSP页面嵌入到另一个 JSP页面
格式:<%@ include file="" %>
include既可以包含静态文件,也可以包含jsp页面。会将包含的页面加入页面,融合成一个页面。因此,被包含的页面不需要是一个完整的页面。
–taglib:用于定义和访问自定义标签
taglib 指令的作用是在JSP页面中,将标签库描述符文件引入到该页面中,并设置前缀。从而,利用标签前缀去使用标签库表述文件中的标签。
格式:<%@ taglib uri=“tagLibraryURI” prefix=“tagPrefix” %>
其中,uri=“tagLibraryURI”指明标签库文件存放位置。prefix="tagPrefix"则表示该标签使用时的前缀。JSP页面在根目录中搜索tagLibraryURI 标签库描述符文件,而tagPrefix前缀将mytaglib中的标签嵌入JSP页面.
JSP中的7个动作指令:
动作指令是运行时的脚本动作,通常可替换为JSP脚本;
JSP的7个动作指令:
–jsp:forward
jsp:forward执行页面转向,将请求的处理交给下一个页面
<jsp:forward>的语法规则如下:
<jsp:forward page=" { relativeurl | <%= expression %> } " />
或者为:
<jsp:forward page=" { relativeurl | <%= expression %> } " >
<jsp:param name="paramName" value="{ paramValue | <%= expression %>}" />
</jsp:forward>
<jsp:forward>标记只有一个属性page。page属性指定要转发资源的相对URL。page的值既可以直接给出,也可以在请求时动态计算。
–jsp:include
jsp:include 将静态的HTML、服务器程序的输出结果及来自其他JSP的输出结果包括到当前页面中。
–也可以在标签内向引用页面传递param
<jsp:include page=" { relativeurl | <%= expression %> } " flush="true" />
或者为:
<jsp:include page=" { relativeurl | <%= expression %> } " flush="true" >
<jsp:param name="paramName" value="{ paramValue | <%= expression %>}" />
</jsp:include>
l包含普通的HTML文件:<jsp:include page=" hello.html " />
l使用相对路径:<jsp:include page=" /index.html " />
l包含动态JSP文件:<jsp:include page=" scripts/login.jsp " />
l向被包含的程序传递参数:
<jsp:include page=" scripts/login.jsp " >
<jsp:param name="usename" value="zheng" />
</jsp:include>
–jsp:param(jsp:param 用于传递参数,必须与其他支持参数的标签一起使用)
<jsp:param>的语法规则如下:
<jsp:param name="paramName" value="paramValue"/>
例如:
<jsp:param name= "username" value ="liu"/>
<jsp:param>通常与<jsp:include>、<jsp:forward>或<jsp:plugin>等一起使用。在独立于其他操作使用时,<jsp:param>动作没有作用。
–jsp:useBean
jsp:useBean创建一个JavaBean实例
–<jsp:useBean id="name" class="classname" scope="page | request | session | application" />
–id:设置JavaBean的名称,利用此id,可以识别在同一个JSP程序中使用不同的JavaBean组件实例。
–class:指定JavaBean对应的Java类名,查找该JavaBean路径。
–scope属性值:
page:仅在本页面有效
request:仅本次请求有效
session:在本次session有效
application:在本应用内一直有效
useBean可与setProperty,getProperty一起使用
eg:
java文件:
public class simpleBean
{
private String name = null;
private int age = 0;
public simpleBean()
{
}
public String getName()
{
return name;
}
public void setName(String username)
{
name = username;
}
}
jsp:
<html>
<head>
<title> 在 JSP 中使用 JavaBean </title>
<jsp:useBean id="BeanId" class=“simpleBean" scope="application"/>
<jsp:setProperty name="BeanId" property="name" value="Andrew"/>
<jsp:setProperty name="BeanId" property="age" value="25"/>
</head>
<body>
姓名:<jsp:getProperty name="BeanId" property="name"/> <br/>
年龄:<jsp:getProperty name="BeanId" property="age"/>
</body>
</html>
–jsp:setProperty(设置javaBean实例的属性值,用法见上面的例子)
–jsp:getProperty(获取javaBean实例的属性值,用法见上面的例子)
–jsp:plugin(jsp:plugin用于下载JavaBean或Applet到客户端执行,目前很少用。)
JSP中9个内置对象:
•javax.servlet.http:HttpServletRequest的实例,该对象封装了一次请求,客户端请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数使用该对象。
输入输出对象:request,response,out;
作用域对象:pageContext,application,session
Servlet对象:page,config;
错误对象:exception
1.输入输出对象:
控制页面的输入和输出
访问与所有请求和响应有关的数据
输入和输出对象包括request、response 和out
2.request对象:
用来表示并存储客户端对服务器的请求,使用http协议。
javax.servlet.http:HttpServletRequest的实例,该对象封装了一次请求,客户端请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数使用该对象。
常用方法:
•getParameter(String paramNarne)
•getParameterValues(String paramName)
•setAttribute(String atttibuteName, Object attributeValue)
•getAttribute(String attributeName)
•setCharacterEncoding(String env)
request其他主要的方法:
getCookies():返回客户端的Cookie对象,结果是一个Cookie数组。
getHeader(String name):获得HTTP协议定义的传送文件头信息,例如,request.getHeader(“User-Agent”)含义为:返回客户端浏览器版本号、类型。
getServerPort():获得服务器的端口号。
getServerName():获得服务器的名称。
getRemoteAddr():获得客户端的IP地址。
getRemoteHost():获得客户端的主机名,如果该方法失败,则返回客户端的IP地址。
getProtocol():获得客户端向服务器端传送数据所依据的协议名称。
lgetMethod():获得客户端向服务器端传送数据的方法。
getServletPath():获得客户端所请求的脚本文件的文件路径。
getCharacterEncoding ():获得请求中的字符编码方式。
getSession(Boolean create):返回和当前客户端请求相关联的HttpSession对象。
getQuertString():返回查询字符串,该字符串由客户端以get方法向服务器端传送。
getRequestURI():获得发出请求字符串的客户端地址。
lgetContentType():获取客户端请求的MIME类型。如果无法得到该请求的MIME类型,则返回-1。
3.response对象:
处理jsp生成的响应,并将响应发送给客户端,实现javax.servlet.http.HttpServletResponse接口,可对客户的请求做出动态的响应,向客户端发送数据,如Cookies、HTTP文件的头信息等。通常response对象常用于重定向,而输出响应使用out 对象。
常用方法:void sendRedirect(String str)
response对象其他主要方法:
addHeader(String name,String value):添加HTTP头文件,该头文件将会传到客户端去,如果有同名的头文件存在,那么原来的头文件会被覆盖。
setHeader(String name,String value):设定指定名字的HTTP文件头的值,如果该值存在,那么它将会被新的值覆盖。
containsHeader(String name):判断指定名字的HTTP文件头是否存在,并返回布尔值。
flushBuffer():强制将当前缓冲区的内容发送到客户端。
addCookie(Cookie cookie):添加一个Cookie对象,用来保存客户端的用户信息,可以用request对象的getCookies()方法获得这个Cookie。
4.out对象
表示输出流, 通常用于在页面上输出变量值和常量
在使用输出表达式的地方,可通过out对象达到同样的效果
javax.servlet.jsp.JspWriter类的实例
使用write()、print()和println()方法
内置对象的作用域包括page、request、session和application
作用域通信对象包括session、application 和pageContext
5.session对象
该对象代表一次会话。从客户端浏览器与站点建立连接起,开始会话,直到关闭浏览器时结束会话。
javax.servlet.http.HttpSession接口的实例,session中存储有关用户会话的所有信息。
session对象最常用的方法有:
–void setAttribute(String name, Object value)
–以键/值的方式,将一个对象的值存放到session 中
–void getAttribute(String name)
–根据名称去获取session中存放对象的值
session对象其他方法如下:
getAttributeNames():返回session对象存储的每一个属性对象,结果集是一个Enumeration类的实例。
getCreationTime():返回session对象被创建的时间,单位为毫秒。
getId():返回session对象在服务器端的编号。
getLastAccessedTime():返回当前session对象最后一次被操作的时间,单位为毫秒。
getMaxInactiveInterval ():获取sessionn对象的生存时间,单位为秒。
setMaxInactiveInterval (int interval):设置session对象的有效时间(超时时间),单位为秒。在网站的实际应用中,30分钟的有效时间对某些网站来说有些太短,但对有些网站来说又有些太长。
removeAttribute(String name):删除指定属性的属性名和属性值。
invalidate():注销当前的session对象。
servlet
1.简介
•Servlet在本质上就是Java类,编写Servlet需要遵循Java的基本语法。
•但是与一般Java类不同的是,Servlet是只能运行在服务器端的Java类,必需遵循特殊的规范,在运行的过程中有自己的生命周期
•Servlet是和HTTP协议是紧密联系的,所以使用Servlet几乎可以处理HTTP协议各个方面的内容。
2.servlet工作原理
•Servlet容器是Web服务器或应用程序服务器的一部分,主要任务是管理servlet的生命周期;web服务器,它是来管理和部署 web应用的。
•Servlet是运行在服务器端的程序,Servlet容器负责把请求传递给Servlet,并把结果返回给客户,维护Servlet的运行状态
•Servlet容器负责处理servlet的并发访问,当多个用户请求同一个Servlet,Servlet容器负责为每个用户启动一个线程,这些线程的运行和销毁由Servlet容器负责
3.servlet生命周期
- l初始化:当某Servlet被第一次请求时,Servlet引擎调用init()方法初始化这个Servlet
- l提供服务:当Servlet对象被创建后,调用service()方法为用户提供服务
- l销毁:调用Servlet的destroy()方法把内存中Servlet对象销毁
4.servlet开发配置
•两个基本Java Servlet 开发包:javax.servlet和javax.servlet.http
–javax.servlet提供了用来控制Servlet生命周期所需的类和接口,是编写Servlet必需要实现的。
–javax.servlet.http提供了处理与HTTP相关操作的类和接口
•编写一个Servlet必需直接或间接实现Servlet接口
–实际开发中,继承 javax.servlet.http.HttpServlet或者javax.servlet.GenericServlet
(待续)