频道栏目
首页 > 程序开发 > Web开发 > Jsp > 正文
jsp基础学习之特点、执行过程、语法、注释等
2018-05-14 14:25:47      个评论    来源:qq_17503037的博客  
收藏   我要投稿

jsp特点

1)jsp的运行必须交给tomcat服务器!!!!

tomcat的work目录: tomcat服务器存放jsp运行时的临时文件

2)jsp页面既可以写html代码,也可以写java代码。
    (html页面不能写java代码 。而jsp页面可以写java代码)

<%
    //写java代码
    //获取当前时间
    SimpleDateFormat sdf = new SimpleDateFormat();
    String curDate = sdf.format(new Date());
    //输出内容到浏览器
    out.write("当前时间为2:"+curDate);
 %>

Jsp的执行过程

问题: 访问https://localhost:8080/day12/01.hello.jsp 如何显示效果?

1)访问到01.hello.jsp页面,tomcat扫描到jsp文件,在%tomcat%/work把jsp文件翻译成java源文件
    (01.hello.jsp   ->   _01_hello_jsp.java) (翻译)
2)tomcat服务器把java源文件编译成class字节码文件 (编译)
    (_01_hello_jsp.java  ->  _01_hello_jsp.class)
3)tomcat服务器构造_01_hello_jsp类对象
4)tomcat服务器调用_01_hello_jsp类里面方法,返回内容显示到浏览器。

Jsp语法

语法:<%=变量或表达式%>

作用: 向浏览器输出变量的值或表达式计算的结果
    注意:     
        1)表达式的原理就是翻译成out.print(“变量” );通过该方法向浏览器写出内容
        2)表达式后面不需要带分号结束。

Jsp的脚本

语法:<%java代码 %>

作用: 执行java代码    
    注意:
        1)原理把脚本中java代码原封不动拷贝到_jspService方法中执行。
 脚本中不能声明方法

Jsp的声明

语法:<%! 变量或方法 %>

作用: 声明jsp的变量或方法
注意:
    1)变量翻译成成员变量,方法翻译成成员方法。
可以声明方法
 
 <%
    for(int i=1;i<=6;i++){  
  %>
    >标题<%=i %>>
 <%
  }
  %>

Jsp的注释

语法: <%!– jsp注释 –%>

注意;
    1)html的注释会被翻译和执行。而jsp的注释不能被翻译和执行。

include指令

作用: 在当前页面用于包含其他页面

语法: <%@include file="common/header.jsp"%>
注意:
    1)原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一                  个java源文件,再编译运行!!,这种包含叫静态包含(源码包含)
    2)如果使用静态包含,被包含页面中不需要出现全局的html标签了!!!(如html、head、                     body)

page指令

作用: 告诉tomcat服务器如何翻译jsp文件

<%@ page 
    language="java"   --告诉服务器使用什么动态语言来翻译jsp文件
    import="java.util.*" --告诉服务器java文件使用什么包
                    导入包,多个包之间用逗号分割
    pageEncoding="utf-8"  --告诉服务器使用什么编码翻译jsp文件(成java文件)
    contentType="text/html; charset=utf-8" 服务器发送浏览器的数据类型和内容编码
        注意:在开发工具中,以后只需要设置pageEncoding即可解决中文乱码问题
    errorPage="error.jsp" 指定当前jsp页面的错误处理页面。
    isErrorPage="false" 指定当前页面是否为错误处理页面。false,不是错误处理页面,则不能使用                                exception内置对象;true,是错误处理页面,可以使用exception内置对象。
    buffer="8kb" jsp页面的缓存区大小
    session="true" 是否开启session功能。false,不能用session内置对象;true,可以使用session内                             置对象。
    isELIgnored="false" 是否忽略EL表达式。
%>

配置全局的错误处理页面:

 

    500
    /common/500.jsp

 
    404
    /common/404.html

9大内置对象

内置对象名          类型
  request      HttpServletRequest
response      HttpServletResponse
config        ServletConfig
application        ServletContext
 session         HttpSession
exception        Throwable
page            Object(this)
out             JspWriter
pageContext     PageContext 

Out对象

out对象类型,JspWriter类,相当于带缓存的PrintWriter

PrintWriter:

    wrier(内容): 直接向浏览器写出内容。

JspWriter

    writer(内容): 向jsp缓冲区写出内容

当满足以下条件之一,缓冲区内容写出:

                    1)缓冲区满了
                    2)刷新缓存区
                    3)关闭缓存区
                    4)执行完毕jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="1kb"%><%
    for(int i=1;i<=1024;i++){
        out.write("a");
    }
    //查看缓存区大小
    System.out.println("当前缓存区大小:"+out.getBufferSize());
    //查看缓存区剩余大小
    System.out.println("缓存区剩余大小:"+out.getRemaining());
    //刷新缓存
    //out.flush();
    response.getWriter().write("123");
 %>

pageContext对象

pageContext对象的类型是PageContext,叫jsp的上下文对象

可以获取其他八个内置对象

JspWriter out =pageContext.getOut();
HttpServletRequest rquest =     pageContext.getRequest();

本身是一个域对象

ServletContext context域
HttpServletRequet  request域
HttpSession    session域     --Servlet学习的
PageContext   page域        --jsp学习的

作用: 保存数据和获取数据,用于共享数据

保存数据

1)默认情况下,保存到page域
pageContext.setAttribute("name");
2)可以向四个域对象保存数据
pageContext.setAttribute("name",域范围常量)



//保存数据。默认情况下,保存在page域中
    pageContext.setAttribute("message","page's message");
    pageContext.setAttribute("message","request's messsage",PageContext.REQUEST_SCOPE);//保存到request域中

    request.setAttribute("message","request's message"); 等价于上面的代码

    pageContext.setAttribute("message","session's messsage",PageContext.SESSION_SCOPE);//保存到sessio域中
    pageContext.setAttribute("message","application's messsage",PageContext.APPLICATION_SCOPE);//保存到context域中

获取数据

1)默认情况下,从page域获取
    pageContext.getAttribute("name")
2)可以从四个域中获取数据
    pageContext.getAttribute("name",域范围常量)

    域范围常量:
            PageContext.PAGE_SCOPE
            PageContext.REQUEST_SCOPE
            PageContext..SESSION_SCOPE
            PageContext.APPLICATION_SCOPE
3)自动在四个域中搜索数据
    pageContext.findAttribute("name");
    顺序: page域 -> request域 -> session域- > context域(application域)

 <%--
          原则: 
        1)在哪个域中保存数据,就必须从哪个域取出数据!!!
     --%>
    <%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %>

    <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %>

    <%=pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %>

    <%=pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %>

    

<%-- findAttribute(): 在四个域自动搜索数据 顺序: page域 -> request域 -> session域 -> context域 --%> <%=pageContext.findAttribute("message") %> <% //转发 // request.getRequestDispatcher("/03.pageContext2.jsp").forward(request,response); //重定向 response.sendRedirect(request.getContextPath()+"/03.pageContext2.jsp"); %>

Jsp中的四个域对象

四个域对象:

pageContext      page域              
request          request域
session          session域
application       context域

域对象作用

保存数据 和 获取数据 ,用于数据共享。

域对象方法

setAttribute("name",Object) 保存数据
getAttribute("name")  获取数据
removeAttribute("name") 清除数据

域对象作用范围

page域: 只能在当前jsp页面中使用(当前页面)
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
context域: 只能在同一个web应用中使用。(全局的)

EL表达式

EL作用

jsp的核心语法: jsp表达式 <%=%>和 jsp脚本<% %>。

以后开发jsp的原则: 尽量在jsp页面中少写甚至不写java代码。

使用EL表达式替换掉jsp表达式

EL表达式作用: 向浏览器输出域对象中的变量值或表达式计算的结果!!!

语法: ${变量或表达式}

EL语法

1)输出基本数据类型变量
        1.1 从四个域获取
                        ${name}
        1.2 指定域获取
                        ${pageScope.name}
        域范围: pageScoep / requestScope / sessionScope / applicationScope

   <%
 String name = "rose";  
 //放入域中
 //pageContext.setAttribute("name",name);
 pageContext.setAttribute("name",name,PageContext.REQUEST_SCOPE); 
  %>(必须保存在域中才能用EL表达式获取到)
  <%=name %>
  

  <%--
  1)从四个域自动搜索
   --%>
  EL表达式: ${name }
  <%--
    ${name } 等价于
        <%=pageContext.findAttribute("name")%>
   --%>
   <%--
    2) 从指定的域中获取数据
    --%>
    EL表达式: ${pageScope.name }
    <%--
        ${pageScope.name } 等价于
         <%= pageContext.getAttribute("name",PageContext.PAGE_SCOPE)%>

     --%>

 2)输出对象的属性值
            Student
    3)输出集合对象
           List  和 Map
    4)EL表达式计算

EL输出不同类型的数据

 <%--
    1)EL输出对象的属性    
 --%>
 <%
    //保存数据
    Student student = new Student("eric",20);
    //放入域中
    pageContext.setAttribute("student",student);

    //List
    List  list = new ArrayList();
    list.add(new Student("rose",18));
    list.add(new Student("jack",28));
    list.add(new Student("lucy",38));
    //放入域中
    pageContext.setAttribute("list",list);

    //Map
    Map map = new HashMap();
    map.put("100",new Student("mark",20));
    map.put("101",new Student("maxwell",30));
    map.put("102",new Student("narci",40));
    //放入域中
    pageContext.setAttribute("map",map);

  %>

  <%--使用EL获取对象 --%>
  ${student.name} - ${student.age }
  <%--
   ${student.name} 等价于     (点相对于调用getXX()方法)
      <%=((Student)pageContext.findAttribute("student")).getName()%>
   --%>
<%--使用EL获取List对象 --%> ${list[0].name } - ${list[0].age } ${list[1].name } - ${list[1].age } ${list[2].name } - ${list[2].age } <%-- list[0]等价于 (中括号相对于调用get(参数)方法) ((List)pageContext.findAttribute("list")).get(0) --%>
<%--使用EL获取Map对象 --%> ${map['100'].name } - ${map['100'].age } ${map['101'].name } - ${map['101'].age } ${map['102'].name } - ${map['102'].age }

EL表达式计算

 <%--
    1)算术表达式
      +  -  *  /
 --%>
 ${10+5 }

 ${10*5 }
 

<%-- 2)比较运算 > < >= <= == != --%> ${10>5 }
${10<5 }
${10!=10 }
<%-- 3)逻辑运算 && || ! --%> ${true && false }
${true || false }
${!false }

<%-- 4)判空 null 或 空字符串: empty --%> <% //String name = "eric"; //String name = null; String name = ""; pageContext.setAttribute("name",name); %> 判断null: ${name==null }
判断空字符: ${name=="" }
判空: ${name==null || name=="" } 另一种判空写法: ${empty name }

jsp标签

jsp标签的作用

jsp标签作用:替换jsp脚本。

1)流程判断(if for循环)

2)跳转页面(转发,重定向)

3)。。。。。

Jsp标签分类

1)内置标签(动作标签): 不需要在jsp页面导入标签
2)jstl标签: 需要在jsp页面中导入标签
3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签

动作标签

转发标签:

参数标签:

包含标签:

  <%--转发 --%>
<%
    //request.getRequestDispatcher("/09.action2.jspname=eric").forward(request,response);
 %>
<%-- 参数 --%>
<%--

    
    

  --%>

  <%--包含 --%>
  <%--
 
    
    
 --%>
 <%@include file="common/header.jsp" %>
  主页的内容

原理: 包含与被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。(先翻译再合并),动态包含

静态包含 vs 动态包含的区别?

1) 语法不同
静态包含语法: <%@inclue file="被包含的页面"%>
动态包含语法: 

2)参数传递不同
静态包含不能向被包含页面传递参数
动态包含可以向被包含页面传递参数

3)原理不同
静态包含: 先合并再翻译
动态包含: 先翻译再合并

JSTL标签

JSTL (全名:java standard tag libarary - java标准标签库 )

核心标签库 (c标签库) 天天用
        国际化标签(fmt标签库)
        EL函数库(fn函数库)
        xml标签库(x标签库)
        sql标签库(sql标签库)

使用JSTL标签步骤

    1) 导入jstl支持的jar包(标签背后隐藏的java代码)
                注意:使用javaee5.0的项目自动导入jstl支持jar包
        2)使用taglib指令导入标签库 
                        <%@taglib uri="tld文件的uri名称" prefix="简写" %>
        3)在jsp中使用标签

核心标签库的重点标签:

保存数据:
           

 <%--set标签 :保存数据(保存到域中)默认保存到page域 --%>


<%
    String msg = null;
    pageContext.setAttribute("msg",msg);
 %>

${msg }//取数据
获取数据: 
         

<%--out标签: 获取数据(从域中) 
default: 当value值为null时,使用默认值
escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认)
--%>
//输出结果:

标题3

单条件判断 <%--if标签 :单条件判断--%> 条件成立 多条件判断 <%--choose标签+when标签+otherwirse标签: 多条件判断 --%> 优秀 良好 一般 及格 不及格 循环数据 <%-- forEach标签:循环 --%> <% //List List list = new ArrayList(); list.add(new Student("rose",18)); list.add(new Student("jack",28)); list.add(new Student("lucy",38)); //放入域中 pageContext.setAttribute("list",list); //Map Map map = new HashMap(); map.put("100",new Student("mark",20)); map.put("101",new Student("maxwell",30)); map.put("102",new Student("narci",40)); //放入域中 pageContext.setAttribute("map",map); %>

开始循环

 <%--
  begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
  end="":     到哪个元素结束。默认到最后一个元素
  step="" : 步长    (每次加几)  ,默认1
  items="": 需要遍历的数据(集合) 
  var="": 每个元素的名称 
  varStatus="": 当前正在遍历元素的状态对象。(count属性:当前位置,从1开始)

 --%>

    序号:${varSta.count} - 姓名:${student.name } - 年龄:${student.age}


点击复制链接 与好友分享!回本站首页
上一篇:JSP Servlet基础学习之JSP脚本中的9个内置对象
下一篇:JSP下Tomcat和Myeclipse的安装配置基础
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站