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

栏目: JSP · 发布时间: 7年前

内容简介:JSP经典学习笔记(包含各种入门常用语法)

本文介绍了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"%>

如果被嵌入的文件经常需要改变,建议使用 操作指令,因为它是动态的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:param name="parameterName" value="patameterValue"/>
</jsp:include>

flush属性用于指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中;如果指定为false,则包含在原文件中。例:

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

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语法格式:

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

setProperty指令语法格式:

getProperty指令语法格式:

例:

<!-- 创建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

I18N 格式标签库

fmt

http://java.sun.com/jsp/jstl/fmt

SQL 标签库

sql

http://java.sun.com/jsp/jstl/sql

XML 标签库

Xml

http://java.sun.com/jsp/jstl/xml

函数标签库

fn

http://java.sun.com/jsp/jstl/functions

核心标签库

功能分类

标签名称

表达式操作

out set remove catch

流程控制

if choose when otherwise

迭代操作

forEach forTokens

URL 操作

import param url redirect

使用:

将标签库中所有的.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程序设计有所帮助。


以上所述就是小编给大家介绍的《JSP经典学习笔记(包含各种入门常用语法)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Hacking Growth

Hacking Growth

Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00

The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具