目次
2.2ServletConfigインターフェースの3つの機能
2.3ServletConfigインターフェースのコードデモンストレーション
2.3.1サーブレットプロセッサ-HttpServletProcessor
2.3.3サーブレットプロセッサ-web.xml構成ファイル
2.3.4サーブレットプロセッサ-フロントエンドHTTPリクエスト
2.3.5サーブレットプロセッサ-バックエンドHTTP要求の処理結果
3.3、ServletContextオブジェクトコードデモンストレーションの役割
3.3.1サーブレットプロセッサ-ServletContextオブジェクト関数テスト-HttpServletProcessorAuto
3.3.2サーブレットプロセッサ-ServletContextオブジェクト関数test-web.xml構成ファイル
3.3.3サーブレットプロセッサ-ServletContextオブジェクト関数テスト-フロントエンドHTTPリクエスト
3.3.4サーブレットプロセッサ-ServletContextオブジェクト関数テスト-バックエンドHTTP要求処理結果
3.3.5サーブレットプロセッサ-ServletContextオブジェクト関数のテスト-ServletContextオブジェクトにデータを格納するデモンストレーション
3.3.6 Webプロジェクト全体がTomcatサーバーにデプロイされた後、サーバー内の動的リソースと静的リソースがディスクに保存されます
java8オンラインAPI: https: //www.matools.com/api/java8
1.サーブレットインターフェイス
1.1、サーブレットインターフェースの継承システム
2.ServletConfigインターフェース
2.1ServletConfigインターフェースの説明
名前から判断すると、ServletConfigインターフェイスはServletプログラムの構成情報であることがわかっています。
(1)サーブレットプログラムとServletConfigオブジェクトはどちらもTomcatによって作成され、プログラマーによって使用されます。
(2)サーブレットプログラムは、デフォルトで初めてアクセスしたときに作成されます(アクセスは作成されません)。各サーブレットプログラムが作成されると、それに応じてServletConfigオブジェクトが作成され、2つは互いに対応します。Servletプログラムは、それに対応するServletConfigオブジェクトのみを取得できますが、他のServletプログラムのServletConfigオブジェクトを取得することはできません。
2.2ServletConfigインターフェースの3つの機能
(1)Servletプログラムのエイリアス(すなわち、web.xmlで設定されたServletプログラムのエイリアス)を取得できます。
(2)web.xmlで設定された初期化パラメータを取得できます。
(3)ServletContextオブジェクトを取得できます。
2.3ServletConfigインターフェースのコードデモンストレーション
2.3.1サーブレットプロセッサ-HttpServletProcessor
package com.wind.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 演示ServletConfig接口的作用
*/
public class HttpServletProcessor extends HttpServlet {
private static final long serialVersionUID = -7511536601794982778L;
public HttpServletProcessor() {
System.out.println("1.HttpServletProcessor extends HttpServlet 的无参构造器执行了...");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
System.out.println("2.HttpServletProcessor extends HttpServlet 的init方法执行了...");
//ServletConfig接口的三大作用:
//(1) 可以获取Servlet程序的别名(即web.xml的的内容)
System.out.println("Servlet程序的别名:" + servletConfig.getServletName());
//(2) 可以获取web.xml的初始化参数的值
System.out.println("Servlet程序的初始化参数1:" + servletConfig.getInitParameter("username"));
System.out.println("Servlet程序的初始化参数2:" + servletConfig.getInitParameter("password"));
//(3) 可以获取ServletContext对象
System.out.println("Servlet程序的ServletContext对象:" + servletConfig.getServletContext());
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("3.HttpServletProcessor extends HttpServlet, doGet done...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("4.HttpServletProcessor extends HttpServlet, doPost done...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("5.HttpServletProcessor extends HttpServlet 的destroy方法执行了.");
}
}
2.3.2initメソッドを書き直す際の注意事項
注:Servletインターフェースのinitメソッドを書き直すときは、関数本体に次のように書き込む必要があります。super.init(config); 理由:親クラスGenericServletのinitメソッドはパラメーターconfigを保存し、サブクラスは呼び出されない場合は保存できません。
2.3.3サーブレットプロセッサ-web.xml構成ファイル
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--1.使用servlet标签给Tomcat配置动态servlet程序-->
<servlet>
<!--servlet-name标签:给servlet程序起一个别名(一般就是类名)-->
<servlet-name>HttpServletProcessor</servlet-name>
<!--servlet-class标签:servlet程序的全类名-->
<servlet-class>com.wind.servlet.HttpServletProcessor</servlet-class>
<!--init-param标签:给Servlet程序传入初始化参数-->
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>root</param-value>
</init-param>
</servlet>
<!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签:告诉Tomcat服务器,我当前配置的访问地址是给哪个servlet程序使用-->
<servlet-name>HttpServletProcessor</servlet-name>
<!--url-pattern标签:配置访问地址.
(1)/ :斜杠表示,在服务器解析的时候,表示访问地址是:http://ip:port/工程路径
(2)/httpServlet : 表示访问地址是:http://ip:port/工程路径/httpServlet 比如:http://localhost:8080/javaWeb/httpServlet -->
<url-pattern>/httpServlet</url-pattern>
</servlet-mapping>
<!--3.使用b.html访问-->
</web-app>
2.3.4サーブレットプロセッサ-フロントエンドHTTPリクエスト
2.3.5サーブレットプロセッサ-バックエンドHTTP要求の処理結果
3.ServletContextインターフェース
3.1、ServletContextインターフェースの説明
(1)ServletContextインターフェースは、Servletコンテキストオブジェクトを表します。
(2)Webプロジェクトには、ServletContextオブジェクトインスタンスが1つだけあります。
(3)ServletContextは、Webプロジェクトの開始時に作成され、Webプロジェクトの停止時に破棄されます。
(4)ServletContextオブジェクトはドメインオブジェクトです。ドメインオブジェクトとは何ですか?ドメインオブジェクトは、次のとおりです。地図のようなデータにアクセスするオブジェクトは、ドメインオブジェクトと呼ばれ、ドメインは、 データへのアクセス動作範囲を指し、のServletContextのドメインは、全体のWebプロジェクトです。
3.2、ServletContextオブジェクトの役割
(1)web.xmlで構成されたコンテキストパラメータータグの値を取得します。
(2)現在のプロジェクトのパスを取得します。形式:/ project pathは、Deployment in Edit Configurationsのアプリケーションコンテキストのコンテンツ(つまり、アドレスの8080の後、特定の開いたページの前のコンテンツ)です。
(3)展開後、ハードディスク上のプロジェクトの絶対パスを取得します。
(4)マップなどのデータにアクセスします。
3.3、ServletContextオブジェクトコードデモンストレーションの役割
3.3.1サーブレットプロセッサ-ServletContextオブジェクト関数テスト-HttpServletProcessorAuto
package com.wind.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* ServletContext 测试
*/
public class HttpServletProcessorAuto extends HttpServlet {
private static final long serialVersionUID = 2050438983192725273L;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
/**
* 默认执行的是doGet方法,故只重写doGet方法
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
ServletContext servletContext = getServletConfig().getServletContext();
//ServletContext作用 1.获取web.xml中配置的上下文参数<context-param>标签中的值
System.out.println("context-param参数的username值是:" + servletContext.getInitParameter("username"));
/* 运行结果:context-param参数的username值是:username-root */
System.out.println("context-param参数的password值是:" + servletContext.getInitParameter("password"));
/* 运行结果:context-param参数的password值是:password-root */
//ServletContext作用 2.获取当前工程的路径
System.out.println("当前工程路径:" + servletContext.getContextPath());
/* 运行结果:当前工程路径:/javaWeb */
//ServletContext作用 3.获取web工程部署后在硬盘上的绝对路径
/* /斜杠(默认路径)对应IDEA代码的web目录 */
System.out.println("工程部署后的绝对路径是:" + servletContext.getRealPath("/"));
/* 运行结果:工程部署后的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/ */
//另:在web目录下创建一个css文件夹
System.out.println("工程下css目录的绝对路径是:" + servletContext.getRealPath("/css"));
/* 运行结果:工程下css目录的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/css */
//在web目录下创建一个img文件夹,里面放1.gif文件
System.out.println("工程下img目录1.jpg的绝对路径是:" + servletContext.getRealPath("/img/1.jpg"));
/* 输出:工程下img目录1.gif的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/img/1.jpg */
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("3.HttpServletProcessorAuto extends HttpServlet, doGet done...");
}
}
3.3.2サーブレットプロセッサ-ServletContextオブジェクト関数test-web.xml構成ファイル
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--<context-param>标签中是web工程的上下文参数,属于整个web工程-->
<!--<context-param>标签可以有多个,但是,全部都需要写在第一个<servlet>标签之上!!!-->
<context-param>
<param-name>username</param-name>
<param-value>username-root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>password-root</param-value>
</context-param>
<!--<context-param>标签下方,才能够是servlet类对应的<servlet标签>-->
<!--1.使用servlet标签给Tomcat配置动态servlet程序-->
<servlet>
<servlet-name>HttpServletProcessorAuto</servlet-name>
<servlet-class>com.wind.servlet.HttpServletProcessorAuto</servlet-class>
</servlet>
<!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
<servlet-mapping>
<servlet-name>HttpServletProcessorAuto</servlet-name>
<url-pattern>/httpServletAuto</url-pattern>
</servlet-mapping>
<!--3.使用b.html访问-->
</web-app>
3.3.3サーブレットプロセッサ-ServletContextオブジェクト関数テスト-フロントエンドHTTPリクエスト
3.3.4サーブレットプロセッサ-ServletContextオブジェクト関数テスト-バックエンドHTTP要求処理結果
3.3.5サーブレットプロセッサ-ServletContextオブジェクト関数のテスト-ServletContextオブジェクトにデータを格納するデモンストレーション
(1)サーブレットプロセッサ-HttpServletProcessorAuto2
public class HttpServletProcessorAuto2 extends HttpServlet {
private static final long serialVersionUID = -1924341414254477696L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
ServletContext servletContext = getServletConfig().getServletContext();
//向servletContext对象中设置值
System.out.println("HttpServletProcessorAuto2=servletContext对象,key1=:" + servletContext.getAttribute("key1"));
System.out.println("HttpServletProcessorAuto2=servletContext对象hashcode=:" + servletContext);
}
}
(2)サーブレットプロセッサ-HttpServletProcessorAuto
public class HttpServletProcessorAuto extends HttpServlet {
private static final long serialVersionUID = 2050438983192725273L;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
/**
* 默认执行的是doGet方法,故只重写doGet方法
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
ServletContext servletContext = getServletConfig().getServletContext();
//向servletContext对象中设置值
System.out.println("HttpServletProcessorAuto=servletContext对象设置值之前,key1=:" + servletContext.getAttribute("key1"));
servletContext.setAttribute("key1", "value1");
System.out.println("HttpServletProcessorAuto=servletContext对象设置值之后,key1=:" + servletContext.getAttribute("key1"));
System.out.println("HttpServletProcessorAuto=servletContext对象hashcode=:" + servletContext);
}
}
(3)web.xml構成ファイル
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--<context-param>标签中是web工程的上下文参数,属于整个web工程-->
<!--<context-param>标签可以有多个,但是,全部都需要写在第一个<servlet>标签之上!!!-->
<context-param>
<param-name>username</param-name>
<param-value>username-root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>password-root</param-value>
</context-param>
<!--<context-param>标签下方,才能够是servlet类对应的<servlet标签>-->
<!--1.使用servlet标签给Tomcat配置动态servlet程序-->
<servlet>
<servlet-name>HttpServletProcessorAuto</servlet-name>
<servlet-class>com.wind.servlet.HttpServletProcessorAuto</servlet-class>
</servlet>
<servlet>
<servlet-name>HttpServletProcessorAuto2</servlet-name>
<servlet-class>com.wind.servlet.HttpServletProcessorAuto2</servlet-class>
</servlet>
<!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
<servlet-mapping>
<servlet-name>HttpServletProcessorAuto</servlet-name>
<url-pattern>/httpServletAuto</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpServletProcessorAuto2</servlet-name>
<url-pattern>/httpServletAuto2</url-pattern>
</servlet-mapping>
<!--3.使用b.html访问-->
</web-app>
(4)運用結果
3.3.6 Webプロジェクト全体がTomcatサーバーにデプロイされた後、サーバー内の動的リソースと静的リソースがディスクに保存されます
(1)Webプロジェクト全体がTomcatサーバーにデプロイされた後、サーバー内の動的リソースと静的リソースがディスクに格納され、ディレクトリは次のようになります。
(2)また、ブラウザーで直接開いて、デプロイされているさまざまなリソースを表示できます。
(3)したがって、他の人は、ブラウザのTomcatサーバーで開発者によって展開されたさまざまなリソースにアクセスできます。アクセスプロセスは、おおよそ次のとおりです。