[版权申明:本文系做者原创,转载请注明出处]
文章出处:http://blog.csdn.net/sdksdk0/article/details/51925232
做者:朱培 ID:sdksdk0html
JSP全名为Java Server Pages,中文名叫java服务器页面。是一种用于开发动态web资源的技术。容许用户嵌套html和java代码。JSP实际上就是servlet。java
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能经过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。git
重点在于显示数据。github
jsp页面中的java代码服务器是如何执行的?web
web服务器在执行jsp页面时,是如何把jsp页面中的html标签发送到客户端的?
经过标签中的等部分。out.write方法写(以下图)。
jsp输出模板内容:把html内容翻译到对应servlet的service方法中,由一个JspWriter的对象进行输出。
在tomach中通过转换的demo1.java文件中的内容。
编程
web服务器在调用jsp时,会提供jsp一些什么java对象?
pageContext、HttpSession、ServletContext、ServletConfig等浏览器
语法:
<%!
java代码缓存
%>
做用:定义jsp对应类的成员。服务器
语法:<%– 这是注释 –%>
做用:注释JSP中的代码markdown
注意:它的做用和HTML注释的做用是彻底不一样的。JSP注释根本不会被翻译到servlet中,而HTML注释是把代码运行后的结果注释掉,运行效率低。
<% @指令名称 属性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页面发生异常时转向(转发)的一个地址,若是地址以”/”开头,/表明当前应用,绝对路径。不以/开头,表示相对路径。
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page>
isErrorPage:是否产生Throwable对象,默认是false.
<%=exception.getMessage() %>
contentType:指示响应正文的MIME类型和编码.
pageEncoding:JSP引擎读取JSP文件时使用的编码。
isELIgnored:是否忽略EL表达式。默认值是false,不忽略.
静态包含:
<%@include file="/index.jsp" %>
动态包含:
<jsp:include page="/index.jsp"></jsp:include>
导入外部标签库,替换jsp中的java片断。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
指在jsp的<%=%>和<% %>能够直接使用的对象。
request、response、session、exception、application、config、page、out、pageContext
自己是一个域对象,还能操做其余三个域对象(ServletRequest、HttpServlet、ServletContext)中的数据。
操做其余三个域对象:
PageContext.PAGE_SCOPE|PageContext.REQUEST_SCOPE|PageContext.SESSION_SCOPE|PageContext.APPLICATION_SCOPE
pageContext对象提供了对JSP页面内全部的对象及名字空间的访问,也就是说他能够访问到本页所在的SESSION,也能够取本页面所在的application的某一属性值,他至关于页面中全部功能的集大成者,它的本 类名也叫pageContext。
jsp:include:动态包含
jsp:forward:请求转发
jsp:param:结合以上标签使用。
<jsp:forward page="pageContext/demo2.jsp" > <jsp:param value="abc" name="username" /> <jsp:param value="123" name="pwd" /> </jsp:forward>
jsp中操做javabean
jsp:useBean
先查找再建立。
<jsp:useBean id="student" class="cn.tf.domain.Student" scope="page" />
jsp:setProperty
<jsp:setProperty property="name" name="student" value="学生"/> <jsp:getProperty property="name" name="student" />
不是单独的语言,而是jsp规范中获取数据的一种方式。能够获取数据、运算、访问普通静态方法等功能。
不支持字符串链接操做。
只能获取存在于四个域对象中的数据。
EL对于null这样的数据,显示在页面上表现为一个空字符串。
${s} pageContext.findAttribute(“s”);
无空指针问题。
运算符:
.
[]
<!-- 获取javabean的属性 --> <% Student student=new Student(); student.setAddress(new Address()); pageContext.setAttribute("s",student); %> ${s.name}==${s['name']} ${s.address.province } <!-- 获取List集合中的元素 --> <% List list=new ArrayList(); list.add("a"); list.add("b"); list.add("c"); pageContext.setAttribute("list",list); %> ${list[1] } <!-- 获取map中的元素 --> <% Map map=new HashMap(); map.put("a","1111"); map.put("b","2222"); map.put("c","3333"); pageContext.setAttribute("map",map); %> ${map.b}
empty:判断null、空字符串和没有元素的集合(
${empty p }
三元运算符:
${布尔表达式?true:false}
<% List list=new ArrayList(); list.add("a"); pageContext.setAttribute("list",list); %> ${empty list } <!-- false--> ${empty list ?'您未购买任何东西':'您购买的物品以下'} <% session.setAttribute("user","张三"); %> ${empty user? '您还未登录':'欢迎您' } ${user }
一、编写一个类
public class Function { public static String toUppercase(String data){ return data.toUpperCase(); } }
二、在WEB-INF目录下建一个扩展名为tld的xml文件。
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>my</short-name> <uri>http://www.tianfang1314.cn/myfunctions</uri> <function> <name>toUpperCase</name> <function-class>cn.tf.functions.Function</function-class> <function-signature>java.lang.String toUppercase( java.lang.String )</function-signature> </function> </taglib>
三、在jsp中使用
引入taglib文件:
<%@ taglib uri="http://www.tianfang1314.cn/functions" prefix="my" %>
使用自定义的el表达式“data”,将小写的a转换为大写的A。
<% pageContext.setAttribute("data","aaaaaaa"); %> ${my:toUpperCase(data) }
实际项目中不少都是使用JSTL来进行操做的。