欢迎访问我的blogThe Blog of Dxhua

JSP

  1. JSP简介
    JSP全名Java Server Page,是为了简化Servlet的工作而出现的替代品
    在JSP中HTML和java代码共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容
  2. JSP产生的原因
    Servlet中也可以完成HTML的输出,但是当网页过于复杂,Servlet的使用和部署就比较困难,为了克服这些困难,1999年SUN公司推出了JSP技术,该技术在生成HTML代码的时候相对
    Servlet简单的多了
  3. 关于Servlet和JSP的理解(区别)
    Servlet:在java代码中嵌入HTML代码,更擅长编写java业务代码
    JSP:在HTML中嵌入java代码,更擅长页面展示
  4. JSP运行原理
    jsp在第一次访问时会被web容器编译成Servlet,即jsp本质上是Servlet
    过程:
    第一次访问-------->HelloServlet.jsp----------->HelloServlet_jsp.java---->编译运行
    被编译后的Servlet在TomCat的work文件下可以找到,使用IDEA会单独为项目维护一个项目
    jsp会转换成java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init,service,destroy,并且将html代码通过java方式输出给浏览器
  5. JSP的脚本和注释
    JSP的脚本(三种脚本的区别)
    (1)<%java代码%> -------内部java代码被翻译到service方法的内部
    (2)<%=java变量或表达式> ------会被翻译成service方法内部out.print(),并打印给浏览器
    (3)<%!java代码%> --------会被翻译成servlet的成员内容
    JSP的注释(三种注释的区别)
    (1)Html注释: -----可见范围jsp源码,翻译后的servlet中,页面显示html源码
    (2)java注释://单行注释;/多行注释/ -------可见范围jsp源码,翻译后的servlet
    (3) jsp注释:<%–注释内容–%> -------可见范围jsp源码
  6. JSP指令
    (1)page命令:属性最多的一个命令,根据不同的属性,指导整个页面的特性
    格式:<%@ page 属性名1=“属性名值1” 属性名2=“属性名值2”%>
    常用属性:
    language:jsp脚本中可以嵌入的语言类型
    ContentType:response.setContentType(“text/html;charset=utf-8”)
    session:是否在jsp创建的时候自动创建session
    import:导入的java包
    errorPage:当发生错误后跳转到哪个界面
    isErrorPage:是否将jsp设置为错误页面,为true时,可以接受当前错误
    buffer:设置out的缓存空间,默认为8kb
    (2)include指令
    页面包含(静态界面)指令,可以将一个jsp页面包含到另个jsp界面中
    格式:<%@ include file = “被包含的文件地址”%>
    (3) taglib指令
    在jsp页面中引入标签库(jst1标签库,struts2标签库)
    格式<%@ taglib url="标签库地址 prefix=“前缀”%>
  7. JSP隐式对象概述
    当jsp被翻译成servlet的时候,service方法内部有个对象定义并初始,这九个对象被称为隐式对象

   final javax.servlet.jsp.PageContext pageContext;
   javax.servlet.http.HttpSession session = null;
   final javax.servlet.ServletContext application;
   final javax.servlet.ServletConfig config;
   javax.servlet.jsp.JspWriter out = null;
   final java.lang.Object page = this;
   //加上request对象和response对象
   //exception对象,表示JSP页面发生的异常,在错误页中才起作用  

在<%java代码%>能使用的对象就是隐式对象

  • 详解JSP中九大隐式对象
    JSP中九大隐式对象
    exception对象
    (1)out对象
    在JSP中有四种输出方式
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
111111111
<%
    response.getWriter().write("2222222");
    out.write("3333333");
%>
<%="44444444444"
%>

</body>
</html>

这个的输出顺序为22222,1111111,3333333,44444444,因为为了减小服务器的压力,response有一个缓存区,out也有一个缓存区,通过response.getWrite().write()方法
输出的会直接存在response缓存区中,其他三种方式会先存在out的缓存区中,在存入response的缓存区,所以输出顺序就是这样的,通过buffer属性将out的缓存空间设置为0,顺序就会跟代码一样
(2)pageContext
pageContext对象就是JSP页面的上下文
pageContext对象是一个域对象

  • setAttribute(String name,Object obj);
  • removeAttribute(String name)
    pageContext可以向指定的其他域中存储数据
  • setAttribute(String name,Object obj,int scope)scope是设置pageContext对象的作用域范围,默认是只在当前JSP页面
  • getAttribute(String name,int scope)
  • removeAttribue(String name,int scope)
  • findAttribute(String name)//获取顺序一次从pageContext域,request域,session域,application域
    pageContext可以获取其他八大隐式对象
    pageContext.getRequest();pageContext.getApplication()等。
    (3)四大作用域的区别
    page域:当前jsp页面范围
    request域:一次请求
    session域:一次会话
    application域:整个web项目
  1. JSP标签
    JSP标签用来控制JSP的行为,执行一些常用的JSP页面动作,通过标签可以实现很多行java代码才能实现的功能,比如请求转发功能
  • 页面包含(动态包含) :<jsp:include page=“被包含的对象”/>
  • 请求转发:<jsp:forward page=“要转发的资源”/>
    静态包含和动态包含的区别
    静态包含和动态包含的区别

JSTL标签库

EL全名Expression language,它提供了在JSP中简化表达式的方法,让JSP的代码更加简化,可以嵌入到JSP页面内部,减少JSP脚本的编写

  1. EL表达式获取域中数据
    jsp脚本:<%=request.getAttribute(name)%>
    EL表达式替换上面的脚本: r e q u e s t S c o p e . n a m e E L 最 主 要 的 作 用 是 获 取 四 大 域 中 的 数 据 , 格 式 {requestScope.name} EL最主要的作用是获取四大域中的数据,格式 requestScope.nameEL{EL表达式}
    EL获得pageContext域中的值: p a g e C o n t e x t . k e y E L 获 得 r e q u e s t 域 中 的 值 : {pageContext.key} EL获得request域中的值: pageContext.keyELrequest{request.key}
    EL获得session域中的值: s e s s i o n . k e y E L 获 得 a p p l i c a t i o n 域 中 的 值 : {session.key} EL获得application域中的值: session.keyELapplication{application.key}
  • EL从四个域中获取某个值${key},—同样是从pageContext域,request域,session域,application域中依次获取属性,在某个域中获取到后将不再获取
  1. EL的内置对象
    (1)pageScope,requestScope,sessionScope,applicationScope--------获取JSP中的域中数值
    (2)param,paramValues-------接收参数,相当于request.getParameter(),request.getParameterValue()
    (3)header,headerValues------获取请求头信息,相当于requset.getHeader(name)
    (4)initParam-------获取全局初始化参数,相当于this.getServletContext().getInitParameter(name)
    (5)cookie----WEB开发中cookie,相当于request.getCookies()–>cookie.getName()–>cookie.getValue()
    (6)pageContext-----web开发中的pageContext,pageContext获得其他八大对象
  2. EL的执行表达式
    在EL中可以执行java中的代码如 1 = 1 ; {1=1}; 1=1;{1>2}
    有一个判断对象是否为空${empty 对象名}为空返回true,不为空返回false
  3. JSTL的简介和基本配置
    JSTL标准标签库,可以嵌入到jsp页面中使用标签的形式完成业务逻辑等功能,JSTL出现的目的同EL一样也是要替代jsp页面中的脚本代码,JSTL标准标签库有5个字库。但随着发展,目前常使用的是它的核心库
    JSTL的五个标签库
    JSTL的五个标签库
    配置
    先下载JSTL标签库下载地址!(http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/)
    下载地址
    步骤二
    http://java.sun.com/jsp/jstl/core

步骤三
5. JSTL-if标签

<%--使用JSTL标签需要配合EL表达式使用--%>
<c:if test="${1+1==2}">
    <%--如果test为true执行内部的代码,如果为false就不执行  --%>
    表达式成立。执行内部语句
</c:if>
  1. JSTL-foreach标签
<%
    List<User> list=new ArrayList<>();
    User user1=new User();
    user1.setName("小强");
    user1.setSex("男");
    User user2=new User();
    user2.setName("小丽");
    user2.setSex("女");

    list.add(user1);
    list.add(user2);
    request.setAttribute("list",list);
    //java代码实现for循环
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i).getName());
    }
    for (User user : list) {
        System.out.println(user.getName());
    }
%>

<%--JSTL标签实现for循环--%>
<c:forEach begin="0" end="${list.size()-1}" var="i">
    ${list[i].name}
</c:forEach>
<c:forEach items="${list}" var="uesr">
    ${uesr.name}
</c:forEach>
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐