JSP介绍、语法、脚本

本文详细介绍了JSP(Java Server Pages)的基本概念、本质、页面指令、常用脚本以及注释。JSP是Java的一种动态网页技术,用于简化Servlet编程,主要作用是生成HTML页面。JSP本质是Servlet程序,首次访问时会被翻译成Java类并编译。文章还探讨了page指令的用法,以及声明脚本、表达式脚本和代码脚本的语法和功能。此外,还列举了不同类型的注释在JSP中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Jsp是什么?

jsp的全拼是java server pages。Java的服务器页面。
jsp的主要作用是代替Servlet程序回传html页面的数据。
因为Servlet程序回传html页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。

Servlet回传html页面数据的代码:

public class PringHtml extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过响应的回传流回传html页面数据
        resp.setContentType("text/html; charset=UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.write("<!DOCTYPE html>\r\n");
        writer.write("  <html lang=\"en\">\r\n");
        writer.write("  <head>\r\n");
        writer.write("      <meta charset=\"UTF-8\">\r\n");
        writer.write("      <title>Title</title>\r\n");
        writer.write("  </head>\r\n");
        writer.write(" <body>\r\n");
        writer.write("    这是html页面数据 \r\n");
        writer.write("  </body>\r\n");
        writer.write("</html>\r\n");
        writer.write("\r\n");
    }
}

jsp回传一个简单html页面的代码:

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

jsp的小结:

(1)创建jsp的页面

打开菜单目录依次按顺序打开:File==》New ==》JSP/JSPX
在这里插入图片描述

输入文件名,确认之后,回车就可以了。
在这里插入图片描述

(2)jsp如何访问:

	jsp页面和html页面一样,都是存放在web目录下。访问也跟访问html页面一样。
比如:
	在web目录下有如下的文件:

在这里插入图片描述

2、 jsp的本质是什么?

jsp页面本质上是一个Servlet程序。
第一次访问jsp页面的时候。Tomcat服务器会帮我们把jsp页面翻译成为一个java源文件。并且对它进行编译成为.class字节码程序。我们打开java源文件可以看到里面的内容是:
在这里插入图片描述

查看源代码发现,HttpJspBase类直接地继承了HttpServlet类。说明jsp翻译出来的java类,它间接了继承了HttpServlet类。说明翻译出来的是一个Servlet程序。
在这里插入图片描述

通过java源代码可以得到结果:jsp就是Servlet程序。

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

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
        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>Title</title>\r\n");
        out.write("</head>\r\n");
        out.write("<body>\r\n");
        out.write("    a.jsp页面\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);
    }
}

3、jsp头部的page指令

jsp的page指令可以修改jsp页面中一些重要的属性,或者行为。

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

在这里插入图片描述

4、jsp中的常用脚本

4.1、声明脚本
声明脚本的格式是: <%! 声明java代码 %>
作用:可以给jsp翻译出来的java类定义属性和方法甚至是静态代码块。内部类等。

(1)声明类属性

<%--1、声明类属性--%>
    <%!
        private Integer id;
        private String name;
        private static Map<String,Object> map;
    %>

(2)声明static静态代码块

<%--2、声明static静态代码块--%>
    <%!
        static {
            map = new HashMap<String,Object>();
            map.put("key1", "value1");
            map.put("key2", "value2");
            map.put("key3", "value3");
        }
    %>

(3)声明类方法

<%--3、声明类方法--%>
    <%!
        public int abc(){
            return 12;
        }
    %>

(4)声明内部类

<%--4、声明内部类--%>
    <%!
        public static class A {
            private Integer id = 12;
            private String abc = "abc";
        }
    %>

声明脚本代码翻译对照:
在这里插入图片描述

4.2表达式脚本

表达式脚本的格式是:<%=表达式%>
表达式脚本的作用是:的jsp页面上输出数据。
表达式脚本的特点:
1、所有的表达式脚本都会被翻译到_jspService() 方法中
2、表达式脚本都会被翻译成为out.print()输出到页面上
3、由于表达式脚本翻译的内容都在_jspService() 方法中,所以_jspService()方法中的对象都可以直接使用。
4、表达式脚本中的表达式不能以分号结束。

(1)输出整型

<%=12 %> <br>

(2)输出浮点型

<%=12.12 %> <br>

(3) 输出字符串

<%="我是字符串" %> <br>

(4)输出对象

<%=map%> <br>
<%=request.getParameter("username")%>

翻译对照:
在这里插入图片描述

4.3、代码脚本

代码脚本的格式是:

<%
java 语句
%>

代码脚本的作用是:可以在jsp页面中,编写我们自己需要的功能(写的是java语句)
代码脚本的特点是:
1、代码脚本翻译之后都在_jspService方法中
2、代码脚本由于翻译到_jspService()方法中,所以在_jspService()方法中的现有对象都可以直接使用。
3、还可以由多个代码脚本块组合完成一个完整的java语句。
4、代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据

(1)代码脚本----if 语句

<%--1.代码脚本----if 语句--%>
    <%
        int i = 13 ;
        if (i == 12) {
    %>
            <h1>中国</h1>
    <%
        } else {
    %>
        <h1>中国加油!</h1>
    <%
        }
    %>
<br>

(2)代码脚本----for 循环语句

<%--2.代码脚本----for 循环语句--%>
    <table border="1" cellspacing="0">
    <%
        for (int j = 0; j < 10; j++) {
    %>
        <tr>
            <td><%=j + 1%></td>
        </tr>
    <%
        }
    %>
    </table>

(3)翻译后java文件中_jspService方法内的代码都可以写

<%--3.翻译后java文件中_jspService方法内的代码都可以写--%>
    <%
        String username = request.getParameter("username");
        System.out.println("用户名的请求参数值是:" + username);
    %>

翻译之后的对比:
在这里插入图片描述

5、jsp中的三种注释

5.1、html注释

<!-- 这是html注释  -->

html注释会被翻译到java源代码中。在_jspService方法里,以out.writer输出到客户端
5.2、java注释

<%
    // 单行java注释
    /*  多行java注释  */
%>

java注释会被翻译到java源代码中

5.3、jsp注释

<%-- 这是jsp注释  --%>	

jsp注释可以注掉,jsp页面中所有代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爪哇手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值