欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSP

程序员文章站 2022-06-01 21:10:35
...

JSP

1、简介

  • JSPJava Server Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。

  • JSPJava代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。

  • JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

2、JSP在运行时转换的Servlet类

  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
  • index_jsp.java
  • 我的电脑此文件的路径:C:\Users\73256\.IntelliJIdea2018.2\system\tomcat\Unnamed_javaweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp
package org.apache.jsp;

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

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

  /*---------------------------------此处部分代码省略-----------------------------------*/
  //初始化
  public void _jspInit() {
  }
  //销毁
  public void _jspDestroy() {
  }
  //JSPService
  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;//session
    final javax.servlet.ServletContext application;//applicationContext
    final javax.servlet.ServletConfig config;//config
    javax.servlet.jsp.JspWriter out = null;//out
    final java.lang.Object page = this;//page:当前页面
    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;
        
	  //HTML代码,会被转换为下面的形式。
      out.write("\n");
      out.write("<html>\n");
      out.write("<body>\n");
      out.write("<h2>Hello World!</h2>\n");
      //Java代码原封不动的转换
      System.out.println("Hello World!");
      out.write("</body>\n");
      out.write("</html>\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);
    }
  }
}
  • 9大内置对象可在JSP脚本中直接调用
    • pageContext:可以取得任何范围的参数,保存的数据只在一个页面中有效
    • request:客户端的请求,作用域为一次请求
    • response: 响应
    • session:存数据,保存的数据只在一次会话中有效,即从打开到关闭浏览器
    • application:保存的数据在服务器中有效,从打开到关闭服务器
    • config:主要作用是取得服务器的配置信息
    • out :用于在Web浏览器内输出信息
    • page :代表JSP本身
    • exception:显示异常信息

3、JSP基础语法

3.1、JSP表达式

  • 作用:用来将程序的结果,输出到客户端
  • **格式:<%= 变量或者表达式%>**
  <%= "你好!"%>

3.2、JSP脚本片段

  • 作用:写Java代码

  • 格式:<% Java代码%>

<%
    int sum = 0;
    for (int i = 0; i <=100 ; i++) {
      sum+=i;
    }
    //将sum打印到页面
    out.println("<h1>Sum="+sum+"</h1>");
%>
  • 脚本片段之间也可嵌入HTML元素
<%
    for (int i = 0; i < 5 ; i++) {
%>
	<h1>Hello World!--=<%=i%></h1>
<%
	}
%>
  • 测试访问
    JSP

3.3、JSP声明

  • 作用:JSP声明中的代码会被编译到JSP生成的Java类中,即可以使用JSP声明定义其Java类的成员变量、方法、静态代码块等。

  • 格式:<%! Java代码 %>

<%!
    static {
        System.out.println("<h1>static代码块执行了!</h1>");
    }
    private String name="JSP";
    public String getName(){
        return "<span style=\"font-size: 30px\">"+name+"</span>";
    }
%>

<%
    for (int i = 0; i < 5; i++) {
        out.write(getName());
%>
    <span style="color: red;font-size: 30px">--=<%=i%></span><br>
<%
    }
%>
  • 测试访问:
    JSP

3.4、JSP指令

指令 描述
<%@ page … %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %> 包含其他文件
<%@ taglib … %> 引入标签库的定义
  • 合并网页
<%aaa@qq.com 合并三个页面,形成一个页面--%>
<%@include file="common/header.jsp"%>
    <h1>网页主体</h1>
<%@include file="common/footer.jsp"%>
  • index_jsp.java中的代码
    JSP
    JSP

3.5、JSP标签

语法 描述
jsp:include 用于在当前页面中包含静态或动态资源
jsp:useBean 寻找和初始化一个JavaBean组件
jsp:setProperty 设置 JavaBean组件的值
jsp:getProperty 将 JavaBean组件的值插入到 output中
jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin 用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element 动态创建一个XML元素
jsp:attribute 定义动态创建的XML元素的属性
jsp:body 定义动态创建的XML元素的主体
jsp:text 用于封装模板数据
  • 拼接页面
<jsp:include page="/common/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/common/footer.jsp"/>
  • index_jsp.java中的代码
    JSP
  • 测试访问
    JSP

3.6、EL表达式

  • 格式:${}

  • 作用:获取数据、执行运算、获取web开发常用对象

<h1>${"Hello World!"}</h1>
相关标签: JSP