JSP理解:从编译原理角度理解jsp最后如何生成html

1 篇文章 0 订阅

注:本篇文章更多的是一篇理解的散文。不是详细教程。说了一下我学习了spring系列套件和thymeleaf之类的模板之后,再去回顾jsp的感受。

是什么

jsp就是一个动态页面,这个说法是参考html的,那个是个静态页面。

  • html访问过程:浏览器直接访问,服务器把html用二进制串传过去,浏览器再渲染的。
    但是,jsp中有很多的java代码,当有请求来到的时候,服务器会处理请求,根据请求的参数,执行对应的逻辑,注入数据到页面中。
  • jsp访问过程:这个过程是服务器根据请求url定位到了对应的jsp页面,然后java虚拟机读取jsp,翻译为servlet。翻译过程类似编译过程:一个字一个字读取jsp内容,碰到的html内容直接保存,碰到了java代码(被<%%>包裹住的那些,有特殊分隔符的部分),就会将代码执行结果写入。
    这样的好处就是,不同人访问的时候,同一个jsp,可能java逻辑会不一样,所以动态生成了不一样的html。
    jsp转化html过程如下:将内容用字符串的形式输入到response中,很普通的方式。浏览器也会解析这个字符串为html。
    在这里插入图片描述
    然后,上面这个过程其实也是类似于thymeleaf之类的模板引擎了,尤其是编译为纯html页面这一个过程。

具体解释

  1. 首先,上面说了,jsp代码会被java虚拟机翻译为servlet。所以,这里建议看一下传统的servlet,你就是到jsp是什么回事了。
package com.runoob.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CheckBox
 */
@WebServlet("/CheckBox")
public class CheckBox extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String title = "读取复选框数据";
        String docType = "<!DOCTYPE html> \n";
            out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>菜鸟按教程标识:</b>: "
                + request.getParameter("runoob") + "\n" +
                "  <li><b>Google 标识:</b>: "
                + request.getParameter("google") + "\n" +
                "  <li><b>淘宝标识:</b>: "
                + request.getParameter("taobao") + "\n" +
                "</ul>\n" +
                "</body></html>");
    }
    
    // 处理 POST 方法请求的方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

jsp其实就是把下面这一段给封装了,让你可以用html的格式书写,不用字符串拼装,而jsp后来翻译为servlet,也是这么一个逆过程而已。

 out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>菜鸟按教程标识:</b>: "
                + request.getParameter("runoob") + "\n" +
                "  <li><b>Google 标识:</b>: "
                + request.getParameter("google") + "\n" +
                "  <li><b>淘宝标识:</b>: "
                + request.getParameter("taobao") + "\n" +
                "</ul>\n" +
                "</body></html>");

服务器自己读取jsp页面,然后将被<%java代码 %>包裹的部分用真正的java数据代替,再将最后生成的字符串写入response。

参考

  1. jsp和servlet的区别:jsp就是一个特殊的servlet
  2. jsp和html的区别:jsp是java代码,是一段逻辑处理来的。而html则是一个文件,访问url,找到服务器对应位置,直接读取即可。没有什么逻辑处理的。后来的thymeleaf之类的,都是后面来的。那时候也只是多一个编译过程。
  3. jsp的解析过程:就是xx.jsp解析为xx.java,然后执行嵌入其中的Java逻辑,然后字符串的方式输出到访问请求的responce中。
  4. jsp常见库
  5. http访问servlet的过程
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值