JSP

2018-08-26  本文已影响0人  一只96年的程序猿

JSP概述

由sun公司提供的动态web资源的开发技术。本质上是一个servlet.

[toc]

1.JSP由来

JSP的出现是为了解决Servlet在响应时不适合向外输出页面的问题.

2.JSP执行过程


3.JSP语法

模板元素

直接写在jsp页面中的html内容称之为jsp页面的模板元素

模板元素在翻译后的Servlet中,直接被out.write原样输出到浏览器。

JSP表达式

格式: ==<%= 表达式 %>== 其中可以书写常量、变量、表达式


作用:JSP表达式在翻译后的Servlet中是执行表达式的值再原样输出到浏览器

<%= "Hello JSP" %>
<%= 153+231 %>

JSP脚本片段

格式:==<% java语句 %>==

作用:在翻译过来的servlet中,脚本片段中的Java代码被复制粘贴到对应的位置执行

<% for(int i = 0;i<10;i++){ %>
    Hello JSP...<br/>
<% } %>

JSP注释

格式:==<%-- JSP注释 --%>==

注意: 注释不能交叉嵌套!!

JSP指令

用于指挥JSP解析引擎如何来翻译当前JSP页面中其它部分的内容

(1)page指令

用来声明当前JSP页面的基本属性的,page指令可以写在JSP页面的任意位置,但是为了可读性考虑,一般情况下最好放在JSP页面的最前面

格式:==<%@ page ... %>==

(1)<%@ page language="java" %> -- 指定当前JSP使用的语言是java.(了解即可)

(2)<%@ page pageEncoding="UTF-8"%> -- 用来通知JSP解析引擎使用指定的编码来翻译JSP。如果想防止JSP乱码,应该要保证JSP文件保存时的编码和pageEncoding指定的编码保持一致。

(3)<%@ page session="true"%> -- 用来指定当前页面是否使用session,如果设置为true,则翻译过来的servlet中将会有对session对象的引用,于是可以直接在JSP中使用session隐式对象。但
是这将导致一旦访问JSP就会调用request.getSession()方法,可能导致不必要的空间浪费。如果确定JSP中不需要session可以设为false.

(4)<%@ page errorPage="filepath"%> -- 为当前JSP页面指定友好错误提示页面,即当前JSP如果抛出了异常,将会跳转到errorPage属性指定的页面。

(5)<%@ page import="..."%> -- 为JSP翻译后的Servlet指定所依赖的jar包

<%@page import="java.util.Date"%>
<%@page import="java.io.File" %>
<%@page import="java.sql.DriverManager"%>
(2)include指令

可以实现页面包含的效果

格式: ==<%@ include file="" %>==

(3)taglib指令

引入JSTL标签库

4.JSP的九大隐式对象

JSP翻译引擎在将JSP翻译成servlet的过程中,在servlet里预先定义了九个对象,因此我们可以在JSP页面中直接使用这九个对象

隐式对象 info
page this
request ServletRequest
response ServletResponse
application ServletContext
config ServletConfig
session HttpSession
exception
out 等价于response.getWriter()
pageContext

pageContext

代表当前JSP页面的运行环境的对象,通过该对象可以访问页面中的共享数据

(1).pageContext对象可以获取其他八大隐式对象
(2).pageContext是一个域对象
方法 相关描述
setAttribute(String name,Object value) 添加一个域属性
getAttribute(String name) 根据指定的属性名获取属性值.
removeAttribute(String name) 根据指定的属性名删除一个属性.

生命周期:当访问JSP开始时创建pageConext对象,当访问JSP结束时销毁pageContext对象.

作用范围: 整个JSP页面

主要功能: 在整个JSP页面中实现数据的共享

四大作用域范围: ServletContext > Session > Request > pageContext

5.JSP标签技术

于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来代替JSP页面中java代码,并且推荐,JSP2.0以后不要在JSP页面中出现任何一行java代码

EL表达式

EL表达式在JSP中可以非常方便的获取数据,可以代替JSP页面中的JSP表达式(<%= %>)

基本结构: ${ 表达式 }

EL只能获取不能设置!!!


EL只能获取不能遍历!!!

(1) 获取常量/变量(必须存入域中)/表达式的值
    ${ "Hello EL" }
    ${ 123+456 }
    
    <br/>
    <%= "Hello EL" %>
    <%= 123+456 %>
    
    <hr/>
    <% String name = "赵云"; %>
    
    <%= name %>
    <%-- 上面通过JSP表达式获取name, 是在当前JSP运行环境
        中获取名称为name的变量的值 --%>
    
    <%
        request.setAttribute("name", "request张飞");
        session.setAttribute("name", "session张飞");
    %>
    ${ name }
    <%-- 通过EL获取name, 是在四大域中寻找名称为name的属性
        值, 如果找到就返回name属性的值, 如果找不到就什么
        也不输出!!
        在寻找时, 是按照从小到大的顺序到四大域中寻找指定
        名称的属性值!!
     --%>
(2)获取域中数组或集合中的数据
   <%
        String[] names = 
            { "王海涛", "齐雷", "陈子枢", "刘沛霞" };
        request.setAttribute("names", names);
    %>
    ${ names[0] }
    ${ names[1] }
    ${ names[2] }
    ${ names[3] } 
(3)获取域中map集合中的数据
    <%
        Map map = new HashMap();
        map.put("name", "刘德华");
        map.put("age", 18);
        map.put("nickname", "Andy");
        
        request.setAttribute("map", map);
    %>
    ${ map.name }
    ${ map.age }
    ${ map.nickname }

JSTL标签库

(1)c:set标签
<c:set var="name" value="张三丰" scope="request"/>
    ${ name }
<c:set var="name" value="张无忌" scope="request"/>
    ${ name }
    <%
        Map map = new HashMap();
        map.put("name", "刘德华");
        map.put("age", 18);
        map.put("nickname", "Andy");
        
        request.setAttribute("map", map);
    %>
    修改前: 
    ${ map.name }
    ${ map.age }
    ${ map.nickname } 
    <hr/>
    <c:set target="${map}" property="name" value="阿凡达"/>
    <c:set target="${map}" property="nickname" value="小达达"/>
    修改后:
    ${ map.name }
    ${ map.age }
    ${ map.nickname }
(2)c:if标签
    <c:if test="${ 3>5 }">yes</c:if>
    <c:if test="${ !(3>5) }">no</c:if>
    
    <!-- 模拟判断用户是否登录 -->
    <%
        session.setAttribute("user", "张三");
        session.removeAttribute("user");
    %>
    <c:if test="${ user == null }">
        <a href="#">您好, 请登录...</a>
    </c:if>
    <c:if test="${ user != null }">
        欢迎, ${ user } 回来...
    </c:if>
(3)c:forEach标签
    <%
        List list = new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("刘能");
        request.setAttribute("list", list);
        
        for(Object o : list){
            System.out.println(o);
        }
    %>
    <c:forEach items="${list}" var="o">
        ${ o }<br/>
    </c:forEach>
    <%
        Map<Object, Object> map = new HashMap();
        map.put("name", "刘德华");
        map.put("age", 18);
        map.put("nickname", "Andy");
        request.setAttribute("map", map);
        
        for(Map.Entry<Object,Object> e : map.entrySet()){
            System.out.print(e.getKey() + " : ");
            System.out.println(e.getValue());
        }
    %>
    <c:forEach items="${map}" var="entry">
        <%-- ${ entry.getKey() } : ${ entry.getValue() } <br/> --%>
        ${ entry.key } : ${ entry.value } <br/>
    </c:forEach>
参数 相关描述
first Boolean,当前被遍历元素是否是第一个
last Boolean,当前被遍历的元素是否是最后一个
count 数值,当前被遍历元素是第几个
index 索引,当前被遍历元素的索引值()
上一篇下一篇

猜你喜欢

热点阅读