当前位置: 移动技术网 > IT编程>开发语言>Java > JSP经典学习笔记(包含各种入门常用语法)

JSP经典学习笔记(包含各种入门常用语法)

2017年12月12日  | 移动技术网IT编程  | 我要评论

本文介绍了jsp经典学习笔记。分享给大家供大家参考。具体如下:

jsp是servlet的一种特殊形式,每个jsp页面就是一个servlet实例--jsp页面有系统编译成servlet,servlet再负责响应用户请求。

1.jsp注释

<%--注释内容--%> ,与html注释<!--注释内容-->不同的是,编译后的html页面无法查看到jsp注释内容。

2.jsp声明

jsp声明用于声明变量和方法。jsp声明将会转换成servlet中的成员变量或成员方法,因此,jsp声明依然符合java语法。

格式: <%! 声明部分 %>

<%!
//声明一个整型变量
public int count;
//声明一个方法
public string info(){
 return "hello world";
}
out.println(info());
%>

由于jsp声明语法定义的变量和方法对应于servlet的成员变量和方法,所以jsp声明部分定义的变量和方法可以使用private,public等访问控制符修饰,也可以使用static修饰,将其变成类属性和类方法。但不能使用abstract修饰声明部分的方法,因为抽象方法将导致jsp对应的servlet变成抽象类,从而导致无法实例化。

3.输出jsp表达式

语法格式:<%=表达式%>

<%!
public int count;
public string info(){
 return "hello world";
}
%>
<!--使用表达式输出变量值-->
<%=count++%>
<!--使用表达式输出方法返回值-->
<%=info()%>

注意:输出表达式语法后不能有分号。

4.jsp脚本

通过jsp脚本代码来控制页面静态内容(html等元素)

<%
for(int i=0;i<10;i++){
%>
<tr><td><%=i%></td></tr>
<%}%>

5.jsp的3个编译指令

jsp编译指令是通知jsp引擎的消息,它不直接生成输出。编译指令都有默认值。

page:该指令是针对当前页面的指令。

include:用于指定包含另一个页面。

taglib:用于定义和访问自定义标签。

语法格式:<%@ 编译指令名 属性名="属性值"...%>

5.1.page指令

page指令属性有:language,extends,import,session,buffer,autoflush,info,errorpage,iserrorpage,contenttype

<%@ page contenttype="text/html; charset=gb2312" language="java" %>
<% page import="java.sql.*"%>

5.2.include指令

使用include指令,可以将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句(如果有的话)。这是个静态的include语句,它会把目标页面的其他编译指令也包含进来,但动态include则不会。

include既可以包含静态的文本,也可以包含动态的jsp页面。静态的include编译指令会将被包含的页面加入本页面,融合成一个页面。

include指令语法:<%@include file="relativeurlspec"%>

如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include语句。

静态包含意义:包含页面在编译时将完全包含了被包含页面的代码。

6.jsp的 7个动作指令

动作指令与编译指令不同,编译指令是通知servlet引擎的处理消息,而动作指令知识运行时的脚本动作。编译指令在将jsp编译成servlet时起作用;而动作指令通常可替换成jsp脚本,是jsp脚本的标准化写法。

jsp:forward:执行页面转向,将请求的处理转发到下一个页面。

jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。

jsp:include:用于动态引入一个jsp页面。

jsp:plugin:用于下载javabean或applet到客户端执行。

jsp:usebean:创建一个javabean的实例。

jsp:setproperty:设置javabean实例的属性值。

jsp:getproperty:输出javabean实例的属性值。

6.1.forward指令

forward指令用于将页面响应转发给另外的页面。既可以转发给静态的html页面,也可以转发到动态的jsp页面,或者转发到容器的servlet。

jsp的forward指令语法格式:

<jsp:forward page="{relativeurl|<%=expression%>}">
 {<jsp:param.../>}
</jsp:forward>

请求参数的值可以通过httpservletrequest类的getparameter()方法获取。

<jsp:forward page="forward-result.jsp">
 <jsp:param name="age" value="29"/>
</jsp:forward>

相应的在forward-result.jsp页面可以通过request内置对象来获取age参数值。

<%=request.getparameter("age")%>

执行forward指令时,转发不是重定向,所以请求的地址没有发生改变,当然请求的参数也不会丢失。但页面内容却完全变为被forward目标页的内容。

6.2.include指令

include指令是一个动态include指令,也用于导入某个页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。

include动作指令的语法格式:

复制代码 代码如下:
<jsp:include page="{relativeurl|<%=expression%>}" flush="true"/>

<jsp:include page="{relativeurl|<%=expression%>}" flush="true">
 <jsp:param name="parametername" value="patametervalue"/>
</jsp:include>

flush属性用于指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中;如果指定为false,则包含在原文件中。例:<jsp:include page="scriptlet.jsp"/>

静态导入和动态导入区别:

a.静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体servlet; 而动态导入则在servlet中使用include方法来引入被导入页面的内容。

b.静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。

除此之外,执行include动态指令时,还可以增加额外的请求参数。

实际上,forward动作指令和include动作指令很相似,它们采用方法来引入目标页面,通过查看jsp页面所生成servlet代码可以得出:forward指令使用_jspx_page_context的forward()方法来引入目标页面,而include指令则使用通过jspruntimelibrary的include()方法来引入目标页面。区别在于,执行forward时,被forward的页面将完全代替原有页面;而执行include时,被include的页面只是引入原有页面。简而言之:forward拿目标页面代替原有页面,而include则拿目标页面插入原有页面。

6.3.usebean,setproperty,getproperty指令

这3个指令都是与javabean相关的指令,其中usebean指令用于在jsp页面中初始化一个java实例;setproperty指令用于为javabean实例的属性设置值;getproperty指令用于输出javabean实例属性。

usebean语法格式:<jsp:usebean id="name" class="classname" scope="page|request|session|application" />

其中,id属性是javabean的实例名,class属性确定javabean的实现类。scope属性用于指定javabean实例的生存范围。

setproperty指令语法格式:<jsp:setproperty name="beanname" property="propertyname" value="value"/>

getproperty指令语法格式:<jsp:getproperty name="beanname" property="propertyname"/>

例:

<!-- 创建com.company.person的实例,该实例的实例名位p1 -->
<jsp:usebean id="p1" class="com.company.person" scope="page"/>
<!-- 设置p1的name属性值 -->
<jsp:setproperty name="p1" property="name" value="zhangsan"/>
<jsp:setproperty name="p1" property="age" value="25"/>
<!-- 输出p1的name属性值-->
<jsp:getproperty name="p1" property name="name"/>

7.jsp脚本中的9个内置对象

application,config,exception,out,page,pagecontext,request,response,session

application:javax.servlet.servletcontext的实例,该实例代表jsp所属的web应用本身,可用于jsp页面,或者servlet之间交换信息。常用方法:getattribute,setattribute,getinitparameter.

config:javax.servlet.servletconfig的实例,该实例代表该jsp的配置信息。常用的方法有getinitparamter,getinitparameternames,事实上,jsp页面通常无需配置,也就不存在配置信息。因此,该对象更多地在servlet中有效。

exception:java.lang.throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的iserrorpage属性为true时,该对象才可以使用。常用的方法有getmessage()和printstacktrace()等。

out:javax.servlet.jsp.jspwriter的实例,该实例代表jsp页面的输出流,用于输出内容,形成html页面。

page:代表页面本身,通常没有太大用处. 也就是servlet中的this.

pagecontext:javax.servlet.jsp.pagecontext的实例,该对象代表该jsp页面上下文,使用该对象可以访问页面中的共享数据。常用方法有getservletcontext()和getservletconfig()等。

request:javax.servlet.http.httpservletrequest的实例,该对象封装了一次请求。客户端的请求参数都被封装在该对象里。是个常用对象,获取客户端请求参数必须使用该对象。常用方法有getparameter,getparametervalues,setattribute,getattribute,setcharacterencoding.

response:javax.servlet.http.httpservletresponse的实例,代表服务器端对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用方法:getoutputstream(),sendredirect.

session:javax.servlet.http.httpsession的实例,该对象代表一次会话。常用方法:getattribute,setattribute.

8.jstl jsp标准标签库

jsp的标签函数库主要分为五大类:

jstl
前置名称
uri
范例
核心标签库
c
http://java.sun.com/jsp/jstl/core
<c:out>
i18n格式标签库
fmt
http://java.sun.com/jsp/jstl/fmt
<fmt:formatdate>
sql标签库
sql
http://java.sun.com/jsp/jstl/sql
<sql:query>
xml标签库
xml
http://java.sun.com/jsp/jstl/xml
<x:foreach>
函数标签库
fn
http://java.sun.com/jsp/jstl/functions
<fn:split>

核心标签库

功能分类

标签名称

表达式操作

outsetremovecatch

流程控制

ifchoosewhenotherwise

迭代操作

foreachfortokens

url操作

importparamurlredirect


使用:

将标签库中所有的.jar包(内部是所有的标签处理器)放到/web_inf/lib下,

将所有的.tld(内部是所有的标签库描述)放到/web-inf/tlds下

<%@ page contenttype="text/html;charset=gbk" language="java"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<c:out value="${param.name}" default="welecome jgl to my website!"/>

9.el表达式

${sessionscope.user.sex}

所有el都是以${为起始、以}为结尾的。

el 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

${sessionscope.user.sex}等于${sessionscope.user["sex"]}

. 和 [ ] 也可以同时混合使用,如下:

${sessionscope.shoppingcart[0].price}

希望本文所述对大家的jsp程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网