13、サーブレット入門
25351 ワード
基本的な知識:
リクエスト
HttpServiceletRequestオブジェクト:リクエストオブジェクト.リクエスト情報を取得します.
httpレスポンス:サーバ->ブラウザ側
HttpServeretResponseオブジェクト:応答オブジェクト.レスポンス情報を設定します.
content-Type作用
手動でサーブレットを開発
手順:
アクセスの原理:
マップパス
注意:
ケース:
デフォルトのパス
servletのデフォルトパス(/)はtomcatサーバに組み込まれたパスです.このパスはDefaultService(デフォルトのサーブレット)に対応しています.このデフォルトのサーブレットの役割は、Webアプリケーションの静的リソースファイルを解析することです.質問:URL入力http://localhost:8080/day10/index.htmlファイルの読み込み方法
ライフサイクル
導入
サーブレットのライフサイクル:servletクラスオブジェクトはいつ作成され、いつメソッドが呼び出され、いつ破棄されます.サーブレットプログラムのライフサイクルはtomcatサーバによって制御されます!!!
サーブレットの重要な4つのライフサイクルメソッド
擬似コードプレゼンテーションservletのライフサイクル
自動ロード
サーブレットの自動ロード
サーブレットのマルチスレッド同時問題
注:servletオブジェクトはtomcatサーバで単一インスタンスマルチスレッドです.
servletはマルチスレッドであるため、メンバー変数などのservletの共有データに複数のservletのスレッドが同時にアクセスすると、スレッドセキュリティの問題が発生する可能性があります.解決策:
HttpServeretのinit
2つのinitソースのクラスは異なります
サーブレット学習:
サーブレットコンフィグオブジェクト
さぎょう
オブジェクトの作成と取得
servletの初期化パラメータ構成
注意:servletのパラメータは現在のこのsevletでしか取得できません!!!api:サーブレットコンフィグのAPI:
サーブレットContextオブジェクト
サーブレットContextオブジェクトを導入します.サーブレットというコンテキストオブジェクトです.現在のWebアプリケーション環境を表します.1つのWebアプリケーションに1つのサーブレットContextオブジェクトしかありません.オブジェクトの作成と取得
サーブレットContextオブジェクトのコアAPI(役割)
Webアプリケーションパスを取得
Webアプリケーションの初期化パラメータ(グローバル)を得る
ドメインオブジェクトに関するメソッドドメインオブジェクト:データを保存し、データを取得する役割を果たします.異なるダイナミックリソース間でデータを共有できます.
サーブレットContextはドメインオブジェクトです!!!
転送RequestDispatcher getRequestDispatcher(java.lang.String path)
ケース:
ブラウザ・タイプの取得方法
不正なリンク事例の取得
GetとPostのパラメータを取得
タイム・リフレッシュ
リクエスト
1)http : 。
2)http : ->
:
( (GET/POST) (URI) http (http1.1))
( 。 host、user-agent、referer)
(POST )
HttpServiceletRequestオブジェクト:リクエストオブジェクト.リクエスト情報を取得します.
:request.getMethod() request.getRequestURI/getRequestURL() request.getProtocol();
: request.getHeader("name") request.getHeaderNames()
: request.getInputStream()
:(GET POST)
request.getParameter("name")
request.getParameterValues("name");
request.getParameterNames()
httpレスポンス:サーバ->ブラウザ側
:
(http )
: 200 302 404 500
( location( 302 )、
refresh( )、content-type、
content-disiposition( ))
HttpServeretResponseオブジェクト:応答オブジェクト.レスポンス情報を設定します.
: response.setStatus();
: response.setHeader("name","value")
:
(PrintWriter) response.getWriter().writer();
(OutputStream)response.getOutputStream().writer();
content-Type作用
//response.setCharacterEncoding("utf-8");
/** * */
//response.setHeader("content-type", "text/html");
response.setContentType("text/html;charset=utf-8");// 。
手動でサーブレットを開発
手順:
1) java , HttpServlet
2) doGet doPost
3)Servlet tomcat !!
3.1 servlet class WEB-INF/classes
3.2 web.xml
<!-- servlet -->
<!-- servlet -->
<servlet>
<!-- servlet , 。 -->
<servlet-name>FirstServlet</servlet-name>
<!-- servlet : + -->
<servlet-class>gz.itcast.a_servlet.FirstServlet</servlet-class>
</servlet>
<!-- servlet -->
<servlet-mapping>
<!-- servlet , !! -->
<servlet-name>FirstServlet</servlet-name>
<!-- servlet ( servlet ) -->
<url-pattern>/first</url-pattern>
</servlet-mapping>
アクセスの原理:
tomcat , webapps web web.xml 。
http://: http
localhost: hosts IP
127.0.0.1
8080: tomcat
/day10 tomcat webapps day10
/first 。
1) day10 web.xml url-pattern (/first)
2) url-pattern, servlet-name web.xml servlet
3) , servlet servlet-class :
: gz.itcast.a_servlet.FirstServlet
:
a) FirstServlet
b) FirstServlet
マップパス
/first http://localhost:8080/day10/first
/itcast/demo1 http://localhost:8080/day10/itcast/demo1
/* http://localhost:8080/day10/
/itcast/* http://localhost:8080/day10/itcast/
*. http://localhost:8080/day10/ .do
*.do
*.action
*.html( )
注意:
1)url-pattern / , * 。 ,itcast/*.do 。
2) , /itcast/*.do
3) URL servlet :
3.1 。( )
3.2 url-pattern !!!
ケース:
:
Servlet1 /abc/*
Servlet2 /*
Servlet3 /abc
Servlet4 *.do
:
URL “/abc/a.html”,“/abc/*” “/*” , servlet
Servlet Servlet1。
URL “/abc” ,“/abc/*” “/abc” , servlet
Servlet Servlet3。
URL “/abc/a.do” ,“/abc/*” “*.do” , servlet
Servlet Servlet1。
URL “/a.do” ,“/*” “*.do” , servlet
Servlet Servlet2。
URL “/xxx/yyy/a.do” ,“/*” “*.do” , servlet
Servlet Servlet2。
デフォルトのパス
servletのデフォルトパス(/)はtomcatサーバに組み込まれたパスです.このパスはDefaultService(デフォルトのサーブレット)に対応しています.このデフォルトのサーブレットの役割は、Webアプリケーションの静的リソースファイルを解析することです.質問:URL入力http://localhost:8080/day10/index.htmlファイルの読み込み方法
1) day10 web.xml url-pattern。
2) url-pattern, tomcat DefaultServlet
3)DefaultServlet day10 index.html 。
4) , , 。
5) , 404 。
: , 。
ライフサイクル
導入
サーブレットのライフサイクル:servletクラスオブジェクトはいつ作成され、いつメソッドが呼び出され、いつ破棄されます.サーブレットプログラムのライフサイクルはtomcatサーバによって制御されます!!!
サーブレットの重要な4つのライフサイクルメソッド
: servlet 。 , servlet servlet 1 。 servlet tomcat 。
init : servlet 。 1 。
service : ( doPost、doGet)。 n 。
destroy :
servlet 。 web servlet 。
1 。
擬似コードプレゼンテーションservletのライフサイクル
Tomtcat :
1) servlet-class , : gz.itcast.a_servlet.FirstServlet
2) FirstServlet
2.1
Class clazz = class.forName("gz.itcast.a_servlet.FirstServlet");
2.2
Object obj = clazz.newInstance(); ---1.servlet
3) ServletConfig , init
3.1
Method m = clazz.getDeclareMethod("init",ServletConfig.class);
3.2
m.invoke(obj,config); --2.servlet init
4) request,response , service
4.1
Methodm m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);
4.2
m.invoke(obj,request,response); --3.servlet service
5) tomcat web , destroy
5.1
Method m = clazz.getDeclareMethod("destroy",null);
5.2
m.invoke(obj,null); --4.servlet destroy
自動ロード
サーブレットの自動ロード
, servlet servlet 。 servlet init
sevrlet 。
servlet : web !!!
servlet , <load-on-startup> !!
<servlet>
<servlet-name>LifeDemo</servlet-name>
<servlet-class>gz.itcast.c_life.LifeDemo</servlet-class>
<!-- servlet -->
<load-on-startup>1</load-on-startup> : , !!
</servlet>
サーブレットのマルチスレッド同時問題
注:servletオブジェクトはtomcatサーバで単一インスタンスマルチスレッドです.
servletはマルチスレッドであるため、メンバー変数などのservletの共有データに複数のservletのスレッドが同時にアクセスすると、スレッドセキュリティの問題が発生する可能性があります.解決策:
1) ( synchronized )
2) servlet 。 , 。 。
( , !!), 。
/** * servlet */
public class TheradDemo extends HttpServlet {
int count = 1;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
synchronized (TheradDemo.class) {// 。
response.getWriter().write(" "+count+" "); // 1 , 2
// 1 count++
/*try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }*/
count++;
}
}
}
HttpServeretのinit
2つのinitソースのクラスは異なります
/** * init init * */
public class InitDemo extends HttpServlet {
/** * init * servlet , tomcat */
/** * : , init */
/*@Override public void init(ServletConfig config) throws ServletException { System.out.println(" init "); }*/
/** * init * servlet 。 Sun , servlet 。 */
@Override
public void init() throws ServletException {
System.out.println(" init ");
}
}
サーブレット学習:
HttpServletRequest :
HttpServletResponse :
ServletConfig servlet
ServletContext ; servlet
サーブレットコンフィグオブジェクト
さぎょう
ServletConfig : servlet 。 web ServletConfig ( Servlet ServletConfig )
オブジェクトの作成と取得
: servlet , init 。
: init !!!
servletの初期化パラメータ構成
<servlet>
<servlet-name>ConfigDemo</servlet-name>
<servlet-class>gz.itcast.f_config.ConfigDemo</servlet-class>
<!-- : web , ServletConfig -->
<init-param>
<param-name>path</param-name>
<param-value>e:/b.txt</param-value>
</init-param>
</servlet>
注意:servletのパラメータは現在のこのsevletでしか取得できません!!!api:サーブレットコンフィグのAPI:
java.lang.String getInitParameter(java.lang.String name)
java.util.Enumeration getInitParameterNames()
ServletContext getServletContext() servlet
java.lang.String getServletName() servlet
サーブレットContextオブジェクト
サーブレットContextオブジェクトを導入します.サーブレットというコンテキストオブジェクトです.現在のWebアプリケーション環境を表します.1つのWebアプリケーションに1つのサーブレットContextオブジェクトしかありません.オブジェクトの作成と取得
: web ServletContext 。
: ServletConfig getServletContext
:
ServletConfig
public void init( ServletConfig config,ServletContext context ){
ServletConfig
ServletContext ;
}
Sun
1) ServletContext ServletContext context = new ServletContext()
2) ServletConfig ServetConfig config = new ServletConfig();
config.setServletContxt(context);
class ServletConfig{
ServletContext context;
public ServletContext getServletContxt(){
return contxt;
}
}
public void init( ServletConfig config ){
ServletConfig
ServletConfig ServletContext
SerlvetContext context = config.getServletContext();
}
サーブレットContextオブジェクトのコアAPI(役割)
java.lang.String getContextPath() -- web
java.lang.String getInitParameter(java.lang.String name) -- web
java.util.Enumeration getInitParameterNames()
void setAttribute(java.lang.String name, java.lang.Object object) --
java.lang.Object getAttribute(java.lang.String name)
void removeAttribute(java.lang.String name)
RequestDispatcher getRequestDispatcher(java.lang.String path) -- ( )
java.lang.String getRealPath(java.lang.String path) -- web
java.io.InputStream getResourceAsStream(java.lang.String path)
Webアプリケーションパスを取得
java.lang.String getContextPath()
Webアプリケーションの初期化パラメータ(グローバル)を得る
java.lang.String getInitParameter(java.lang.String name) -- web
java.util.Enumeration getInitParameterNames()
web web servlet !!!
ドメインオブジェクトに関するメソッドドメインオブジェクト:データを保存し、データを取得する役割を果たします.異なるダイナミックリソース間でデータを共有できます.
:
Servlet1 Servlet2
name=eric
response.sendRedirect("/Servlet2?name=eric") String request.getParameter("name");
Student
1: , 。 : 。
2: , : !!!!!
サーブレットContextはドメインオブジェクトです!!!
:void setAttribute(java.lang.String name, java.lang.Object object)
: java.lang.Object getAttribute(java.lang.String name)
: void removeAttribute(java.lang.String name)
ServletContext : web !!!
:
HttpServletRequet
ServletContext
HttpSession
PageContext
転送RequestDispatcher getRequestDispatcher(java.lang.String path)
1)
a)
b) web
c) , request
2)
a) , 。
b) web , web , 。
c) , request 。
: request , !!!
ケース:
ブラウザ・タイプの取得方法
public class RequestDemo3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// : user-agent
String userAgent = request.getHeader("user-agent");
System.out.println(userAgent);
//
if(userAgent.contains("Firefox")){
response.getWriter().write(" ");
}else if(userAgent.contains("Chrome")){
response.getWriter().write(" ");
}else if(userAgent.contains("Trident")){
response.getWriter().write(" IE ");
}else{
response.getWriter().write(" , ");
}
}
}
不正なリンク事例の取得
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// referer
String referer = request.getHeader("referer");
System.out.println("referer="+referer);
/** * : * 1) referer=null * 2) */
if(referer==null || !referer.contains("/servlet01/adv.html")){
response.getWriter().write(" , 。<a href='/day09/adv.html'> </a>");
}else{
//
response.getWriter().write(" ...");
}
}
GetとPostのパラメータを取得
public class RequestDemo5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/** * * 。POST , POST ! * GET URI , GET !!! */
request.setCharacterEncoding("utf-8");
/* System.out.println("GET "); // GET String value = request.getQueryString(); System.out.println(value);*/
/** * */
System.out.println(request.getMethod()+" ");
//getParameter(name): ( )
String name = request.getParameter("name");
/** * (iso-8859-1 -> utf-8 ) */
/*if("GET".equals(request.getMethod())){ name = new String(name.getBytes("iso-8859-1"),"utf-8"); }*/
String password = request.getParameter("password");
/*if("GET".equals(request.getMethod())){ password = new String(password.getBytes("iso-8859-1"),"utf-8"); }*/
System.out.println(name+"="+password);
System.out.println("=============================");
Enumeration<String> enums = request.getParameterNames();
while( enums.hasMoreElements() ){
String paramName = enums.nextElement();
// hobit, getParameterValues
if("hobit".equals(paramName)){
/** * getParameterValues(name): ( ) */
System.out.println(paramName+":");
String[] hobits = request.getParameterValues("hobit");
for(String h: hobits){
/* if("GET".equals(request.getMethod())){ h = new String(h.getBytes("iso-8859-1"),"utf-8"); }*/
System.out.print(h+",");
}
System.out.println();
// hobit, getParameter
}else{
String paramValue = request.getParameter(paramName);
/* if("GET".equals(request.getMethod())){ paramValue = new String(paramValue.getBytes("iso-8859-1"),"utf-8"); }*/
System.out.println(paramName+"="+paramValue);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/* System.out.println("POST "); InputStream in = request.getInputStream(); byte[] buf = new byte[1024]; int len = 0; while( (len=in.read(buf))!=-1 ){ System.out.println(new String(buf,0,len)); }*/
/** * */
/*System.out.println("POST "); // String name = request.getParameter("name"); String password = request.getParameter("password"); System.out.println(name+"="+password); System.out.println("============================="); Enumeration<String> enums = request.getParameterNames(); while( enums.hasMoreElements() ){ String paramName = enums.nextElement(); String paramValue = request.getParameter(paramName); System.out.println(paramName+"="+paramValue); }*/
// doGet , doGet doPost , doGet
this.doGet(request, response);
}
}
タイム・リフレッシュ
/** * - */
public class ResponseDemo3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/** * * : refresh , refresh */
//response.setHeader("refresh", "1"); // 1
/** * n */
response.setHeader("refresh", "3;url=/day09/adv.html");// 3 adv.html
}
}