JSP原理以及基本语法

这篇具有很好参考价值的文章主要介绍了JSP原理以及基本语法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、JSP原理

什么是JSP?

Java Server Pages:Java服务器页面,和Servlet一样是动态Web技术!

和HTML的区别?

  • HTML是静态页面。
  • 在JSP页面中可以嵌入Java代码,为用户提供动态的数据。

JSP 和 Servlet 的关系?

  • JSP最终会被转换为一个Java类,JSP的本质就是一个Servlet!
  • 我的在访问 index_jsp 时,会自动生成一个Java 类 index_jsp,它继承了 HttpJspBase,HttpJspBase 又继承了 HttpServlet。
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements  org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports{
//...
}

1、内置对象

    final javax.servlet.jsp.PageContext pageContext;    //页面上下文对象
    javax.servlet.http.HttpSession session = null;    //session
    final javax.servlet.ServletContext application;    //applicationContext
    final javax.servlet.ServletConfig config;    //servletConfig
    javax.servlet.jsp.JspWriter out = null;    //out
    final java.lang.Object page = this;    //page
    HttpServletRequest    request        //请求
    HttpServletResponse    response        //响应

 2、输出页面前增加的代码

      response.setContentType("text/html;charset=utf-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

3、输出到页面

显示一个hello world和静态页面。

      out.write("  \r\n");
      out.write("  <HTML>\r\n");
      out.write("<body>\r\n");
      out.write("<h1>hello world</h1>\r\n");
      out.write("</body>\r\n");
      out.write("</HTML>\r\n");
      out.write("\r\n");

4、JSP页面内直接调用上面的对象

通过 ${}来调用

5、JSP实现过程

index.jsp-> index_jsp.java -> index_jsp.class`-> Servlet程序

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>首页</title>
</head>
<body>

<%
    String name = "李元芳";
%>

hello <%=name%>
</body>
</html>

运行结果:

JSP原理以及基本语法

 2、JSP 基础语法

1、JSP表达式

用来将程序的输出结果输出到客户端

<%--在客户端页面中显示当前时间--%>
<%= new java.util.Date()%>

2、JSP脚本片段

输出1到100的和,JSP脚本片段中的变量都是唯一的,因为它最终会变成一个Servlet类,因此不同代码片段中可以互相访问变量。

<%
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    out.println("<h1>Sum = "+ sum + "</h1>");
%>

3、全局变量的定义

相当于我们Java类下面的全局变量和方法的声明。

<%!
    private String word = "hello";
    public static void sayHi(String name){
        System.out.println("hello " + name);
    }
%>

4、JSP指令

1、jsp 设置错误页面

语法:<%@ page  %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page errorPage="error/500.jsp" %>

<html>
<head>
</head>
<body>
<%--    制造一个500的错误--%>
<%
    int x = 100/0;
%>
</body>
</html>

 因为我们的服务器代码中有错误,所以会报一个500的错误,我们设置如果当前页面报错就跳转到 500.jsp 中。

2、在 web.xml 中指定错误页面
    <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>

3、公共页面

两种实现方式:
  • <%@ include file="common/header.jsp"%>
  • <jsp:include page="common/header.jsp"/>

        更推荐使用 下面的,因为下面的本质还是三个网页,但上面的本质是将标签合并成一个网页,所以合并后很容易造成变量冲突。

 像这种不管哪个页面上面都是这种公共的头部,我们可以设置公共网页嵌入jsp页面当中。JSP原理以及基本语法

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

<html>
<head>
    <title>Title</title>
</head>
<body>
    <%-- 原理:将三个页面合并为一个,提取标签 --%>
    <%@ include file="common/header.jsp"%>
    <%-- 效果和上面一样,不过这个的本质还是三个网页 --%>
    <jsp:include page="common/header.jsp"/>
    <hr>
    这里是网页主体
    <hr>

    <%@ include file="common/footer.jsp"%>
</body>
</html>

JSP原理以及基本语法

3、JSP9大内置对象(重点!!!)

  • PageContext        存东西
  • Request        存东西
  • Response
  • Session     存东西
  • Application【ServletContext】存东西
  • config【ServletConfig】
  • out   【JSPWriter】
  • page

测试

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%--内置对象--%>

<%
    pageContext.setAttribute("name1","鲁班一号");
    request.setAttribute("name2","鲁班二号");
    session.setAttribute("name3","鲁班三号");
    application.setAttribute("name4","鲁班四号");
%>

<%--Java脚本片段需要使用Java语法的注释 因为它会原封不动低生成到 .JSP.java--%>
<%
    //通过pageContext取出节点的值
    Object name1 = pageContext.findAttribute("name1");  //保存的数据只在一个页面中有效
    Object name2 = pageContext.findAttribute("name2");  //保存的数据值在一次请求中有效,请求转发时会携带这个数据
    Object name3 = pageContext.findAttribute("name3");  //保存的数据值在一次会话中有效,从打开浏览器到关闭浏览器
    Object name4 = pageContext.findAttribute("name4");  保存的数据值在服务器中有效,从打开服务器到关闭服务器
    Object name5 = pageContext.findAttribute("name5");//不存在

%>

<h1>取出的Attribute节点的值</h1>
<%--使用el表达式输出--%>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>

<%--如果不存在会返回 null 但使用el表达式会自动过滤掉它--%>
<%=name5%>

</body>
</html>

使用el表达式

运行结果:

JSP原理以及基本语法

直接使用 <%=%>显示变量

运行结果:

JSP原理以及基本语法

 在另一个新页面中访问新页面的节点Attribute的值

<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //通过pageContext取出PageContextDemo01.jsp 中节点的值
    Object name1 = pageContext.findAttribute("name1");  //保存的数据只在一个页面中有效
    Object name2 = pageContext.findAttribute("name2");  //保存的数据值在一次请求中有效,请求转发时会携带这个数据
    Object name3 = pageContext.findAttribute("name3");  //保存的数据值在一次会话中有效,从打开浏览器到关闭浏览器
    Object name4 = pageContext.findAttribute("name4");  保存的数据值在服务器中有效,从打开服务器到关闭服务器
    Object name5 = pageContext.findAttribute("name5");//不存在

%>
<h1>取出PageContextDemo01.jsp 的Attribute节点的值</h1>
<%--使用el表达式输出--%>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>

</body>
</html>

运行结果: 

JSP原理以及基本语法

pageContext.setAttribute(String s,Object o,int scope)

 上面我们是通过不同的内置对象来实现不同的数据的作用域,在JSP中,其实还有一种只需要通过PageContext对象就可以设置多种作用域的方法。

//scope: 作用域
public void setAttribute(String name, Object attribute, int scope) {
        switch(scope) {
        case 1:
            this.mPage.put(name, attribute);
            break;
        case 2:
            this.mRequest.put(name, attribute);
            break;
        case 3:
            this.mSession.put(name, attribute);
            break;
        case 4:
            this.mApp.put(name, attribute);
            break;
        default:
            throw new IllegalArgumentException("Bad scope " + scope);
        }

    }

其中第三个参数代表创建 Attribute节点的同时,指定数据的作用域,1 代表当前页面,2 代表请求时生效,3 代表一次会话中有效,4 代表服务器中有效 。

public abstract class PageContext extends JspContext {
    public static final int PAGE_SCOPE = 1;
    public static final int REQUEST_SCOPE = 2;
    public static final int SESSION_SCOPE = 3;
    public static final int APPLICATION_SCOPE = 4;

//...
}

在 JSP 中获取数据,并指定作用域等级。

<%
    pageContext.setAttribute("name3","kk",PageContext.PAGE_SCOPE);
%>

总结

作用域等级:pageContext--->request--->session--->application。

pageContext 实现请求转发

<%

    //转发
    pageContext.forward("/index.jsp");
    //等同于
    request.getRequestDispatcher("/index.jsp").forward(request,response);

%>

使用场景

pageContext、request、session和application都可以实现存储数据到Attribute节点,但是适用场景有所不同:文章来源地址https://www.toymoban.com/news/detail-514687.html

  • pageContext 保存的数据只在当前页面生效,所以很少使用。
  • request 保存的数据值在一次请求中有效,请求转发时会携带这个数据。适用于用户请求完就没用的数据,比如新闻。
  • session 保存的数据值在一次会话中有效,从打开浏览器到关闭浏览器。用户用完一会还有用,比如购物车。
  • application 保存的数据值在服务器中有效,从打开服务器到关闭服务器。一个用户用完了,其它用户还可能用,比如网页聊天数据。

到了这里,关于JSP原理以及基本语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue 3 的概述以及 ES 6 基本语法的介绍

    本章首先介绍前端架构模式,然后在此基础上介绍 Vue 及其安装方式,接着介绍 Vue 3的新特性,最后介绍 ECMAScript6 (简称ES 6)的语法。 在学习 Vue.js之前,我们先来了解一下 MVVM (Model-View-ViewModel, 模型-视图-视图模型)模式,它是一种基于前端开发的架构模式。MVVM 最早出现于

    2024年03月22日
    浏览(32)
  • Python学了基本语法 下一步该干什么 ?

    刚入门Python,学习了基本语法后,你可以开始编写简单的程序了。接下来,你可以学习Python的标准库和第三方库,掌握更多的编程技巧和知识,提高自己的编程能力。同时,也可以通过实践项目来巩固所学知识,提高自己的实战能力。 学习Python基本语法是入门的第一步,接下

    2024年02月09日
    浏览(30)
  • MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

    目录 介绍 特点 基本语法 创建 调用 查看 删除  示例  存储过程是 事先经过编译 并 存储在数据库 中的一段 SQL 语句的 集合 ,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想

    2024年02月06日
    浏览(46)
  • CompletionService的基本使用以及原理

    CompletionService是Java并发编程中的一个工具类,它实现了一个任务完成的队列,并且可以按照任务完成的顺序来获取任务的结果。 CompletionService的主要作用是提供一种方式来处理一批并发执行的任务,并且在它们完成后按照完成的顺序获取结果。它通常与ExecutorService一起使用。

    2024年02月15日
    浏览(19)
  • kafka环境搭建以及基本原理

    kafka最先是作为日志数据采集,后用于消息传递,kafka能承担tb级别数据存储,确保服务的可用性,允许少量数据的丢失 作为消息中间件就有异步、解耦、削峰三个作用 单机ip:192.168.64.133 下载地址:Apache Kafka 选择kafka_2.13-3.4.0.tgz进行下载 关于kafka的版本,前面的2.13是开发

    2024年02月07日
    浏览(33)
  • 爬虫基本原理介绍、实现以及问题解决

    1. 前言 爬虫作为网络数据采集的重要工具,在当今互联网时代具有不可替代的作用。通过爬虫,我们可以获取到丰富的网络数据,用于各种用途,包括数据分析、业务决策、舆情监测等。 2. 爬虫能做什么 爬虫可以用于获取互联网上的各种数据,无论是文字、图片、视频还是

    2024年04月14日
    浏览(26)
  • Kafka快速实战以及基本原理详解

    ​ ChatGPT对于Apache Kafka的介绍: Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐量的数据流,并将数据实时地分发到多个消费者

    2024年02月07日
    浏览(30)
  • SQL Server的页面(pages )和盘区(extents)体系结构

    页面是 SQL Server 中数据存储的基本单元。范围是八个物理上连续页面的集合。盘区有助于有效地管理页面。了解页面和盘区的体系结构对于设计和开发高效执行的数据库非常重要。 SQL Server 中数据存储的基本单位是页面。分配给数据库中数据文件(.mdf 或 .ndf)的磁盘空间在逻

    2023年04月09日
    浏览(25)
  • RocketMQ基础API使用以及基本原理探究

    等待消息返回后再继续进行下面的操作 适合可靠性要求较高,数据量小,实时响应 消费者: 生产者: 其中消费者的输出为: 前面都是0说明这种推模式broker是分两次推送的 不等待消息返回直接进入后续的流程 消费者: 生产者: 如果没有countDownLatch.await(),会出现下面的情

    2024年02月09日
    浏览(32)
  • CycleGAN的基本原理以及Pytorch框架实现

    目录 1.了解CycleGAN (1)什么是CycleGAN  (2)CycleGAN的应用场景   2 CycleGAN原理 (1)整个模型 (2)优化目标  (3)训练生成器和判别器 (1)训练生成器 (2)训练判别器 3.CycleGAN的网络结构  (1)生成器模型 (2)判别器模型 4.CycleGAN代码实现  5.mainWindow窗口显示转换之后风

    2024年02月07日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包