Web 基础15 JSP入门 指令及其部分属性

1.1 指令的概述

  • 指令概念

    • 指令并不会直接产生任何可见的输出,作用是告诉WEB服务器如何处理JSP页面的其他部分。
  • 指令的分类

    • page
    • include
    • taglib
  • 基本格式

<%@ 指令名称 属性="值" %>分类
<%@ page contentType="text/html;charset=UTF-8" %>

  如果一个指令有多个属性,可以把多个属性写在同一个指令中,也可以把多个属性分开来写

<%@ page contentType="text/html;charset=UTF-8" import="java.util.Date" %>
                
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %> 

1.2 page指令的属性

  • page

    • 用于定义JSP页面的各种属性,无论定义在JSP页面的哪个位置,所影响的都是整个JSP页面,
    • 建议:将page指令定义在JSP页面的起始位置
  • 属性:

    • contentType:设置响应的类型和编码
    • pageEncoding:设置JSP页面的编码,也设置JSP页面翻译成Servlet源文件的编码
    • import:导入JSP页面所需要使用的Java类
      • 默认已经导入的类
        • java.lang.*;
        • javax.servlet.*;
        • javax.servlet.jsp.*;
        • javax.servlet.http.*;
  • Tip:导包 Alt + / 用 ctrl + shift + O 没有用的

1.3 page指令的其他属性

  • session:设置是否自动创建内置对象session,默认值是true

  • buffer:设置内置对象out的缓冲区大小,默认值是8k

  • autoFlush:设置内置对象out是否会自动刷新,默认值是true

  • extends:设置JSP翻译后的Servlet要继承哪个类,默认值是HttpJspBase

  • language:设置脚本语言,只有一个值就是java,java也是默认值

  • isThreadSafe:设置JSP是否是多线程,默认值是true SingleThreadModel

  • 注意

  一个软件的默认值的设置,考经验得来的
刚开始,靠项目经理的经验设置
之后,通过压力测试,试运行,通过真实的用户数据 分析之后再做出优化 才去调整
贸然去改 会对系统造成很大的影响

  • 为什么缓冲区是8K

    • 页面输出4-5k
    • 缓冲区设置成64K 占用的内存多,浪费资源
    • 缓冲区设置成1k 一次缓冲不够存,就会频繁的刷新,效率比较低
  • 注意:
    默认是多线程 也就是jsp可以同时被多个客户端访问

1.4 JSP的异常处理机制

  • 分类设置

    java.lang.ArithmeticException
    /error.jsp

  • 统一设置

    500
    /error.jsp

  • 设置步骤
    • 在web.xml下增加一个error-page标签
    • 创建错误提示页面
      • 404-我们正在加紧建设中!
      • 500-服务器忙,请稍后再试!
  • 事例代码

XML设置


    500
    /500.jsp
  
  
   
    400
    /400.jsp
  

错误代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>




Insert title here


    

服务器内部出现异常,请联系管理员!

<% //String message = exception.getMessage(); //out.println(message); %>

跳转页面


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


    

服务器忙,请稍后再试!

1.5 include指令&taglib指令

  • include (静态包含指令)
    • 用于在JSP页面中包含其他的WEB资源,把多个WEB资源一起翻译到了一个Servlet中
    • 属性:
      • file:设置要包含的WEB资源的路径
  • taglib
    • 引入标签库
    • 属性:
      • uri:设置引入标签库的路径
      • prefix:设置引入标签库的别名
  • include 代码实例

主页

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


    <%@ include file="top.jsp" %>
    
<%@ include file="body.jsp" %>
<%@ include file="bottom.jsp" %>

分页

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

传智播客

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

注册表单

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

友情链接

  • 友情提示

  这样使用include 被包含的网页是不需要body ,head等标签的,为什么呢。大家看完翻译后的文件可以知道了,如过被包含的文件依旧有body等都会被并接进翻译的文件中,实际上我们只需要一个body就可以了。

1.6 JSP的九大内置对象

  • HttpServletRequest request 请求对象
  • HttpServletResponse response 响应对象
  • JspWriter out 输出流对象
  • HttpSession session 会话对象
  • Throwable exception 异常对象
  • ServletContext application 代表了整个WEB应用
  • ServletConfig config 配置参数,用于获取Servlet的配置参数
  • Object page Servlet的对象,方法中的this对象
  • PageContext pageContext JSP页面的上下文对象

这些内置对象都可以直接使用提高开发效率

1.7 PageContext的概述和测试

  • PageContext是JSP技术中最重要的一个对象,他代表了JSP页面的运行环境,

  • PageContext封装了其他八个内置对象,

  • PageContext也是一个域对象,可以用来保存数据,范围是当前页面,

  • PageContext提供了一些WEB开发的常用功能,比如转发和包含,还可以操作检索其他域对象中的数据。

  • 注意:
    一定要放对位置,把对象放到session里面 在 Context里面是找不到的

  • pageContext.findAttribute("username");会在4个域对象当中查找数据,顺序pageContext,request,session,application

  • pageContext 页面上下文 他其实就是相当于大管家
    他包含所有的对象,但是他自己功能很弱

    • 获取其他八个对象(用的很少,但是重要)
    • 作为域对象存储数据(鸡肋)
      • setAttribute(key,value);
      • getAttribute();
      • removeAttribute();
<%
        //获取其他八个内置对象
        //pageContext.getRequest();
        //pageContext.getResponse();
        //pageContext.getSession();
        
        //保存数据
        
        //设置数据
        //pageContext.setAttribute("username", "zhangsan");
        //删除数据
        //pageContext.removeAttribute("username");
        //获取数据
        //Object obj = pageContext.getAttribute("username");
        //out.println(obj);
        
        //转发
        //pageContext.forward("/error.jsp");
        //包含
        //pageContext.forward("/error.jsp");
        
        //操作其他域对象中的数据
        pageContext.setAttribute("username", "lisi", PageContext.SESSION_SCOPE);
        //Object sessionObj = pageContext.getAttribute("username", PageContext.SESSION_SCOPE);
        //分别在4个域对象当中查找数据,顺序pageContext,request,session,application
        Object sessionObj = pageContext.findAttribute("username");
        out.println(sessionObj);
    %>

  • 进行转发和包含(用的不多)
  • 获取所有的4个域对象的数据(重要)
    • setAttribute(key,value,int scope);
    • getAttribute(key,int scope);
    • removeAttribute(key,int scope);
    • findAttribute(key )
    • 依次 pageContext,request,session,application查找

1.8 JSP的四大域对象

域对象 作用域
pageContext 当前页面
request 当前请求
session 整个会话
application 整个应用
<%
        //pageContext   当前页面
        //pageContext.setAttribute("username", "zhangsan");
        //out.println(pageContext.getAttribute("username"));
        
        //request       当前请求
        //request.setAttribute("username", "zhangsan");
        //out.println(request.getAttribute("username"));
        //pageContext.forward("/scope/scope02.jsp");
        
        //session       整个会话
        //session.setAttribute("username", "zhangsan");
        //out.println(session.getAttribute("username"));
        
        //application   整个应用
        application.setAttribute("username", "zhangsan");
        out.println(application.getAttribute("username"));
    %>

1.8 的动作标签

  • 作用: 简化<% %>的写法

  • 常用的动作标签

    • :请求转发
    • :页面包含(动态包含)
  • 区别

    • 动态包含是两个文件先编译执行,然后把执行结果包含在一起
    • 静态包含是先将2个文件合并成为一个java文件,然后在编译,执行
    • 动态包含只能包含jsp文件,静态包含可以包含任何文件(html,txt)
静态包含和动态包含.png

你可能感兴趣的:(Web 基础15 JSP入门 指令及其部分属性)