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

  • 相关阅读:
    Vue-dialog(弹框组件)
    Vue封装select下拉组件
    RAID总结
    消息队列
    存储
    算法开始
    硬件杂记
    要看的
    关于kernel的疑问,不解
    杂技
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314821.html
Copyright © 2011-2022 走看看