在开发过程中,servlet做界面非常不便,这时把servlet包装一下,产生了jsp,如下
然而servlet并没有丢弃,在实际开发中servlet通常用作控制处理;jsp做界面,比较符合mvc模式。
(1)<%=表达式%>
(2)<% %>里面可以嵌套java片段,这些片段最终被翻译在servlet的service函数中。所以尽管有多个<% %>但还是相当于一个<% %>。由此可见,在<% %>里面定义的变量,是局部变量。如下:
JSP页面
<!DOCTYPE HTML >
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="pragma"content="no-cache">
<meta http-equiv="cache-control"content="no-cache">
<meta http-equiv="expires"content="0">
</head>
<body>
<% int i=3;%>
<% int j=7; %>
<% int k=i+j; %>
</body>
</html>
翻译为servlet文件,起其service方法的部分代码如下:
out.write("\t<metahttp-equiv=\"pragma\" content=\"no-cache\">\r\n");
out.write("\t<meta http-equiv=\"cache-control\"content=\"no-cache\">\r\n");
out.write("\t<meta http-equiv=\"expires\"content=\"0\"> \r\n");
out.write(" </head>\r\n");
out.write(" <body>\r\n");
out.write(" ");
inti=3;
out.write("\r\n");
out.write(" ");
int j=7;
out.write("\r\n");
out.write(" ");
intk=i+j;
out.write("\r\n");
out.write(" </body>\r\n");
out.write(" </html>\r\n");
(3)<%! %>中可以定义变量或方法,在此处定义的变量为全局变量,被翻译为servlet类的类变量。
(4)<!-- -->html注释方式,可以使用在jsp中,但此注释会被返回给浏览器端,造成额外数据量的传输;
<%-- --%> jsp注释,此种方式的注释,不会返回给浏览器,只能在服务器端看得到。
(5)jsp中的tag是通过servlet的out对象输出到浏览器端的。
指令元素:用于从jsp发送一个信息到容器,比如:设置字符编码,全局变量,引入包等。起其格式如下:<%@ 指令名属性名=”属性值”>
(1)page指令
<%@ page contentType=”text/html; charset=”utf-8"%>
参数 |
默认值 |
释义 |
language |
language=”java” |
jsp中嵌入的语言 |
contentType |
contentType=”text/html;charset=utf-8” |
设定MIME类型及JSP页面的编码方式 |
pageEncoding |
Utf-8 |
指定servlet引擎易哪种编码方式翻译jsp到servlet,并指定网页以什么编码方式显示页面 |
import |
import=”java.util.*” |
引入JSP页面使用的Java API |
session |
true |
是否在jsp页面创建session对象 |
buffer |
8k |
决定输出流是否使用缓冲区,默认为8K |
autoFlash |
true |
当buffer满后,是否自动刷新到浏览器 |
errorPage |
|
当jsp页面出错时,跳转到指定的JSP页面;要求使用相对路径,当”/”开始时,表示当前web应用的根目录,如果不以”/”开头则表示相对本jsp页面 |
isErrorPage |
false |
设定此jsp页面是否为处理异常的页面,当isErrorPage为true时,就可以在此页面中访问内置的exception对象,进而进行异常处理,显示一些提示信息等。此页面就可以被其他jsp页面中的errorPage属性引用了。 |
isELIgnored |
false |
设定jsp页面是否执行el表达式 |
(2)include指令
<%@ include=”finename” %>
该指令用于引入一个文件,通常是html、JSP文件,JSP引擎会把这两个JSP文件翻译成一个servlet文件,也称为静态引入。静态引入只是简单的将页面内容合并,所以若在多个jsp页面出现重复变量,在jsp编译为class文件时就会报错。所以被引入的html、jsp文件只需保留page指令即可,<body>标签均要省略。
动作标签<jsp:include>也称为动态引入,动态引入是分别编译的,之后再把html进行合并。<jsp:include>元素允许引入静态文件和动态文件。如果是静态文件,则只是将文件内容进行合并;若是动态文件,那么这个包含的的文件也会被编译执行的。
(3)taglib指令
这个指令允许在JSP页面使用自定义的标签,如
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
动作标签是使用xml语法写的,是JSP规定的一系列标准动作。在容器处理JSP时,当遇到动作元素,就执行相应的操作。
指令 |
描述 |
<jsp:include> |
引入一个动态的文件。静态引入与动态引入的区别:动态引入把两个JSP页面分别翻译、编译;所以被引入的jsp中可以包含<body>等标签 |
<jsp:forward> |
请求转发.在开发jsp过程中,通常把jsp放入WEB-INF目录下,可以防止用户直接访问这些文件。因为服务器是不会直接让外界来访问WEB-INF目下的文件,这时我们可以在webRoot下有一个入口页面,主要作用是转发,如下 <jsp:forward page=”WEB-INF/xxx.jsp”></jsp:forward> |
<jsp:param> |
为其他指令提供附加信息,如传递参数,常常与<jsp:include>结合使用 <jsp:include file=”info.jsp”> <jsp:param name=”param1” value=”value1”/> <jsp:param name=”param2” value=”value2”/> </jsp:include> |
<jsp:plugin> |
在浏览器中执行一个applet或Bean |
<jsp:fallback> |
Java插件不能启动时显示给用户的错误提示 |
<jsp:useBean> |
找到并实例化一个JavaBean |
<jsp:setProperty> |
设置一个JavaBean属性 |
<jsp:getProperty> |
将JavaBean的属性插入到输出点 |
内置对象 |
描述 |
out |
输出流,对应Servlet的getWriter |
request |
对应servlet的HttpServletRequest对象 |
response |
对应servlet的HttpServletResponse对象 |
session |
对应 servlet的HttpSession对象 |
application |
对应servlet的ServletContext对象 |
pageContext |
代表当前jsp页面,只在当前页面内有效 |
exception |
代表运行时的一个异常 |
page |
代表jsp这个实例本身,相当servlet中的this对象 |
config |
对应servlet的ServletConfig对象 |
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/sunshuolei/article/details/48144545