JavaWeb 速通JSP

举报
Cyan_RA9 发表于 2023/10/16 18:13:45 2023/10/16
【摘要】 JavaWeb——服务器渲染技术 JSP 内容分享。

目录

一、JSP快速入门

        1.基本介绍 : 

        2.运行原理 : 

二、JSP语法

        1.page指令 : 

        2.声明脚本 : 

        3.表达式脚本 : 

        4.Java代码脚本 : 

        5.JSP注释 : 

三、JSP对象

        1.九大内置对象 : 

        2.四大域对象 : 

            1° 基本介绍

            2° 应用实例

        3.关于请求转发标签 : 


一、JSP快速入门

        1.基本介绍 : 

        (1) JSP 全称Java Server Pages,即Java服务器页面;JSP是一种基于Servlet的服务器渲染技术,可以理解为JSP就是对Servlet的包装

        (2) HTML只能为用户提供静态数据,而JSP允许在页面中嵌套 java代码,为用户提供动态数据注意:JSP页面不能像HTML页面一样直接通过浏览器运行, 而必须先启动Tomcat,再通过浏览器地址栏的URL进行访问
        (3) Servlet很难对数据进行排版,而JSP在用Java代码产生动态数据的同时,也很容易对数据进行排版

        2.运行原理 : 

        (1) JSP页面本质是一个Servlet程序(即本质就是Java程序),性能与Java关联。

        (2) 第一次访问JSP时,Tomcat服务器会把JSP页面先解析成.java的源文件,并进一步编译成.class的字节码文件,实际执行的就是.class字节码程序。eg : index.jsp ---> index_jsp.java 和 index_jsp.class。

                如下图所示 : 

编辑

二、JSP语法

        1.page指令 : 

编辑

        language 表示JSP解析后是什么语言文件, 目前只支持java语言。
        contentType 表示JSP返回的数据类型,对应源码中 response.setContentType()中的参数值。
        3° pageEncoding 属性,表示当前JSP页面文件本身的字符集。
        import 属性的使用与java源代码中类似,可用于导包,导类。

        2.声明脚本 : 

        声明脚本的格式是 : <%! java声明 %>可以用Java代码在声明脚本中定义JSP需要的属性、方法、静态代码块和内部类等,即给该JSP文件对应的java类定义成员

        demo.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP demo</title>
</head>
<body>
    <h1>demo.jsp</h1>
    <%!
        private String name;
        private int age;
        private String gender;
        private static String color;

        public String getName() {
            return this.name;
        }
        public int getAge() {
            return this.age;
        }
        public String getGender() {
            return this.gender;
        }
        static {
            color = "Cyan";
        }
    %>
</body>
</html>

        对应生成的.java文件如下图所示 : 

编辑

编辑

        3.表达式脚本 : 

        (1) 表达式脚本的格式是:<%=表达式%>
        (2) 表达式脚本的作用是:在JSP页面上输出数据
        (3) 表达式脚本的注意事项 : 表达式不能以分号结束

        expression.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Expression</title>
</head>
<body>
    <%
        String name = "Cyan_RA9";
    %>
    public : <%=141 + 130%> <br/>
    name : <%=name%> <br/>
    job : <%="Java Full Stack Developer"%>
</body>
</html>

        运行效果 : 

编辑

        4.Java代码脚本 : 

        代码脚本的语法格式 :<% java 代码%>
        代码脚本的作用 : 在JSP页面中使用Java代码完成业务需求。
        可以由多个代码脚本块组合成一个完整的Java语句,即允许有多个Java代码脚本
        代码脚本还可以和表达式脚本一起组合使用,在JSP页面上输出数据。

        首先定义一个JavaBean类,Student类代码如下 : 

package script;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
public class Student {
    private String name;
    private int age;
    private String gender;
    
    public Student() {
    }
    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

                在javacode.jsp页面中,利用List集合存入几个Student对象的信息。
                javacode.jsp代码如下 : 

\<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="script.Student" %> <%--自动导包--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Java Code script</title>
</head>
<body>
    <%
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("Cyan", 21, "male"));
        students.add(new Student("Five", 22, "female"));
        students.add(new Student("Ice", 20, "male"));
    %>
    <table bgcolor="#e0ffff" border="2px" bordercolor="pink" cellspacing="0" width="300px">
        <tr>
            <th>Name</th>
            <th>Age</th>
            <th>Gender</th>
        </tr>
    <%
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
    %>
        <tr>
            <td><%=student.getName()%></td>
            <td><%=student.getAge()%></td>
            <td><%=student.getGender()%></td>
        </tr>
    <%
        }
    %>
    </table>
</body>
</html>

        运行结果 : 

编辑

        5.JSP注释 : 

        JSP中不仅支持HTML格式的注释,还支持自己特有的注释格式 :  <%-- --%>

        此外,在JSP的Java代码脚本中,也可以使用Java的行注释和段注释。

        note.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Note demo</title>
</head>
<body>
<!-- 这是HTML格式的注释√ -->
<%
    //这是Java代码的行注释;
    /*
        这是Java代码的段注释。
     */
%>
<%-- 这是JSP特有的注释格式√ --%>
</body>
</html>

三、JSP对象

        1.九大内置对象 : 

        1> JSP 内置对象(指已经创建好的对象, 可以直接使用[inbuild]),即Tomcat在解析JSP页面为Servlet 后,内部提供的九大对象,叫内置对象。
        2> 内置对象可以直接使用,不需要手动定义。

        3> 九大内置对象如下——

                ①out 向客户端输出数据,out.println("");
                ②request 处理来自客户端的HTTP请求
                ③response 与回送的HTTP响应相关
                ④session 会话对象
                ⑤application 对应 ServletContext
                ⑥pageContext JSP页面的上下文,是一个域对象,可以使用setAttribue()方法,但作用范围只是本页面
                ⑦exception 异常对象 , getMessage()
                ⑧page 代表JSP这个实例本身
                ⑨config 对应 ServletConfig
        4> 九大内置对象与Servlet的关系图——

编辑

        2.四大域对象 : 

            1° 基本介绍

        1> pageContext域对象,存放的数据只能在当前页面使用。

        2> request域对象,存放的数据在一次Request请求中有效(eg : 请求转发)。

        3> session域对象,存放的数据在一次会话有效(sessionId)。

        4> application域对象,存放的数据在整个Web应用运行期间有效, 范围更大。

        作用域 : pageContext < request < session < application.

            2° 应用实例

                scope.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Scope</title>
</head>
<body>
<%-- 由于四个域对象是不同的对象,因此允许出现相同的name。 --%>
<%
    pageContext.setAttribute("color", "cyan");
    request.setAttribute("color", "pink");
    session.setAttribute("color", "cornflower");
    application.setAttribute("color", "lightblue");

    //请求转发
//    RequestDispatcher requestDispatcher = request.getRequestDispatcher("scope2.jsp");
//    requestDispatcher.forward(request, response);

    //请求重定向
    ServletContext servletContext = config.getServletContext();
    String contextPath = servletContext.getContextPath();
    response.sendRedirect(contextPath + "/scope2.jsp");
%>
<h1>四个域对象,在本页面获取数据的情况</h1>
pageContext-color : <%=pageContext.getAttribute("color")%>  <br/>
request-color : <%=request.getAttribute("color")%> <br/>
session-color : <%=session.getAttribute("color")%> <br/>
application-color : <%=application.getAttribute("color")%> <hr/>
</body>
</html>

                运行效果 : (本页面访问域对象)

编辑

                scope2.jsp代码如下 : (外页面访问域对象)

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>scope2</title>
</head>
<body>
<h1>在scope2页面获取数据的情况:</h1>
pageContext-color : <%=pageContext.getAttribute("color")%>  <br/>
request-color : <%=request.getAttribute("color")%> <br/>
session-color : <%=session.getAttribute("color")%> <br/>
application-color : <%=application.getAttribute("color")%> <hr/>
</body>
</html>

                运行效果 : (scope请求转发

编辑

                运行效果:(scope请求重定向

编辑

        3.关于请求转发标签 : 

        <jsp:forward page="URL"></jsp:forward>

        注意 : 1> 此处的URL是在服务器端解析的。

                   2> 请求转发标签常用于一个入口页面,转发到其他功能资源。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。