JSPオブジェクトの解析

コンテンツ

jspの9つの組み込みオブジェクト

jsp4つのドメインオブジェクト

jspの出力出力とresponse.getWriter出力の違い

out.print()和out.write() 

jsp共通タグ

静的インクルード

動的包含

動的包含の機能:

転送をリクエストする

jsp練習

演習1

九九の九九を印刷する

演習2 

 学生情報を保存して印刷する

転送手順をリクエストする

 リスナーリスナー

ServletContextListenterリスナー

ServletContextListenerリスナーがServletContextオブジェクトをリッスンするための手順


jspの9つの組み込みオブジェクト

jspの9つの組み込みオブジェクトは、jspページをサーブレットソースコードに変換した後にTomcatによって内部的に提供される9つのオブジェクトを参照します。これらは、組み込みオブジェクトと呼ばれます。

リクエスト                  リクエストオブジェクト

応答                応答オブジェクト

pageContextjspの         コンテキストオブジェクト

セッション                 セッションオブジェクト

アプリケーション             ServletContextオブジェクト

configServletConfig                    オブジェクト

例外                例外オブジェクト

                        jsp出力ストリームオブジェクトを出力し  ます

jsp4つのドメインオブジェクト

 ドメインオブジェクトは、マップと同じ方法でデータにアクセスできるオブジェクトです。4つのドメインオブジェクトの機能は同じですが、データへのアクセス範囲が異なります

4つのドメインオブジェクトは次のとおりです。

ドメインオブジェクト クラス アクセス範囲
pageContext (クラスPageContextImpl) 現在のjspページの範囲内で有効
リクエスト (HttpServletRequestクラス) 1つのリクエスト内で有効
セッション (HttpSessionクラス) セッション内で有効(ブラウザを開いて、ブラウザを閉じるまでサーバーにアクセスします)
申し込み (ServletContextクラス) Webプロジェクト全体の範囲内で有効です(Webプロジェクトが停止しない限り、データはそこにあります)

//4つのフィールドのそれぞれにデータを保存します

<%

        pageContext.setAttribute( "key"、 "pageContext");

        request.setAttribute( "key"、 "request");

        session.setAttribute( "key"、 "session");

        application.setAttribute( "key"、 "application");

%>

pageContextフィールドに値があるかどうか:<%= pageContext.getAttribute( "key")%> <br>

リクエストフィールドに値があるかどうか:<%= pageContext.getAttribute( "key")%> <br>

セッションフィールドに値があるかどうか:<%= session.getAttribute( "key")%> <br>

アプリケーションフィールドに値があるかどうか:<%= application.getAttribute( "key")%> <br>

 別のjspページを作成します。

 その他の範囲テスト:

 それらの範囲は小さいものから大きいものまであります。使用する場合は、通常、最初に小さい範囲を使用し、小さい範囲では不十分な場合は小さい範囲を使用します。(メモリ最適化の理由で)

小:pageContext
リクエスト
セッション
大:アプリケーション

jspの出力出力とresponse.getWriter出力の違い

 誰が最初に結果を出力しても、それが最初の応答であることがわかります。

グラフィカル分析:

 jspページのすべてのコードが実行されるとどうなりますか。

1. out.flush()操作を実行します。これにより、出力バッファーのデータが応答バッファーの最後に追加されます。

2.応答の更新操作が実行され、データがクライアントに書き込まれます。

確認: 

 基になるソースコードはjsp変換後の出力に使用されるため、通常、jspページでの出力に使用されます。ページ出力の順序を乱さないようにしてください。

out.print()和out.write() 

out.write()出力文字列文字列問題ありません

out.print()は任意のデータを出力できます(文字列に変換されてから書き込み出力を呼び出します)

結論:jspページでは、out.print()を均一に使用して出力できます

jsp共通タグ

静的インクルード

Webの下にインクルードディレクトリを作成し、そこにmain.jspとfooter.jspを書き込みます

footer.jspの下

<html>
<head>

    <meta charset="utf-8"/>
    <title>Insert title here</title>
</head>
<body>
页脚信息

</body>
</html>

 main.jspの下

</head>
<body>
首页<br>
主体<br>
<%--
    include file="" 就是静态包含
    file属性指定你要包含的页面路径
    地址中的第一个斜杆 /   表示http://ip:port/工程路径/ 映射到idea为web
--%>
    <%@include file="/include/footer.jsp" %>
</body>
</html>

include file=""は静的インクルードです

file属性は、含めるページへのパスを指定します

アドレスの最初のスラッシュ/はhttp:// ip:port / project path /を表し、アイデアとしてWebディレクトリにマップされます。

  footer.jspのコンテンツを変更する

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

<html>
<head>

    <meta charset="utf-8"/>
    <title>Insert title here</title>
</head>
<body>
页脚信息
修改后,主页显示
</body>
</html>

動的包含

フォーマット:

<jsp:include page="/include/footer.jsp"></jsp:include>

動的インクルードは静的インクルードと同じにすることもできます

動的包含の機能:

1.動的インクルードは、インクルードされたjspページをJavaコードに変換します

2.基になるコードを動的に含める次のコードを使用して、含まれているjspページを呼び出して出力を実行します。

JspRuntimeLibrary.include(request,response,"/include/footer.jsp",out,false);

転送をリクエストする

フォーマット:

<jsp:forward page=" "></jsp:forward>
<!--page属性设置请求转发的路径-->

jsp練習

演習1

九九の九九を印刷する

<html>
<head>
</head>
<body >

<h1 >九九乘法表</h1>

   <%
    for(int i=1;i<10;i++){
        for(int j=1;j<=i;j++){
    %>

        <%=j+"*"+i+"="+(i*j)%>

      <%
       }
        %>

    <br/>

   <%
    }
   %>

</body>
</html>

演習2 

 学生情報を保存して印刷する

pojoパッケージの学生クラス

package pojo;

public class Student {
private String name;
private int  id;
private int age;

    public Student(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    public Student() {
    }

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

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

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

text1.jspの下

<%@ page import="java.util.List" %>
<%@ page import="pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

<html>
<head>
   
    <meta charset="utf-8"/>
    <title>Insert title here</title>
<%--    设置样式<style></style>--%>
    <style>
        table{
            border: 1px black solid;
            width: 300px;
        }
        td,tr{
            border: 1px black solid;
            width: 300px;
        }
    </style>
</head>
<body>
<%
    List<Student> list=new ArrayList<>();
    for (int i=1;i<=10;i++){
      list.add(new Student("name"+i,i,10+i));
    }
%>
<table>
<%for (Student student:list){%>
<%--    tr是一行,td为一列--%>
<tr>
    <td><%=student.getName()%></td>
    <td><%=student.getId()%></td>
    <td><%=student.getAge()%></td>
</tr>

  <% } %>
</table>
</body>
</html>

転送手順をリクエストする

フローチャート:

 SearchStudentServletクラス下

package com.Servlet;

import pojo.Student;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SearchStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求参数
        //发sql语句查询学生信息
        //使用for循环生成查询到的数据做模拟
        List<Student> list=new ArrayList<>();
        for (int i=1;i<=10;i++){
            list.add(new Student("name"+i,i,10+i));
        }
        //保存查询到的数据到Request域中
        req.setAttribute("stuList", list);
        //请求转发到之外的showStudent.jsp中
        req.getRequestDispatcher("/showStudent.jsp").forward(req, resp);

    }
}

web.xml下:

   <servlet>
       <servlet-name>SearchStudentServlet</servlet-name>
       <servlet-class>com.Servlet.SearchStudentServlet</servlet-class>
   </servlet>
    <servlet-mapping>
        <servlet-name>SearchStudentServlet</servlet-name>
        <url-pattern>/searchStudentServlet</url-pattern>
    </servlet-mapping>

showStudent.jsp下

<%@ page import="java.util.List" %>
<%@ page import="pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

<html>
<head>

    <meta charset="utf-8"/>
    <title>Insert title here</title>
<%--    设置样式<style></style>--%>
    <style>
        table{
            border: 1px black solid;
            width: 300px;
        }
        td,tr{
            border: 1px black solid;
            width: 300px;
        }
    </style>
</head>
<body>
<%
    List<Student> list= (List<Student>) request.getAttribute("stuList");

%>
<table>
<%for (Student student:list){%>
<%--    tr是一行,td为一列--%>
<tr>
    <td><%=student.getName()%></td>
    <td><%=student.getId()%></td>
    <td><%=student.getAge()%></td>
</tr>

  <% } %>
</table>
</body>
</html>

 演算結果:

 リスナーリスナー

 1.リスナーリスナーは、JavaWebの3つの主要コンポーネントの1つです。javawebの3つの主要なコンポーネントは、サーブレットプログラム、フィルタフィルタ、およびリスナーリスナーです。

2.リスナーはjavaEEの仕様であり、仕様はインターフェースです。

3.リスナーの役割は、特定のトランザクションの変更を監視し、コールバック関数を介して、クライアントまたはプログラムにフィードバックして、対応する処理を実行することです。

ServletContextListenterリスナー

ServletContextListener彼は、ServletContextオブジェクトの作成と破棄を監視できます。

ServletContextオブジェクトは、Webプロジェクトの開始時とWebプロジェクトの停止時に破棄されます。

ServletContextListenerリスナーがServletContextオブジェクトをリッスンするための手順

1.ServletContextListenerを実装するためのクラスを作成します

2.実装者の2つのコールバックメソッド

3. web.xmlに移動して、リスナーを構成します

クラスと実線の2つのメソッドを作成します

package com.Listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListenerImpl implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("Servlet对象被创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("Servlet对象被销毁了");

    }
}

web.xmlでの構成

<listener>
        <listener-class>com.Listener.MyServletContextListenerImpl</listener-class>
    </listener>

おすすめ

転載: blog.csdn.net/weixin_60719453/article/details/122892589