JSP(1) JSP简介和JSP脚本

1 JSP简介

1.1 JSP的简介

JSP(Java Server Pages)即Java服务器页面

JSP的主要作用是代替Servlet程序回传HTML页面,由于Servlet程序回传HTML页面非常繁琐,开发成本和维护成本都很高,因此采用JSP来代替Servlet程序回传HTML页面

JSP页面和HTML页面都是存放在webapp目录下的,访问JSP页面的方式和访问HTML页面的方式也是相同的

1.2 JSP的本质

JSP页面本质上是Servlet程序

第一次访问JSP页面时,Tomcat会把JSP页面翻译成Java源文件,并编译成字节码程序,JSP翻译出来的Java源文件间接地继承了HttpServlet类,也就是说JSP本质上就是一个Servlet程序,其底层也是通过输出流,将HTML页面数据回传给客户端

一个JSP页面index.jsp:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>About_JSP</title>
</head>
<body>

    <h1><%= "Hello World!" %></h1> <br/>

    <a href="hello-servlet">Hello Servlet</a>

    <form action="/MyServlet1" method="get">
        <input type="submit">
    </form>

</body>
</html>

该JSP页面被Tomcat翻译的Java源文件:

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 {
                 
		...
		...
		
	// jsp页面翻译成Servlet程序的核心方法
	public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
      ...
      ...

1.3 JSP的page指令

每一个JSP页面都有一个page指令:

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

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

page指令常用属性:

	language属性            暂时只支持Java
    contentType属性         jsp返回的数据类型,源码中response.setContentType()的参数值
    pageEncoding属性        表示当前jsp页面文件本身的字符集 默认UTF-8
    import属性              和Java的import相同用于引入类

    // 用于设置out输出流
    autoFlush属性           设置当out输出流缓冲区满了后,是否自动刷新缓冲区 默认为true
    buffer属性              设置out输出流缓冲区的大小,默认为8kb


    errorPage属性           设置当jsp页面运行出错时,自动跳转到的错误页面路径
    isErrorPage属性         设置当前jsp页面是否是错误信息页面 默认是false 如果是true 可以获取异常信息

    session属性             设置访问当前jsp页面是否会创建HttpSession对象 默认是true
    extends属性             设置jsp翻译出来的java类继承谁 默认是HttpServlet

使用示例:

<%@ page contentType="text/html;charset=UTF-8" language="java" 	
		 pageEncoding="utf-8"
         autoFlush="true" buffer="8kb"
         errorPage="/error.jsp" session="true" %>

2 JSP脚本

2.1 声明脚本 <%! %>

声明脚本可以给JSP翻译出来的Servlet程序定义属性,方法,静态代码块,内部类等,声明脚本很少使用

在JSP页面中增加声明脚本:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8"
         autoFlush="true" buffer="8kb"
         errorPage="/error.jsp" session="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>JSP page Info</h1>

    <%-- 声明脚本 --%>
    
    <%-- 1,声明类的属性 --%>
    <%!
        private int id;
        private static List<Integer> numList;
    %>

    <%-- 2,声明static静态代码块 --%>
    <%!
        static {
            numList = new ArrayList<>();
        }
    %>

    <%-- 3,声明类的方法   --%>
    <%!
        public void setId(int id) {
            this.id = id;
        }
    %>

    <%-- 4,声明内部类   --%>
    <%!
        public static class A {
            private String name;
            private String password;

            public A(String name, String password) {
                this.name = name;
                this.password = password;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public String getPassword() {
                return password;
            }

            public void setPassword(String password) {
                this.password = password;
            }
        }
    %>

</body>
</html>

在上述JSP页面中定义的成员,方法,内部类等都会被Tomcat翻译到该JSP页面对应的Servlet程序

2.2 表达式脚本 <%= %>

表达式脚本可以在JSP页面上输出数据,如整型,浮点,字符串,对象

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

    <%!
        private static List<Integer> numList;
    %>

    <%!
        static {
            numList = new ArrayList<>();
        }
    %>


    <%-- 表达式脚本 --%>

    <%-- 1,输出整型 --%>
    <%=12%>

    <%-- 2,输出浮点型 --%>
    <%=3.24%>

    <%-- 3,输出字符串 --%>
    <%="Hello jsp"%>

    <%-- 4,输出对象 --%>
    <%=numList%>

    <%-- 直接使用_jspService方法中的对象 --%>
    <%=request.getParameter("")%>


</body>
</html>

对应的页面效果:
在这里插入图片描述
表达式脚本的特点:

1,所有脚本内容都会被翻译到该JSP页面
	对应的Servlet程序中的_jspService方法中

2,表达式脚本都会在_jspService方法中
	被翻译为 out.print() 输出到页面上

3,由于表达式脚本翻译的内容都会被写在_jspService方法中
	所以_jspService方法中的对象都可以直接使用
	如request,response,out等对象

4,表达式脚本中的表达式,不能以 ; 结束

2.3 代码脚本 <% %>

代码脚本可以在JSP页面中编写Java语句,如if,for等

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

    <%-- 代码脚本 --%>

    <%-- if语句 --%>
    <%
        int i = 10;
        if(i == 10) {
            System.out.println("Y");
        } else {
            System.out.println("N");
        }
    %>

    <%-- for语句  --%>
    <%
        for(int j = 0; j < 10; j++) {
            System.out.println("j: " + j);
        }
    %>


    <%-- 翻译后jsp对应的Servlet源码的 _jspService方法内的代码都可以写
        如使用request对象 response对象等 --%>
    <%
        request.getParameter("");
        response.sendRedirect("/index.jsp");
    %>

    <%-- 一段Java语句可以由多块代码脚本组成 --%>
    <%
        int a = 10;
        if(a == 10) {
    %>
    <%
            System.out.println(a);
        }
    %>

    <%-- 代码脚本和表达式脚本组合在jsp页面上输出数据 --%>
    <%
        for(int index = 0; index < 10; index++) {
    %>
    <%=index%>
    <%
        }
    %>

    <table border="1">
        <%
            for(int t = 0; t < 5; t++) {
        %>
        <tr>
            <td>
                the <%=t%> row
            </td>
        </tr>
        <%
            }
        %>
    </table>

</body>
</html>

对应的页面效果:
在这里插入图片描述
代码脚本的特点:

1,JSP页面中的代码脚本翻译后的内容
	都在Servlet程序的_jspService方法中

2,代码脚本由于翻译到了_jspService方法中
	所以在_jspService方法中的对象都可以直接使用

3,代码脚本可以由多个代码脚本块组合成一个完整的Java语句

4,代码脚本还可以和表达式脚本+Html标签组合使用
	在JSP页面上输出数据

2.4 JSP中的注释

JSP页面中有3种注释:

html注释 <!-- -->
会被翻译到Servlet源码中,在_jspService方法中
	以out.writer输出到客户端,但仍然是页面中的注释

Java注释 // /**/
会被翻译到Servlet源码中,仍然以Java注释的形式存在

JSP注释 <%-- --%>
JSP页面真正的注释,可以注释掉JSP页面中所有的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值