JSP基础概要
jsp简介">一、jsp简介
jsp全名为java server pages,中文名叫java服务器页面。是一种用于开发动态web资源的技术。允许用户嵌套html和java代码。jsp实际上就是servlet。
jsp技术使用java语言编写类xml的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。jsp将网页逻辑与的显示分离,支持可重用的基于的设计,使基于web的应用程序的开发变得迅速和容易。 jsp(javaserver pages)是一种动态页面技术,它的主要目的是将表示逻辑从servlet中分离出来。
重点在于显示数据。
二、jsp的原理
jsp页面中的java代码服务器是如何执行的?
1、从输入地址, 2、浏览器拿到这个地址然后去tomach中进行查找,找到demo1.jsp, 3、到work/catalina/localhost/jsp中招demo1.class文件, 4、如果没有找到,就把demo1.jsp翻译为demo1.java文件 5、把demo1.java编译为demo1.class文件 6、执行servlet。web服务器在执行jsp页面时,是如何把jsp页面中的html标签发送到客户端的?
通过标签中的等部分。out.write方法写(如下图)。
jsp输出模板内容:把html内容翻译到对应servlet的service方法中,由一个jspwriter的对象进行输出。
在tomach中经过转换的demo1.java文件中的内容。
web服务器在调用jsp时,会提供jsp一些什么java对象?
pagecontext、httpsession、servletcontext、servletconfig等
三、jsp基本语法
3.1 脚本表达式
3.2 jsp脚本
3.3 jsp声明
语法:
<%!
java代码
%>
作用:定义jsp对应类的成员。
3.4 jsp注释
语法:<%– 这是注释 –%>
作用:注释jsp中的代码
注意:它的作用和html注释的作用是完全不同的。jsp注释根本不会被翻译到servlet中,而html注释是把代码运行后的结果注释掉,运行效率低。
四、jsp的指令
4.1 page
<% @指令名称 属性1="值1" 属性2="值2" %>
page指令无论出现在jsp页面中什么地方,它的作用都是整个jsp页面。
作用:
import:导入jsp中的java类,默认导入lang.*,servlet.*jar包。
<%@page import="java.util.date,java.util.list" %>
buffer:jsp页面中有一个字符输出流java.servlet.jsp.jspwriter,它的缓存大小默认为8kb.
errorpage:当当前jsp页面发生异常时转向(转发)的一个地址,如果地址以”/”开头,/代表当前应用,绝对路径。不以/开头,表示相对路径。
java.lang.exception /error.jsp 404 /404.jsp
iserrorpage:是否产生throwable对象,默认是false.
<%=exception.getmessage() %>
contenttype:指示响应正文的mime类型和编码.
pageencoding:jsp引擎读取jsp文件时使用的编码。
iselignored:是否忽略el表达式。默认值是false,不忽略.
4.2 include
静态包含:
<%@include file="/index.jsp" %>
动态包含:
4.3 taglib
导入外部标签库,替换jsp中的java片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
五、jsp的九大隐式对象
5.1 分类
指在jsp的<%=%>和<% %>可以直接使用的对象。
request、response、session、exception、application、config、page、out、pagecontext
5.2 pagecontext
本身是一个域对象,还能操作其他三个域对象(servletrequest、httpservlet、servletcontext)中的数据。
操作其他三个域对象:
pagecontext.page_scope|pagecontext.request_scope|pagecontext.session_scope|pagecontext.application_scope
void setattribute(string name,object v,int scope); object getattribute(string name,int scope); void removeattribute(string name,int scope);pagecontext对象提供了对jsp页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的session,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pagecontext。
六、jsp的四大域对象
pagecontext:存放的数据只能当前页面使用。 servletrequest:存放的数据可以通过转发传递给下一个转发目标。 httpservlet:存放的数据可以同一次会话中取出。例如:登陆,购物车信息等 servletcontext:存放的数据被整个应用所共享。七、内置标签
jsp:include:动态包含
jsp:forward:请求转发
jsp:param:结合以上标签使用。
八、jsp与javabean的使用
jsp中操作javabean
jsp:usebean
先查找再创建。
jsp:setproperty
九、el表达式
不是单独的语言,而是jsp规范中获取数据的一种方式。可以获取数据、运算、访问普通静态方法等功能。
不支持字符串连接操作。
9.1 获取数据
只能获取存在于四个域对象中的数据。
el对于null这样的数据,显示在页面上表现为一个空字符串。
${s} pagecontext.findattribute(“s”);
无空指针问题。
运算符:
.
[]
<% student student=new student(); student.setaddress(new address()); pagecontext.setattribute("s",student); %> ${s.name}==${s['name']} ${s.address.province } <% list list=new arraylist(); list.add("a"); list.add("b"); list.add("c"); pagecontext.setattribute("list",list); %> ${list[1] } <% map map=new hashmap(); map.put("a","1111"); map.put("b","2222"); map.put("c","3333"); pagecontext.setattribute("map",map); %> ${map.b}
9.2 运算
empty:判断null、空字符串和没有元素的集合(
${empty p }
三元运算符:
${布尔表达式?true:false}
<% list list=new arraylist(); list.add("a"); pagecontext.setattribute("list",list); %> ${empty list } ${empty list ?'您未购买任何东西':'您购买的物品如下'} <% session.setattribute("user","张三"); %> ${empty user? '您还未登陆':'欢迎您' } ${user }
9.3 隐式对象(11个)
9.4 自定义el表达式
1、编写一个类
public class function { public static string touppercase(string data){ return data.touppercase(); } }
2、在web-inf目录下建一个扩展名为tld的xml文件。
1.0 my http://www.tianfang1314.cn/myfunctions touppercase cn.tf.functions.function java.lang.string touppercase( java.lang.string )
3、在jsp中使用
引入taglib文件:
<%@ taglib uri="http://www.tianfang1314.cn/functions" prefix="my" %>
使用自定义的el表达式“data”,将小写的a转换为大写的a。
<% pagecontext.setattribute("data","aaaaaaa"); %> ${my:touppercase(data) }
实际项目中很多都是使用jstl来进行操作的。
下一篇: buu reverse Check_1n