JSP学习日记

JSP简述

Java Sever Pages----->Java服务器界面 用于前后端结合

jsp为什么淘汰?

由于JSP的前后端耦合性极高,编写代码非常臃肿。前后端的代码放在一起,所以JSP可以看成是已经被淘汰的技术。

为什么还要学jsp?

由于一些公司的项目较老,更新换代成本较高,只能选择不断维护。而维护的同时就需要用到jsp老知识
JSP在编译后也是一个和Java文件,并且会生成class文件,可以打开Tome cat 指定路径查看:

D:\simon\tools\Tomcat\apache-tomcat-8.5.20\work\Catalina\localhost\ROOT\org\apache\jsp
在这里插入图片描述
由此可以得出:

JSP本质上就是一个Servlet

JSP生成Java文件剖析

下面是JSP文件编译后生成的Java文件

// 类声明定义
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {

可以看出 index_jsp继承了HttpJspBase类,继续向上找,发现HttpJspBase继承了JspPage,JspPage继承了Servlet

public interface HttpJspPage extends JspPage {
public interface JspPage extends Servlet {

所以说JSP就是一个Servlet

JSP语法

<!-- HTML注释 -->
<%-- JSP注释 --%>

JSP声明语句: <%!%>
特点:定义全局变量,可以声明方法、类、支持任意Java数据类型

<!-- JSP声明语句 -->
<%! 
    String str = "全局变量";
    static{
    System.out.println("静态代码块");
} %>

JSP表达式:<%=%>
特点:常用于输出内容、插入表达式

<input type="text" name="<%= 变量或表达式 %>" value="<%= 变量或表达式%>">

JSP脚本程序:<%%>
特点:定义局部变量、编写语句 不能定义方法 也可输出内容

<% for (int i = 0; i < 10; i++) { %>
<h1>HELLO WORLD <%= i %></h1>
<% } %>

注释:

<!-- HTML注释 -->
<%-- JSP代码注释 --%>
区别:在网页中查看源代码时:jsp注释不会显示,但HTML注释会显示

JSP指令

Page

  1. 定制错误页面
<%-- 头文件page 声明了页面类型  编码集  语言等 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 显示声明这个是一个错误界面 --%>
<%@ page isErrorPage="true" %> 
<%-- 错误页面也可以在web.xml中声明 如下: --%>
<!--  ERROR Page  -->
    <error-page>
        <error-code>404</error-code>
        <location>/error/404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/error/500.jsp</location>
    </error-page>
  1. 其他指令如:autoFlush:是否被刷新 import : 导包 …

include

<%-- 提取公共页面   例如网页的头部尾部导航栏 --%>
<%@ include file="./beInclude.jsp" %>
<!-- @include 属于是将另一个页面包含进来  所以一旦出现同名变量就会报错 -->
<!-- --------------- -->
<!-- 利用jsp标签 属于是将页面进行拼接 每个页面中的变量相互独立 -->
<%--  也可以用jsp标签提取公共页  --%>
  <jsp:include page="beInclude.jsp"/>

taglib

标签库 引入:

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

JSP的内置对象

在第一次访问jsp网页时,会由服务器将该jsp文件转换为Java文件并生成字节码文件,在生成的Java文件中会包含经常使用的一些内置对象

// 如下所示
final javax.servlet.jsp.PageContext pageContext; // 上下文
final javax.servlet.ServletContext application;// 存储数据
final javax.servlet.ServletConfig config; // 配置信息
javax.servlet.jsp.JspWriter out = null;  // 输出
final java.lang.Object page = this;   // 当前页面
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
// 除此之外 还包含了
HttpRequest req  // 请求
HttpResponse resp  // 响应
Execption // 异常错误

九大内置对象

  1. PageContext // 可以访问所有的jsp内置对象
// 常用
pageContetx.getRequest()//返回当前页面中的request对象。
pageContetx.getResponse()//使用此方法将返回当前页面中的response对象。
pageContetx.getPage()//此方法返回当前页面中的page对象。
pageContetx.getSession()//返回当前页面中的session对象。
pageContetx.getOut()//返回当前页面中的out对象。
pageContetx.setAttribute(String name)//给指定的属性名设置属性值。
pageContetx.getAttribute(String name)//根据属性名称找到相应的属性值。
pageContetx.findAttribute(String name)//寻找一个属性并返回,如果没有找到则返回一个null。
  1. Request // 请求
request.setAttribute(String name,Object value) //储存此请求中的属性
request.getAttribute(String name) //返回指定属性的属性值
request.getParameter(String name) //返回name指定参数的参数值
request.getParameterValues(String name) //返回包含参数name的所有值的数组
  1. Response
response.getCharacterEncoding() //返回响应用的是何种字符编码
response.getWriter() //返回可以向客户端输出字符的一个对象
response.sendRedirect(java.lang.String location) //重新定向客户端的请求
  1. Session
session.getId()//返回session的ID号
session. setAttribute(String name,Object value)//将value值存在session域中,名字为name
session.getAttribute(String name)//返回与此会话中的指定名称绑定在一起的值,如果没有值绑定在该名称下,则返回null
session.invalidate()//销毁session
  1. out
  2. aplication
application.setAttribute(key,value)//设置应用对象中指定名字的属性值
application.getAttribute(key)//获取应用对象中指定名字的属性值
application.getAttributeNames()//获取应用对象中所有属性的名字 枚举
  1. config
  2. Page
  3. execption

pageContext.setAttribute的作用域

// 只在一个网页中有效
pageContext.setAttribute("name1","张一");
// 只在一个请求中有效  请求转发时将会携带
request.setAttribute("name2","张二");
// 在一次会话中均可读取  打开浏览器到关闭浏览器
session.setAttribute("name3","张三");
// 在服务器中有效  从打开服务器到关闭服务器
application.setAttribute("name4","张四");

使用场景:

  1. request: 客户端向服务端请求的数据,用过之后即销毁。再次请求需要重新加载----> 新闻
  2. Session : 用户向服务器请求得到的数据需要保存,后续还会使用 购物车
  3. application: 用户向服务器发送请求,使用该数据,使用完毕后还可以给其他用户使用

JSP标签

  1. <jsp:forward page="beInclude.jsp">
        <jsp:param name="name" value="张三"/>
        <jsp:param name="age" value="18"/>
      </jsp:forward>
    <%-- 在另一jsp中获取 --%>
    姓名:<%= request.getParameter("name")%>
    年龄:<%= request.getParameter("age")%>
    // 注意处理编码问题
    

EL表达式

全称 Express Language

  • 获取数据
    按照域对象从小到大进行获取,依次是:
    pageContext < request < Session < application

  • 执行运算

  • 获取Web

<%
    pageContext.setAttribute("name","张三");
    request.setAttribute("name","张四");
    session.setAttribute("name","张五");
    application.setAttribute("name","张六");
    List<String> list = new ArrayList<>();
    list.add(0,"张三");
    list.add(1,"张四");
    list.add(2,"张五");
    list.add(3,"张六");
    list.add(4,"张七");
    request.setAttribute("list",list);
%>
<pre>
  获取pageContext作用域中的name: ${pageScope.name}
  获取request作用域中的name: ${requestScope.name}
  获取session作用域中的name: ${sessionScope.name}
  获取application作用域中的name: ${applicationScope.name}
    获取集合指定索引的数据:${list[0]} ${list[4]}
<%--  张三 和  张七  --%>
    获取集合长度:${list.size()}
</pre>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿仔牛奶_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值