zoukankan      html  css  js  c++  java
  • JSP基础概要


    [版权申明:本文系作者原创,转载请注明出处]
    文章出处:http://blog.csdn.net/sdksdk0/article/details/51925232
    作者:朱培 ID:sdksdk0


    一、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页面发生异常时转向(转发)的一个地址,如果地址以”/”开头,/代表当前应用,绝对路径。不以/开头,表示相对路径。

     <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,不忽略.

    4.2 include

    静态包含:

    <%@include  file="/index.jsp" %>
    

    动态包含:

    <jsp:include page="/index.jsp"></jsp:include>
    

    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的四大域对象

    1. PageContext:存放的数据只能当前页面使用。
    2. ServletRequest:存放的数据可以通过转发传递给下一个转发目标。
    3. HttpServlet:存放的数据可以同一次会话中取出。例如:登陆,购物车信息等
    4. ServletContext:存放的数据被整个应用所共享。

    七、内置标签

    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中操作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" />
    

    这里写图片描述

    九、EL表达式

    不是单独的语言,而是jsp规范中获取数据的一种方式。可以获取数据、运算、访问普通静态方法等功能。
    不支持字符串连接操作。

    9.1 获取数据

    只能获取存在于四个域对象中的数据。
    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}
    

    这里写图片描述

    9.2 运算

    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 }
    

    9.3 隐式对象(11个)

    这里写图片描述

    9.4 自定义EL表达式

    1、编写一个类

    public class Function {
    
    public static String toUppercase(String data){
        return data.toUpperCase();  
    }
    
    }
    

    2、在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>
    

    3、在jsp中使用
    引入taglib文件:

    <%@ taglib uri="http://www.tianfang1314.cn/functions"   prefix="my" %>
    

    使用自定义的el表达式“data”,将小写的a转换为大写的A。

    <%
                pageContext.setAttribute("data","aaaaaaa");
             %>
             ${my:toUpperCase(data) }
    

    实际项目中很多都是使用JSTL来进行操作的。

    源码地址:https://github.com/sdksdk0/JSP

  • 相关阅读:
    Atitit fms Strait (海峡) lst 数据列表目录1. 4大洋 12. 著名的海大约40个,总共约55个海 13. 海区列表 23.1. 、波利尼西亚(Polynesia,
    Atitit trave islands list 旅游资源列表岛屿目录1. 东南亚著名的旅游岛屿 21.1. Cjkv 日韩 冲绳 琉球 济州岛 北海道 21.2. 中国 涠洲岛 南澳
    Atitit Major island groups and archipelagos 主要的岛群和群岛目录资料目录1. 岛群 波利尼西亚(Polynesia, 美拉尼西亚(Melanesia,
    Atitit glb 3tie city lst 三线城市列表 数据目录1. 全球范围内约90个城市 三线 12. 世界性三线城市全球共
    Atitit glb 1tie 2tie city lst 一二线城市列表数据约50个一线城市Alpha ++ 阿尔法++,,London 伦敦,,New York 纽约,,Alpha +
    Attit 现代编程语言重要特性目录第一章 类型系统 基本三大类型 2第一节 字符串 数字 bool 2第二节 推断局部变量 2第三节 动态类型 2第二章 可读性与开发效率 简单性 2
    Atitit 未来数据库新特性展望目录1. 统一的翻页 21.1. 2 Easy Top-N
    使用Chrome DevTools(console ande elements panel)进行xpath/css/js定位
    chrome -console妙用之定位xpath/js/css
    表达式树之构建Lambda表达式
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314821.html
Copyright © 2011-2022 走看看