美文网首页
Web 基础15 JSP入门 指令及其部分属性

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

作者: 小熊先生很不开心 | 来源:发表于2018-03-31 08:43 被阅读9次

    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的异常处理机制

    • 分类设置
    <error-page>
        <exception-type>java.lang.ArithmeticException</exception-type>
        <location>/error.jsp</location>
    </error-page>
    
    • 统一设置
    <error-page>
        <error-code>500</error-code>
        <location>/error.jsp</location>
    </error-page>
    
    • 设置步骤
      • 在web.xml下增加一个error-page标签
      • 创建错误提示页面
        • 404-我们正在加紧建设中!
        • 500-服务器忙,请稍后再试!
    • 事例代码

    XML设置

    <error-page>
        <error-code>500</error-code>
        <location>/500.jsp</location>
      </error-page>
      
       <error-page>
        <error-code>400</error-code>
        <location>/400.jsp</location>
      </error-page>
    

    错误代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" isErrorPage="true"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>服务器内部出现异常,请联系管理员!</h1>
        <%
            //String message = exception.getMessage();
            //out.println(message);
        %>
    </body> 
    </html>
    
    

    跳转页面

    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>服务器忙,请稍后再试!</h1>
    </body>
    </html>
    

    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"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%@ include file="top.jsp" %>
        <hr />
        <%@ include file="body.jsp" %>
        <hr />
        <%@ include file="bottom.jsp" %>
    </body>
    </html>
    

    分页

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <h1>传智播客</h1>
    
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <h1>注册表单</h1>
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <h1>友情链接</h1>
    
    • 友情提示

      这样使用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 的动作标签

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

    • 常用的动作标签

      • <jsp:forward />:请求转发
      • <jsp:include />:页面包含(动态包含)
    • 区别

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

    相关文章

      网友评论

          本文标题:Web 基础15 JSP入门 指令及其部分属性

          本文链接:https://www.haomeiwen.com/subject/ixtgcftx.html