jsp基本语法总结
一,用jsp脚本元素调用java代码
1,jsp表达式的应用
jsp表达式将值直接插入到输出中:
<%= Java Expression %> 代表一个值
隐式对象,在使用jsp表达式的时候:
<%= request.getParameter("testParam") %>
<%= session.getId() %>
<%= application.getServerInfo() %>
request,session,application都是隐式对象
XML程序设计者可以使用下列的语法替代jsp表达式
<jsp:expression>Java Expression</jsp:expression>
2,编写scriptlet(有效java代码段)
<% Java Code %>
可以完成单独使用表达式不能完成的任务,例如设置响应报头和状态,循环语句等
XML形式:
<jsp:scriptlet>Java Code</jsp:scriptlet>
1)一个示例:
<%
String bgColor = request.getParameter("bgColor");
if ((bgColor ==null) || (bgColor.trim().equals(""))) {
bgColor ="WHITE";
}
%>
2)使用scriptlet将jsp页面的某些部分条件话
//用一个随机数将输出条件话
//html语句和java代码穿插混合,java语句用<% %>包含起来!! <%if (Math.random() <0.5) { %>
<H1>Have a <I>nice</I> day!</H1>
<% } else { %>
<H1>Have a <I>lousy</I> day!</H1>
<% } %>
可以看出,这样的使用方式不利于代码的阅读,一般只将少量java代码与html代码混合,否则可读性不好。
3,使用声明
<%! Field or Method Definition %>
jsp声明可以将方法或字段的定义放在servlet类定义之中,_jspService方法之外!!!
以下列一小段jsp片段为例,
<H1>Some Heading</H1>
//jsp声明
<%!
private String randomHeading() {
return("<H2>"+ Math.random() +"</H2>");
}
%>
<%= randomHeading() %>
这段jsp生成的servlet就可能会是下列片段:(注意jsp转化为servlet后声明的位置--servlet类定义之中,_jspService方法之外)
public class xxxx implements HttpJspPage { //jsp生成servlet后声明的位置
private String randomHeading() {
return("<H2>"+ Math.random() +"</H2>");
} //servlet的输出在此方法执行
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
HttpSession session = request.getSession();
JspWriter out = response.getWriter();
out.println("<H1>Some Heading</H1>");
out.println(randomHeading());//可以在此调用上述声明
...
}
...
}
XML形式:
<jsp:declaration>Field or Method Definition</jsp:declaration>
声明的例子:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>JSP Declarations</TITLE>
<LINK REL=STYLESHEET
HREF="JSP-Styles.css"
TYPE="text/css">
</HEAD>
<BODY>
<H1>JSP Declarations</H1>
<%! private int accessCount =; %>//声明,不必声明为static
<H2>Accesses to page since server reboot:
<%=++accessCount %></H2>
</BODY></HTML>
客户对同一servlet的多个请求只会产生多个线程,每一个线程调用单一servlet的service方法,因此上述不用声明为static,每次访问共享变量
二,控制所生成的servlet的结构:jsp page指令
jsp指令影响由jsp页面生成的servlet的整体结构。
在jsp中,主要有三种类型的指令:page,include,taglib
page指令可以放在文档的任何地方,鱼讯我们通过类的导入,servlet超类的定制,内容类型的设定以及诸如此类的事务来控制servlet的结构。
include指令应该放置在文档中希望插入文件的地方
taglib定义自定义的标记标签,将在第二册高级技术里面讲解
这一章来看page指令:
page指定可以定义下面这些属性(按使用频度高低):import, contentType,pageEncoding, session, isELIgnored (JSP 2.0 only), buffer, autoFlush,info, errorPage, isErrorPage, isThreadSafe, language, extends
1,import属性
指定jsp页面转换成servlet应该输入的包()
<%@ page import="package.class1,...,package.classN" %>
import是page的属性中唯一可以在同一文档中多次出现的属性。
2,contentType属性和pageEncoding属性
contentType属性设置content-Type响应报头,标明发送到客户程序的文档的MIME类型
<%@ page contentType="MIME-Type" %>
例如:<%@ page contentType="application/vnd.ms-excel" %>
同样的,用下列方法也可以设置MIME类型:<% response.setContentType("application/vnd.ms-excel"); %>
两者是有区别的,前者只用到jsp语法,而后者用到明确的java代码;另外后者能够有条件的执行,而page指令不行(response.setContentType作为java语句可以放在条件中,根据条件来决定设置什么样的mime类型)
pageEncoding属性设置字符集;
3,session属性
控制页面是否参与HTTP会话:
<%@ page session="true" %> <%-- 默认情况是参与 --%>
<%@ page session="false" %>
对于高流量网站,使用session属性可以节省大量的服务器内存。
4,isELIgnored属性
是否忽略jsp2.0表达式语言(jsp2.0 引入一种间接地表达式语言,后面将介绍)
<%@ page isELIgnored="false" %>
<%@ page isELIgnored="true" %>
5,buffer和autoFlush属性
buffer属性指定out变量使用的缓冲区大小:
<%@ page buffer="32kb" %>
<%@ page buffer="none" %>
aotoFlush属性控制当缓冲区充满之后,应该自动清空缓冲区(默认)还是在缓冲区溢出后抛出异常:
<%@ page autoFlush="true" %> <%-- Default --%>
<%@ page autoFlush="false" %>
6,info属性
定义一个可以再servlet中通过getServletInfo方法获取的字符串:
<%@ page info="Some Message" %>
7,errorPage属性和isErrorPage属性
errorPage属性指定一个jsp页面,该页面处理当前页面抛出但未被捕获的任何异常:
<%@ page errorPage="Relative URL" %>
指定的页面可以由Exception变量访问抛出的异常
isErrorPage表示当前页是否可以作为其他jsp页面的错误页面:(默认不可以)
<%@ page isErrorPage="true" %>
<%@ page isErrorPage="false" %> <%-- Default --%>
8,isThreadSafe属性
一般不用,显式同步具体的代码段即可
9,extends属性
指定jsp页面生成的servlet的超类:
保留使用
10,language属性
指定页面使用的脚本语言
<%@ page language="java" %>
目前来说java是默认选择也是唯一选择
11,指令对应的XML语法
<jsp:directive.directiveType attribute="value" />
例如:<%@ page import="java.util.*" %>
的XML等价形式:
<jsp:directive.page import="java.util.*" />
三,在jsp页面中包含文件和applet
在jsp中,主要有3种功能可以将外部内容包含到jsp文档:
jsp:include 动作:在请求期间将其他页面的输出包含进来,它包含次级页面的输出,而非次级页面的实际代码。
include指令。 在主页面转换成servlet之前,将jsp代码插入其中。
jsp:plugin动作。将java插件的applet插入到jsp页面中。
1,在请求期间包含页面:jsp:include动作
1)假定你有一系列的页面,每一个拥有相同的导航栏,联系信息或者脚注,通常的解决防范是使用某种服务器端包含机制,在页面请求时将公共块插入到其中。
用page属性来指定jsp:include动作包含的页面的路径:
<jsp:include page="bios/cheng-yinghua.jsp" />
jsp:include动作只有上述的XML语法形式,没有对应的jsp语法
2)flush属性
jsp:include动作还有一个次级属性,指定在将页面包含进来之前是否清空主页面的输出流(默认是false)
<jsp:include page="relative-path-to-resource" flush="true" />
3)jsp:include动作的例子
例如之前做过的招办系统左侧导航目录,在每个页面中都会出现,可以写一个次级页面
4)jsp:param元素:增加请求参数
被包含的页面与最初请求的页面使用相同的请求对象,如果你想看到的请求参数与主页不同,增加或者替换原来主页中的参数,可以在 jsp:include动作中使用这个元素:
<jsp:include page="/fragments/StandardHeading.jsp">
//在次级页面中添加新的元素或者替换主页的元素
<jsp:param name="bgColor" value="YELLOW"/>
</jsp:include>
这样,如果原页面没有背景颜色,你可以在次级页面里面添加,就跟主页面得到不一样的结果了
2,在页面跳转期间包含文件:include指令
<%@ include file="Relative URL" %>
XML形式:
<jsp:directive.include file="..." />
区别部分截图:
include指令带来的维护问题---它会影响主页面,它允许包含的文件中含有影响主页面的jsp代码
一个应用,在下列例子中,我们会用include指令来代替include动作:
假定有这样一个jsp页面,它含有访问计数和对当前页面最近访问的相关信息。再次,有好几个主页面都要使用这种类型的脚注,我们希望每个使用这个脚注页面的主页面都维护各自独立的访问计数,我们不希望脚注的jsp成为一个单独的servlet,而希望它成为主页面的产生的servlet的一部分,因此需要include指令。
//脚注jsp
<%@ page import="java.util.Date"%>
<%-- The following become fields in each servlet that
results from a JSP page that includes this file. --%>
<%!
private int accessCount =;
private Date accessDate =new Date();
private String accessHost ="<I>No previous access</I>";
%>
<P>
<HR>
This page ©
<A HREF="http//www.my-company.com/">my-company.com</A>.
This page has been accessed <%=++accessCount %>
times since server reboot. It was most recently accessed from
<%= accessHost %> at <%= accessDate %>.
<% accessHost = request.getRemoteHost(); %>
<% accessDate =new Date(); %>
主页面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Some Random Page</TITLE>
<META NAME="author" CONTENT="J. Random Hacker">
<META NAME="keywords"
CONTENT="foo,bar,baz,quux">
<META NAME="description"
CONTENT="Some random Web page.">
<LINK REL=STYLESHEET
HREF="JSP-Styles.css"
TYPE="text/css">
</HEAD>
<BODY>
<TABLE BORDER= ALIGN="CENTER">
<TR><TH CLASS="TITLE">
Some Random Page</TABLE>
<P>
Information about our products and services.
<P>
Blah, blah, blah.
<P>
Yadda, yadda, yadda.
<%@ include file="/WEB-INF/ContactSection.jsp"%>//include指令
</BODY></HTML>
下面的脚注是主页面servlet的一部分,被独立维护,(如果有另一个主页面也引用这个脚注的话,互不影响)
3,包含使用java插件的applet
略
jsp基本语法总结的更多相关文章
- JSP学习——语法(二)
1:JSP运行原理和九大隐式对象: 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一 ...
- JSP基本语法
在tomcat环境搭建一文中为大家详细的介绍了第一个JSP的程序--Hello World,大家都应该顺利的完成了吧,以此为一个开端,希望大家在学习java EE的路上乘风破浪,不断进步.今天,为大家 ...
- jsp基本语法及运行原理
一.jsp简介 JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导.许多公司参与一起建立 ...
- JavaWeb基础-Jsp基础语法
jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文 ...
- 关于jsp基本语法:第一章节
今天我学习了关于JSP基本语法的一些知识点. JSP全名是 Java server pages,其根本是一个简化的Servlet设计,实现了在java当中使用HTML标签.JSP是一种动态网页技术,标 ...
- JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)
时隔半年,回头对jsp复习整理一下,温故而知新. jsp工作原理: jsp服务器管理jsp页面分两个阶段:转换阶段(translation phase)和执行阶段(execution phase). ...
- 一、 JSP概述 二、JSP的语法结构 三、JSP内置对象
一.JSP概述###<1>概念 java服务器页面 可以编写动态页面 其内部是以HTML标签为主,可以在HTML标签嵌套java代码 jsp文件以.jsp为后缀 jsp本质上就是一个Ser ...
- Jsp基础语法(由简入杂)
JSP基础语法 一,JSP简介 Jsp是一个简化的Servlet设计,是在服务器端执行,他实现了再Java中使用HTML标签. Jsp是一种动态网页技术标准也是JAVAEE的标准 二,常见动态网站开发 ...
- Jsp的语法和指令
Jsp的三种注释 前端语言注释:<!-- --> 会被转译,也会被发送,但是不会被浏览器执行 java语言注释: 会被转译,但是不会被servlet执行 Jsp注释:<%-- -- ...
- JSP学习(一)JSP基础语法
JSP基础语法 1.JSP模版元素 JSP页面中的HTML内容称之为JSP模版元素. JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观. <%@ page language=&quo ...
随机推荐
- leetcode644. Maximum Average Subarray II
leetcode644. Maximum Average Subarray II 题意: 给定由n个整数组成的数组,找到长度大于或等于k的连续子阵列,其具有最大平均值.您需要输出最大平均值. 思路: ...
- Mysql报错 Cannot load from mysql.proc
Auth: Jin Date: 20140716 mysql --default-character-set utf8 -h127.0.0.1 -uroot -p < account-20140 ...
- jQuery如何获取动态添加的元素
1. 使用 on()方法 本质上使用了事件委派,将事件委派在父元素身上 自 jQuery 版本 1.7 起,on() 方法是 bind().live() 和 delegate() ...
- JavaScript Diagramming
JavaScript Diagramming Optensity
- Java过滤任意(script,html,style)标签符,返回纯文本--封装类
import java.util.regex.Pattern; /** * 过滤标签字符串,返回纯文本 * */ public class ChangePlainText { ...
- switch语句的基本使用
switch是一个多分支的选择语句. 1.基本格式: switch(整型表达式){ case 整型字面量: ...... default : } 解释: 1)整型字面量可 ...
- linux里install命令和cp命令的区别
转:http://blog.yikuyiku.com/?p=2659 基本上,在Makefile里会用到install,其他地方会用cp命令. 它们完成同样的任务——拷贝文件,它们之间的区别主要如下: ...
- ANDROID打包错误ERROR:EXECUTION FAILED FOR TASK ´:APP:LINTVITALRELEASE´.
来自:http://dditblog.com/itshare_657.html 今天修改之前的项目之后.准备打包的时候.一起打包不了.一直提示有问题.错误是一些什么Strings.xml里面的一些信息 ...
- 【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
即如下: [想做到点击nav侧边栏,仅替换右边div中的内容,而不是跳转到新的页面,这样的话,其实整个项目中就只有一个完整的页面,其他的页面均只写<body>内的部分即可,或者仅仅写要替换 ...
- Drawable的getIntrinsicHeight()和getIntrinsicWidth()
版权声明:本文为博主原创文章,未经博主允许不得转载. 今天遇到一个问题,一个Bitmap封装到BitmapDrawable中 ,BitmapDrawable drawable = new Bitmap ...