zoukankan      html  css  js  c++  java
  • Java Web之路(五)JSP

    一、jsp的3个指令

    JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。

    在JSP 2.0规范中共定义了三个指令:

    page指令

    1、page:
    作用:用于定义JSP页面的各种属性
    属性:
    1.1、 import 和java代码中的import是一样的

    <%@ page import="java.util.Date,java.util.List"%>

    或者:
    <%@ page import="java.util.Date"%>

    <%@ page import="java.util.List"%>

    JSP会自动导入以下的包:

    import java.lang.*;

    import javax.servlet.*;

    import javax.servlet.http.*;

    import javax.servlet.jsp.*;

    1.2、 session: 是否会自动创建session对象。默认值是true;

    1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb.

    1.4 errorPage: 如果页面中有错误,则跳转到指定的资源。

    errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。

    如果不写“/”则代表相对路径。

    1.5、 isErrorPage: 是否创建throwable对象。默认是false;

    1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8");

    1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。

    1.8、 isELIgnored: 是否支持EL表达式。 默认是false

    <%@ page pageEncoding="gbk" %>

    2、include:
    静态包含:把其它资源包含到当前页面中。

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

    动态包含:

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

    两者的区别:翻译的时间段不同

    前者:在翻译时就把两个文件合并

    后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。

    原则:能用静的就不用动的。

    3、taglib

    作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

    二、jsp的6个动作

     使用标签的形式来表示一段java代码。

    如: <jsp:include page="2.jsp"></jsp:include>

    <jsp:include > 动态包含

    <jsp:forward> 请求转发

    <jsp:param> 设置请求参数

    <jsp:useBean> 创建一个对象

    <jsp:setProperty> 给指定的对象属性赋值

    <jsp:getProperty> 取出指定对象的属性值

             <%
    		Student stu = new Student();
    		stu.setName("tom");		
    		out.print(stu.getName());		
    		//request.getRequestDispatcher("/7.jsp").forward(request, response);
    	 %>
    	 
    	 <jsp:useBean id="stu1" class="com.itheima.entity.Student"></jsp:useBean>
    	 <jsp:setProperty property="name" name="stu1" value="jerry"/>
    	 <jsp:getProperty property="name" name="stu1"/>
    	 <!-- http://localhost:8080/day11_02_jsp2/6.jsp?name=123 -->
    	 <jsp:forward page="/7.jsp">
    	 	<jsp:param value="123" name="name"/>
    	 	<jsp:param value="333" name="pwd"/>
    	 </jsp:forward>

    三、jsp的9个内置对象(指在JSP<%=%> <% %>中可以直接使用的对象

    1.request

    2.response

    3.config

    4.application

    5.exception

    6.Session

    7.page

    8.out

    9.pageContext

    1、本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据

    void setAttribute(String name,Object o);

    Object getAttribute(String name);

    void removeAttribute(String name);

    操作其它域对象的方法

    void setAttribute(String name,Object o,int Scope);

    Object getAttribute(String name,int Scope);

    void removeAttribute(String name,int Scope);

    scpoe的值:

    PageContext.PAGE_SCOPE

    PageContext.REQUEST_SCOPE

    PageContext.SESSION_SCOPE

    PageContext.APPLICATION_SCOPE

    findAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找。

    <body>
    	<%
    		//pageContext.setAttribute("p", "pp");
    		pageContext.setAttribute("p", "pp", PageContext.PAGE_SCOPE);
    		
    		//pageContext.setAttribute("p", "pp", PageContext.REQUEST_SCOPE);
    		request.setAttribute("p", "request");
    		
    		//pageContext.setAttribute("p", "pp", PageContext.SESSION_SCOPE);
    		//session.setAttribute("p", "session");
    		
    		//pageContext.setAttribute("p", "pp", PageContext.APPLICATION_SCOPE);
    		application.setAttribute("p", "application");
    		
    		//request.getRequestDispatcher("/2.jsp").forward(request, response);
    		//response.sendRedirect(request.getContextPath()+"/2.jsp");
    		pageContext.forward("/2.jsp");
    	 %>
    </body>
    

      

    <body>
    	<%
    		/* String p = (String)pageContext.getAttribute("p");
    		out.print(p); */
    		//out.print(request.getAttribute("p"));
    	 %>
    	 
    	 <%--  <%=session.getAttribute("p") %>  --%>
    	
    	<%--  <%=application.getAttribute("p") %> --%>
    	
    	<%=pageContext.findAttribute("p") %>
    </body>

    四、四大域对象:实际开发

    PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。

    ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。

    HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。

    ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。

    五、EL表达式

    1、EL概述和基本语法

    EL表达式:expression language 表达式语言

    要简化jsp中java代码开发。

    它不是一种开发语言,是jsp中获取数据的一种规范

    2、EL的具体功能

    a、获取数据

    EL表达式只能获取存在4个作用域中的数据

    ${u} 原理: pageContext.findAttribute("u");

    url?name=tom ${param.name}

    EL获取对于null这样的数据,在页面中表现为空字符串

    ${u.name} == u.getName()方法

    点(.) 运算符相当于调了getter方法,点后页面跟的是属性名。

    属性导航

    []运算符:点能做的,它也能做; 它能做的,点不一定能做

    ${student.name}== ${student['name']} == ${student["name"]}

    b、运算

    empty

    判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true

    三元运算符

    c、隐式对象:11个

    EL隐式对象引用名称 类型 JSP内置对象名称 说明

    EL隐式对象引用名称

    类型

    JSP内置对象名称

    说明

    pageContext

    javax.servlet.jsp.PageContext

    pageContext

    一样的

    pageScope

    java.util.Map<String,Object>

    没有对应的

    pageContext范围中存放的数据,页面范围

    requestScope

    java.util.Map<String,Object>

    没有对应的

    请求范围数据

    sessionScope

    java.util.Map<String,Object>

    没有对应的

    会话范围数据

    applicationScope

    java.util.Map<String,Object>

    没有对应的

    应用范围数据

    param

    java.util.Map<String,String>

    没有对应的

    一个请求参数

    paramValues

    java.util.Map<String,String[]>

    没有对应的

    重名请求参数

    header

    java.util.Map<String,String>

    没有对应的

    一个请求消息头

    headerValues

    java.util.Map<String,String[]>

    没有对应的

    重名请求消息头

    initParam

    java.util.Map<String,String>

    没有对应的

    web.xml中全局参数

    cookie

    java.util.Map<String,Cookie>

    没有对应的

    key:cookie对象的name

    ${param.userName } 等价于${param.userName }==request.getParamemter("userName");
    ${paramValues.hobby[0] } 取数组的第一个
    ${header["User-agent"] }
    ${cookie.JSESSIONID.value }
    
    <form action="${pageContext.request.contextPath }/success.jsp" method="post">
    用户名:<input type="text" name="userName" /><br /> 密码:<input
    type="password" name="pwd" /><br /> <input type="submit" value="登录" /><br />
    </form>
    

    六、JSTL

    1、什么是JSTL

    JSTL(JavaServerPages Standard Tag Library)JSP标准标签库

    2、JSTL的作用

    使用JSTL实现JSP页面中逻辑处理。如判断、循环等。

    3、使用JSTL

    1)在JSP页面添加taglib指令

    2)使用JSTL标签

    4、常用标签介绍

    核心标签库:

    > 通用标签: set、 out、 remove

    > 条件标签:if choose

    > 迭带标签:foreach

  • 相关阅读:
    使用FormatterServices 类序列化或反序列化
    HaozesFx(飞信精灵)发布
    EF Provider for Access/ODBC 以及ADO.Net Entity Framework 与Linq to SQL的比较和适用场景:
    Fetion2008 分析 Part3:会话
    Gleaner(个人文档管理)
    This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.
    发一个收取Pop3邮件的代码
    码农架构技术周刊 | 第1期
    这样学Redis,才能技高一筹!
    CommunityServer2.1删除anonymous帐号后的解决办法
  • 原文地址:https://www.cnblogs.com/cnki/p/5935657.html
Copyright © 2011-2022 走看看