サーブレット
サーブレットとは何ですか?
サーブレット:サーバーアプレット:アプレット.Servletサーバは、サーバがクライアントプログラムに、クライアントと応答のための要求を受信します。
サーブレットJavaプログラムは、Webサーバやアプリケーションサーバ上で実行され、それは、データベースやアプリケーションサーバとWebブラウザまたはその他のHTTPクライアントからのHTTPリクエストの間の中間層として使用されています。サーブレットの使用は、あなたがデータベースや他のソースからレコードを示す、Webフォームからのユーザーデータを収集することができ、あなたはまた、動的なWebページを作成することができます。
実際には、サーブレットの概念は、狭いと幅広い分け。
狭いサーブレットは、小さなプログラムです。
実際には、広範なサーブレットはJavaクラスがServletインタフェースを実装するクラスです。
サーブレットの役割?
サーブレットは、次の主要なタスクを実行します。
- クライアントは、情報(情報送信要求ヘッダ)を読み出す。(クライアントからのデータ取得)
- 情報処理(処理されたデータ)
- 応答データ(返信データ:データサービス、ヘッダ情報に応答して)。
サーブレットを達成する方法:
サーブレット:Javaクラスは、サーブレットを実装するクラスです。
-
クラスを作成します
-
インタフェースサーブレットを実装
package com.sxt.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; public class ServletDemo01 extends HttpServlet { private static final long serialVersionUID = -2597540888550505998L; @Override public void init() throws ServletException { System.out.println("====init===="); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("====service===="); // 读取谁的? } @Override public void destroy() { System.out.println("====destroy===="); } }
-
登録サーブレット
-
アクセス方法を提供するように構成サーブレット
<!-- 注册Servlet --> <servlet> <!-- servlet别名 --> <servlet-name>ergou</servlet-name> <!-- Servlet类的全路径 --> <servlet-class>com.sxt.controller.ServletDemo01</servlet-class> </servlet> <!-- 配置Servlet 提供访问方式 --> <servlet-mapping> <!-- servlet别名 --> <servlet-name>ergou</servlet-name> <!-- servlet的访问地址 --> <url-pattern>/ergou.html</url-pattern> </servlet-mapping>
サーブレットのライフサイクル
サーブレットでは、サーブレットは、シングルトン各サーブレット・クラス、および1つのオブジェクトのみです。
INIT方法は、デフォルトでは、最初の訪問時に行われ、一度だけ実行し、通常はサーブレットの情報を初期化するために使用されます。
detory方法は、デフォルトでは、一度だけ破壊のためのサーブレットターゲットをサーバーが停止されたときに実行され、。
サービスメソッドは、アクセス要求があるたびに、各要求は、要求を処理するために実行されるデフォルトによって行わ。
INIT ---->サービス----> detoryこれは、サーブレットのライフサイクルです。
注意:
サーブレットはスレッドセーフではないので、サーブレットは、シングルトンである。サーブレットを使用した場合一般的に、メンバ変数の定義を推奨していません。
サーブレット実装プロセス
サーブレットの機能
受信クライアント情報:HttpServletRequestの
フォーム情報フォーム
package com.sxt.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestServlet extends HttpServlet {
private static final long serialVersionUID = 4858130557364545084L;
/**
* 当是 get请求时 执行
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
// String userName = req.getParameter("userName");
// String password = req.getParameter("password");
// String selectName = req.getParameter("selectName");
// String[] likes = req.getParameterValues("like");
// String sex = req.getParameter("sex");
// String textName = req.getParameter("textName");
//
// System.out.println("userName: "+userName);
// System.out.println("password: "+password);
// System.out.println("selectName: "+selectName);
// System.out.println("likes: "+Arrays.toString(likes));
// System.out.println("sex: "+sex);
// System.out.println("textName: "+textName);
}
/**
* 当是 post请求时 执行
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
System.out.println("doPost");
String userName = req.getParameter("userName");
String password = req.getParameter("password");
String selectName = req.getParameter("selectName");
String[] likes = req.getParameterValues("like");
String sex = req.getParameter("sex");
String textName = req.getParameter("textName");
System.out.println("userName: "+userName);
System.out.println("password: "+password);
System.out.println("selectName: "+selectName);
System.out.println("likes: "+Arrays.toString(likes));
System.out.println("sex: "+sex);
System.out.println("textName: "+textName);
// 获取所有表单数据的 name值
Enumeration<String> parameterNames = req.getParameterNames();
//遍历所有的name值
while(parameterNames.hasMoreElements()) {
System.out.println("name值:"+parameterNames.nextElement());
}
System.out.println("==========================");
//将 所有的请求参数 封装成一个Map 集合
Map<String, String[]> parameterMap = req.getParameterMap();
//获取所有的key
Set<String> names = parameterMap.keySet();
for (String name : names) {
System.out.println(name +":"+Arrays.toString(parameterMap.get(name)));
}
Map<String, Object> paramMap = paramMap(parameterMap);
System.out.println("转化后的:"+paramMap);
}
/**
* 将存储封装一个map
* @return
*/
public Map<String,Object> paramMap(Map<String, String[]> parameterMap){
Map<String,Object> map = new HashMap<String, Object>();
//获取所有的key
Set<String> keys = parameterMap.keySet();
for (String key : keys) {
String[] values = parameterMap.get(key);
Object value = null;
if(values != null &&values.length == 1 && values[0] != "") {
value = values[0];
}else if(values != null && values.length > 1) {
List<String> data = new ArrayList<String>();
for (String v : values) {
data.add(v);
}
value = data;
}
map.put(key,value);
}
return map;
}
}
スコープ情報を取得
package com.sxt.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AttributeServlet extends HttpServlet {
private static final long serialVersionUID = 4858130557364545084L;
/**
* 当是 get请求时 执行
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
//getAttribute(name值) : 根据name值从 request 作用域中 获取对应值
//getAttributeNames() : 获取作用域中,所有属性名称
//setAttribute(name,value) : 设置request作用域中的属性值
// 设置属性值
req.setAttribute("key1", "value1");
req.setAttribute("key2", "value2");
req.setAttribute("key3", "value3");
System.out.println(""+req.getAttribute("key1"));
Enumeration<String> attributeNames = req.getAttributeNames();
while(attributeNames.hasMoreElements()) {
System.out.println(attributeNames.nextElement());
}
}
/**
* 当是 post请求时 执行
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
追加のスコープオブジェクトの場合
package com.sxt.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ScopeServlet extends HttpServlet {
private static final long serialVersionUID = 4858130557364545084L;
/**
* 当是 get请求时 执行
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
//获取其他作用域
//获取session作用域
HttpSession session = req.getSession();
session.setAttribute("sessionKey", "sessionValue");
// 获取 application 作用域
ServletContext application = req.getServletContext();
application.setAttribute("applicationKey", "applicationValue");
}
/**
* 当是 post请求时 执行
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
ネットワーク情報要求へのアクセス
package com.sxt.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class HttpInfoServlet extends HttpServlet {
private static final long serialVersionUID = 4858130557364545084L;
/**
* 当是 get请求时 执行
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求的方法 : get post
String method = req.getMethod();
System.out.println(method);
// 获取请求的资源路径
String uri = req.getRequestURI();
System.out.println(uri);
// 获取请求URL地址 http://127.0.0.1:8080/sxt/servlet.do
String url = req.getRequestURL().toString();
System.out.println(url);
// 请求端口
int remotePort = req.getRemotePort(); //客户端端口
System.out.println(remotePort);
int localPort = req.getLocalPort(); //服务器本地端口
System.out.println(localPort);
String remoteHost = req.getRemoteHost(); //客户端IP
String localAddr = req.getLocalAddr(); // 服务器IP
System.out.println("remoteHost:"+remoteHost);
System.out.println("localAddr:"+localAddr);
//设置请求的编码
req.setCharacterEncoding("UTF-8");
//获取请求头信息 : Map : key -- value
String language = req.getHeader("Accept-Language");
System.out.println(language);
}
/**
* 当是 post请求时 执行
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
内部リダイレクトと転送
//resp.sendRedirect("地址"); 重定向
resp.sendRedirect("scope.jsp");
// 内部转发 req.getRequestDispatcher("scope.jsp").forward(req, resp);
req.getRequestDispatcher("scope.jsp").forward(req, resp);
ファイル情報の取得
req.getPart("name") : 根据name值,获取对应part数据
クライアントへの応答データ:HttpServletResponseの
package com.sxt.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ResponseServlet extends HttpServlet{
private static final long serialVersionUID = -2958733507466419241L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取打印流
//resp.getWriter();
// 获取输出流
resp.getOutputStream();
// 设置 cookie
resp.addCookie(new Cookie("name","value"));
//设置编码
resp.setCharacterEncoding("UTF-8");
//设置响应头信息
resp.addHeader("token", "xxxxx");
}
}
MVCモデル:
MVCは、最初に、Mは、ビジネスモデル、ユーザインタフェース手段Vデスクトッププログラム中に存在する、Cはコントローラであり、MVCの使用目的は、
同じプログラムを使用することができるように、コードの分離を達成するために、VおよびMであります異なる形。例えば、統計の数は、別々にすることができ
表すために、ヒストグラム、円グラフ。目的が変更M、Vが同期されるべきであるならば、C MとVシンクの存在を保証することです。
モデル-ビュー-コントローラ(MVC)はデザインパターンのプログラミング言語Smalltalkの-80発明として、1980年代にゼロックスPARCで、広く使用されています。これは、OracleのSunのJava EEプラットフォームの設計パターンとして推奨されるようになった、とColdFusionとPHP開発者のより多くの使用による歓迎しました。モデル-ビュー-コントローラパターンは、それは多くの利点があり、便利なツールキットですが、いくつかの欠点があります。
:Webアプリケーションのデザインパターンを作成し、MVCがある( - -モデルビューコントローラモデルビューコントローラ)MVC使用
モデル(モデル)(データベース・レコード・リストなど)のアプリケーション(データモデル)のコアを表します。
ビュー(ビュー)表示データ(データベースレコード)。
(データベースのレコードに書き込まれる)入力および出力するためのコントローラ(制御装置)。
MVCモデルHTML、CSSおよびJavaScriptを完全に制御を提供しながら。
モデル:アプリケーションを処理するためには、あるアプリケーション・データ・ロジックの一部。
データ論理部分:データの検証、データの永続性に関連する処理。
ビュー(Viewは):アプリケーションで処理データの一部。
データ処理:表示データ、入力データ(インタフェース)。
コントローラ(制御装置):アプリケーションは、ユーザインタラクション処理の一部。
相互作用:にクライアントから送信された情報は、クライアントの応答を受信するための相互作用入力と出力...
JavaWebの開発では、一般的に使用され、様々な技術を用いての長所と短所:
サーブレットは、制御層として作用します。
JSP層は、図のように作用します
モデルに関連するJavaコード。
MVCモデルの三関係
MVCモデルの利点
- カップリング手順を低減
- コードの再利用性の向上
- プログラムの保守性を向上させます
- プログラムの可読性を向上させます
- スケーラビリティの向上
- 開発効率を向上させます
しかし、プログラム構造の複雑さを増します。
開発の発展に伴い、MVCモデルからの進化:
MVP:携帯端末
MVVM:vue.js
サーブレットの概要
コンセプト:
...サーバのアプレットがクライアントのデータ受信のために、サーバ上のアプレットでアプレットを実行し、クライアントが.Servlet狭く、広範囲のポイントに応答することができます。
サーブレットアプレット:狭義の
大まか:Javaで、Servletインタフェースの登録設定を実装しています。
ライフサイクル:
INIT初期化が一度実行されます
サービスのサービス提供は、N回実行しました
一度実行destroyがDestoryは
サーブレットは、メンバ変数を定義しない、シングルトン、非スレッドセーフです。