コンテンツ
jspの出力出力とresponse.getWriter出力の違い
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>