要約を選択

サーブレット

サーブレットとは何ですか?

  サーブレット:サーバーアプレット:アプレット.Servletサーバは、サーバがクライアントプログラムに、クライアントと応答のための要求を受信します。

  サーブレットJavaプログラムは、Webサーバやアプリケーションサーバ上で実行され、それは、データベースやアプリケーションサーバとWebブラウザまたはその他のHTTPクライアントからのHTTPリクエストの間の中間層として使用されています。サーブレットの使用は、あなたがデータベースや他のソースからレコードを示す、Webフォームからのユーザーデータを収集することができ、あなたはまた、動的なWebページを作成することができます。

  実際には、サーブレットの概念は、狭いと幅広い分け。

  狭いサーブレットは、小さなプログラムです。

  実際には、広範なサーブレットはJavaクラスがServletインタフェースを実装するクラスです。

サーブレットの役割?

サーブレットは、次の主要なタスクを実行します。

  1. クライアントは、情報(情報送信要求ヘッダ)を読み出す。(クライアントからのデータ取得)
  2. 情報処理(処理されたデータ)
  3. 応答データ(返信データ:データサービス、ヘッダ情報に応答して)。

サーブレットを達成する方法:

サーブレット:Javaクラスは、サーブレットを実装するクラスです。

  1. クラスを作成します

  2. インタフェースサーブレットを実装

    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====");
    	}
    
    }
    
  3. 登録サーブレット

  4. アクセス方法を提供するように構成サーブレット

      <!-- 注册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モデルの利点

  1. カップリング手順を低減
  2. コードの再利用性の向上
  3. プログラムの保守性を向上させます
  4. プログラムの可読性を向上させます
  5. スケーラビリティの向上
  6. 開発効率を向上させます

しかし、プログラム構造の複雑さを増します。

開発の発展に伴い、MVCモデルからの進化:

  MVP:携帯端末

  MVVM:vue.js

サーブレットの概要

コンセプト:

  ...サーバのアプレットがクライアントのデータ受信のために、サーバ上のアプレットでアプレットを実行し、クライアントが.Servlet狭く、広範囲のポイントに応答することができます。

 サーブレットアプレット:狭義の

 大まか:Javaで、Servletインタフェースの登録設定を実装しています。

ライフサイクル:

INIT初期化が一度実行されます

  サービスのサービス提供は、N回実行しました

  一度実行destroyがDestoryは

サーブレットは、メンバ変数を定義しない、シングルトン、非スレッドセーフです。

おすすめ

転載: www.cnblogs.com/lyang-a/p/12562788.html