JSP学习日记
创始人
2024-02-18 02:42:30

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语法


<%-- JSP注释 --%>

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


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

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

" value="<%= 变量或表达式%>">

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

<% for (int i = 0; i < 10; i++) { %>

HELLO WORLD <%= i %>

<% } %>

注释:


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

JSP指令

Page

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

include

<%-- 提取公共页面   例如网页的头部尾部导航栏 --%>
<%@ include file="./beInclude.jsp" %>



<%--  也可以用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中获取 --%>
    姓名:<%= 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 list = new ArrayList<>();list.add(0,"张三");list.add(1,"张四");list.add(2,"张五");list.add(3,"张六");list.add(4,"张七");request.setAttribute("list",list);
%>
获取pageContext作用域中的name: ${pageScope.name}获取request作用域中的name: ${requestScope.name}获取session作用域中的name: ${sessionScope.name}获取application作用域中的name: ${applicationScope.name}获取集合指定索引的数据:${list[0]} ${list[4]}
<%--  张三 和  张七  --%>获取集合长度:${list.size()}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...