javaweb ----->JSP

JSP的原理和本质:

 

复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/9/16
  Time: 8:42
  To change this template use File | Settings | File Templates.

  JSP只能在服务器里面访问。。。。。。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP</title>
</head>
<style>
    #myDiv {
        width: 200px;
        height: 200px;
        margin: 20px auto;
        background-color: aqua;
    }
</style>
<script>
    window.onload=function () {
        var div = document.getElementById("myDiv");
        div.addEventListener("click",ev => {
            alert("JSP=JS+JAVA+HTML+CSS");
        })
    }
</script>
<body>

<div id="myDiv"></div>
<%
    System.out.println("JSP01------>我来了。。。");
%>

</body>
</html>
复制代码

 

 

 查看jsp被编译成java的java文件:他本质是不是servlet

 

复制代码
/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/9.0.37
 * Generated at: 2020-09-16 00:55:40 UTC
 * Note: The last modified time of this file was set to
 *       the last modified time of the source file after
 *       generation to assist with modification tracking.
 */
package org.apache.jsp.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class Jsp01_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private static final java.util.Set<java.lang.String> _jspx_imports_packages;

  private static final java.util.Set<java.lang.String> _jspx_imports_classes;

  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = null;
  }

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }

  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }

  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      final java.lang.String _jspx_method = request.getMethod();
      if ("OPTIONS".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        return;
      }
      if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
        return;
      }
    }

    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;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      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;

      out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("    <title>JSP</title>\r\n");
      out.write("</head>\r\n");
      out.write("<style>\r\n");
      out.write("    #myDiv {\r\n");
      out.write("        width: 200px;\r\n");
      out.write("        height: 200px;\r\n");
      out.write("        margin: 20px auto;\r\n");
      out.write("        background-color: aqua;\r\n");
      out.write("    }\r\n");
      out.write("</style>\r\n");
      out.write("<script>\r\n");
      out.write("    window.onload(()=>{\r\n");
      out.write("        alert(\"你好JSP:JS+HTML+CSS+JAVA\")\r\n");
      out.write("    })\r\n");
      out.write("</script>\r\n");
      out.write("<body>\r\n");
      out.write("\r\n");
      out.write("<div id=\"myDiv\"></div>\r\n");

    System.out.println("JSP01------>我来了。。。");

      out.write("\r\n");
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>\r\n");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}
复制代码

 

 

 

JSP中结构

  1. Html/CSS/JS

  2. 指令

  3. Java脚本

  4. EL表达式

  5. JSTL标签

8.2 指令

对于该页面的配置信息

写法<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ...%>

page指令

include指令

taglib指令

8.3 Java脚本

<% Java代码 %>书写普通的代码,位于Service方法中

<%! Java代码 %>用于在JSP转成的Servlet中定义成员结构,位于成员位置

<%= Java代码 %>用于打印输出,位于Service方法中,等价于out.print(a);

<%-- 注释的内容 --%>JSP特有的注释,被注释的内容不会发送到浏览器<!-- -->

8.4 动作标签

在JSP页面中可以执行的简单逻辑

语法 <jsp:标签名 属性名1=属性值1 属性名2=属性值2 ...>

forward:转发

<jsp:forward page="forward-b.jsp" />

param:参数

  • jsp:param中文乱码问题本质上是编码的问题
    解决方案:request.setCharacterEncoding("utf-8");

param标签通常和forward标签配合使用,在转发的同时携带参数

include:包含

作用:包含另一个jsp

共同点:include指令元素和include动作元素的作用都是实现包含文件代码的复用。在浏览器看来两者是一样的
区别:对包含文件的处理方式和处理时间不同。
静态包含:include指令元素是在翻译阶段就引入所包含的文件,被处理的文件在逻辑和语法上依赖于当前JSP页面,其优点是页面的执行速度快。
动态包含:include动作元素是在JSP页面运行时才引入包含文件所产生的应答文本,被包含的文件在逻辑和语法上独立于当前JSP页面,其优点是可以使用param子元素更加灵活地处理所需要的文件,缺点是执行速度要慢一些。

WEB-INF目录的特别:

  1. 该目录下面可以放依赖的jar包,web.xml配置文件

  2. 该目录下面也可以放其他资源文件html,jsp,css,js。

  3. 放在该目录下的所有资源,用户是访问不到的,除非转发。(tomcat服务器有漏洞)

 

内置对象

JSP中的内置对象概念:就是我们可以在Java脚本中直接使用的对象,在JSP中一共有九大内置对象

内置对象的原理:这些对象实际就是在service方法中的参数或者局部变量

 

 

 

pageContext/request/session/application这四个对象是域对象,可以维护数据,而且它们都有一组用于设置值setAttribute(),获取值getAttribute(),销毁值的方法removeAttribute()。区别在于范围不一样,维护数据的时效和地方不一样。

out/response这两个对象都有向浏览器输出内容的功能,JSP页面上的所有内容都是out对象负责输出。

在向页面进行最终输出的时候会先刷新response缓冲区,再刷新out缓冲区。

在开发中,统一用out对象进行输出

 

 

8.6 EL表达式

Expression Language

作用:简化在JSP页面中对Java脚本的书写,主要是简化取值操作

语法:${表达式}

EL运算符

  1. 算术运算

  2. 比较运算

  3. 逻辑运算

  4. empty运算符 对对象,集合,数组进行判断是否为空及长度是否为0

    • if(array != null && array.length > 0)

以后在开发中,建议用文字替代符号

EL取值

数组和List集合的取值方式${list[0]}

Map集合的取值方式${map["key"]}或者${map.key}

对象取值方式${对象名.属性}

  • 按照JavaBean的规范属性(Property)指的是对应的set/get方法去掉set/get后首字母小写的字符串

    • 注意与成员变量要区分

EL中的隐式对象

所谓的隐式对象与内置对象本质上是一回事,就是可以在EL中直接使用的对象。一共有11个

 

 

JSTL标签

Java Standard Tag Library Java标准标签库

作用:简化Java脚本的书写,主要对流程控制的简化,比如判断,循环

使用步骤:

  1. 导入jar包

  2. 在JSP页面中使用taglib指令导入标签库

  3. 在JSP页面中使用标签

 

posted on   白嫖老郭  阅读(86)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示