約 3,735,059 件
https://w.atwiki.jp/dotcom/pages/27.html
Cvsからcheckoutしたパッケージをjavacでコンパイル。 「パッケージ javax.servlet は存在しません」なんていわれちゃったよどうしよう。 ググってみた 原因 解決 ググってみた 「パッケージ javax.servlet は存在しません」というエラーについて - Java Solution ANTを使っているとしたら、build.bat(build.sh)の中でCLASSPATHを上書きしてるのでその辺を確認するのもポイントかと思います。 うううう。 まさにそのとおり。 EclipseからAntプラグインつかってjavacしてます。 しかもとってきた先はCvs。 原因 Tomcatのjavax.servletのパッケージの場所を指定してあげればいいのね。 そういえばコマンドプロンプトでjavacした時は直接指定してたかも。 あそこで横着したのがいかんかったかな。 解決 まだしてないの。。。
https://w.atwiki.jp/katsuhiro/pages/30.html
サーブレットメモ JSPも1つのサーブレット(実行時にサーブレットに変換される) ライフサイクル サーブレットは「シングルインスタンス・マルチスレッド」モデルweb.xmlに servlet で登録された単位でインスタンスが生成される web-app (略) (中略) servlet servlet-name AAAServlet /servlet-name servlet-class xxxx.AAAServlet /servlet-class /servlet servlet servlet-name BBBServlet /servlet-name servlet-class xxxx.BBBServlet /servlet-class /servlet ※上記の場合、AAAServletのインスタンスが1つ、BBBServletのインスタンスが1つ生成される web-app (略) (中略) servlet servlet-name AAAServlet /servlet-name servlet-class xxxx.AAAServlet /servlet-class /servlet servlet servlet-name BBBServlet /servlet-name servlet-class xxxx.AAAServlet /servlet-class /servlet ※上記の場合も、AAAServletのインスタンスが1つ、BBBServletのインスタンスが1つ生成される。ただし、実体は同じクラスのインスタンスが別名で2つ存在することになる。 サーブレット内にdoメソッドと同列に宣言された変数(インスタンス変数)に設定された値は、複数リクエストで共有されるインスタンス変数は原則として読み取り専用のデータ以外を扱うべきでない 複数のリクエスト間でインスタンス変数以外で情報を共有したい場合は、セッション属性やアプリケーション属性を利用すべき。 お約束 下記のクラスをimportするjava.io.IOException javax.servlet.ServletException javax.servlet.http.HttpServlet javax.servlet.http.HttpServletRequest javax.servlet.http.HttpServletResponse HttpServletを継承する サーブレットの起点は下記のメソッドdoDelete doGet doHead doOptions doPost doPut doTrace 暗黙オブジェクト 暗黙オブジェクト 元となるクラス/インタフェース名 作成方法 application javax.servlet.ServletContext ServletContext application = this.getServletContext(); config javax.servlet.ServletConfig SevletConfig config = this.getServletConfig(); exception java.lang.Throwable - out javax.servlet.jsp.JspWriter PrintWriter out = response.getWriter(); session javax.servlet.http.HttpSession HttpSession session = request.getSession(); request javax.servlet.ServletRequest(javax.servlet.HttpServletRequest) doメソッドの引数として引き渡される response navax.servlet.ServletResponse(javax.servlet.HttpServletResponse) doメソッドの引数として引き渡される JSPの動作手順 JSPを作成する アプリケーションルート配下の任意のフォルダに配置する(/WEB-INF, /META-INFを除く) ブラウザからパスを指定して呼び出す サーブレットの動作手順 サーブレットクラスを作成する(.javaファイル) コンパイルする .classファイルをパッケージ構造に従った形で/WEB-INF/classes配下に配置する /WEB-INF/web.xml にサーブレットを登録する ※web.xmlを変更した場合、必ずTomcatを再起動する サーブレットとJSPの連携 処理転送(forward) リダイレクト処理一旦レスポンスをクライアントに返し、自動的にサーバにリクエストを発生させる仕組み クライアントとサーバ間で2回やりとりが発生する forward処理サーバ内で処理を転送する クライアントとサーバ間のやりとりは1回だけ リクエスト属性を引き継ぐことができる インクルード処理(include) サーブレット1によって処理される インクルードされたサーブレットBに渡される インクルードされたサーブレットBの処理が完了した後に元のサーブレットAに返される データのスコープ アプリケーション属性アプリケーション内の全ファイルで共有(ユーザ間で共有) セッション属性アプリケーション内の全ファイルで共有(同一ユーザ) リクエスト属性1つのリクエスト処理内で共有 forwardによりデータ引継ぎ可能 ページ属性同じページ内のみ(1サーブレット/1JSP内のみ) ■サーブレットクラスの挙動 1. サーブレットクラスのロード 2. initメソッド実行(初期化処理) ⇒サーブレットの初回起動時、アンロード(更新)時に実行される 3. serviceメソッドの振り分け 4. doメソッドの実行(実処理) 5. destroyメソッド実行(終了処理) ⇒サーブレットの初回起動時、アンロード(更新)時、コンテナ終了時に実行される ※リクエストのたびに実行されるのは、3と4。 ※サーブレットの更新時は、5 → 2の流れ。 ※デフォルトでは、initメソッドは、コンテナ起動時ではなく、サーブレットクラスが初めて呼び出されたタイミングで実行される。 ⇒コンテナ起動時にinitを実行するためには、web.xmlの servlet 内に load-on-startup を指定する ■Webアプリでのサーブレットクラスの役割 MVCのC(Controller)であること。 処理呼び出しの流れを知っている。 JavaBeansクラスを次々と呼び出す。 ■JavaBeansのお約束 JavaBeansとは「クラスをより汎用的に部品化できるように、ちょっとしたルールづけをしたもの」 引数の無いコンストラクタを持つこと プロパティを参照/更新するためのアクセサメソッド(set/getメソッド)を定義すること ⇒外部から直接アクセスできるフィールドを持たないこと ⇒プロパティに対する読み書きが制御できる ⇒値の参照/更新時に任意の処理を記述できる Serializableインタフェースを実装すること ⇒そのままではデータベースやファイル、ネットワーク上でやり取りすることのできないオブジェクト形式のデータを、中性的なバイト列に変換/復元させる機能。 ⇒データ共有を目的としたJavaBeansでは必要な機能 ■フロントコントローラ サーブレットとURLが 1 n の関係にあるサーブレット servlet servlet-name PathServlet /servlet-name servlet-class xxxx.PathServlet /servlet-class /servlet (中略) servlet-mapping servlet-name PathServlet /servlet-name url-pattern xxxx.PathServlet/* /url-pattern /servlet-mapping [呼び出しURL] 1. ~/xxxx/PathServlet/Book 2. ~/xxxx/PathServlet/News 3. ~/xxxx/PathServlet/Info [処理の流れ] 1. PathServletが呼び出される 2. request.getPathInfoで残りのパスを取得する 3. パスの中身を見て、Bookクラス、Newsクラス、Infoクラスを呼び分ける ※/Book/history などと、スラッシュ区切りで情報を増やしてもかまわない ⇒その場合はgetPathInfoをした後、手動で解析する必要がある。
https://w.atwiki.jp/n-3104/pages/13.html
ファイルダウンロード ファイルアップロード ファイルダウンロード 久しぶりに作ってみたら、30分ほどかかってしまったので、履歴として残しておこう。 それにしても、IEは挙動が安定していない。Content-Dispositionをattachmentにしていたにも関わらず、直接ServletのURLにアクセスしたらinlineとして解釈され、別の画面からPOSTする形でアクセスしたらattachmentととして動作した。その上、一度attachmentとして動作した後であれば直接アドレスにURLを入力してもattachmentとして動作したし。。やれやれだ。 いい機会なので、HTTPのResponseヘッダについても調べておこう。 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FileDownloadServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = "test.txt"; // ヘッダの設定 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); // 出力 ServletOutputStream out = response.getOutputStream(); System.out.println(new File(".").getAbsolutePath()); FileInputStream in = new FileInputStream("ファイルのフォルダパス" + fileName); byte[] buf = new byte[4096]; int size; while ((size = in.read(buf)) *= -1) { out.write(buf, 0, size); } in.close(); out.close(); } } 参考:http //www.stackasterisk.jp/tech/java/download01_01.jsp ファイル名に日本語を使いたい場合はエンコーディングが必要になる。 ファイルアップロード Commons FileUpload を使えば簡単に出来る。使い方は User Guide を見れば大体つかめる。 通常のフィールドがrequestからgetParameter出来ないのが面倒なくらい。Strutsを使うとこの辺を楽にしてくれる。 ちなみに、Commons FileUpload には Commons IO が必要。 import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { // ContentTypeを設定 response.setContentType("text/html; charset=Windows-31J"); // Check that we have a file upload request boolean isMultipart = ServletFileUpload.isMultipartContent(request); // Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request List /* FileItem */items = upload.parseRequest(request); // Process the uploaded items Iterator iter = items.iterator(); String fileName = null; while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { // 通常のフィールドの処理 } else { // ファイルの処理 fileName = new File(item.getName()).getName(); File uploadedFile = new File("C /workspace/Servlet/upload/" + fileName); item.write(uploadedFile); } } // 出力用PrintWriterを取得 PrintWriter out = response.getWriter(); // 出力 out.println(" html "); out.println(" head "); out.println(" title upload /title "); out.println(" /head "); out.println(" body "); out.println("アップロードに成功しました。 br "); out.println("ファイル名 " + fileName); out.println(" /body "); out.println(" /html "); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } } 参考 http //commons.apache.org/fileupload/
https://w.atwiki.jp/tonojava/pages/14.html
Servletに必要なインターフェースクラス javax.servlet.Servlet インターフェース 直接的、もしくは間接的に必ず、このインターフェースを実装している必要がある。 このインターフェースには、Servletプログラムが必ず実装していなければいけない メソッドが定義されている。 javax.servlet.GenericServlet クラス javax.servlet.Servletインターフェースを実装したクラスで、 プロトコルに依存しないServletプログラムを作成する際に使用。 javax.servlet.http.HttpServet クラス javax.servlet.GenericServletクラスを継承したクラスで、Httpプロトコルベースの Servletプログラムを作成する際に使用。 通常このクラスを継承してServletプログラムを作成する。 HttpServletクラスは抽象クラスのため、このクラスを継承したServletプログラムは 必ず1つのメソッドをオーバーライドする必要がある。 Servletのライフサイクル init()メソッドの呼び出し Servletプログラムに初めてリクエストが会ったときにサーブレットコンテナ(Tomcat)は、 Servletプログラムを初期化する。その際にinitメソッドが呼び出される。 そのため、データベースの接続などServletプログラムを実行する前に事前設定が必要な 処理をinitメソッドに記述しておく。 initメソッドは初めてリクエストが会ったときに一度だけ呼び出される。 service(HttpServletRequest,HttpServletResponse)メソッドの呼び出し Servletプログラムにリクエストがある度にserviceメソッドが呼び出される。 serviceメソッドはリクエストのHttpメソッドを解析し、対応するdoXxxメソッドを呼び出す。 HttpメソッドとはGETメソッドやPOSTメソッドのこと。 doXxx(HttpServletRequest,HttpServletResponse)メソッドの呼び出し HttpServletクラスには以下のdoXxxメソッドが定義されている。 HttpServletクラスを継承したServletプログラムは通常いずれかの doXxxメソッドをオーバーライドする。通常はdoGetメソッドか、doPostメソッドをオーバーライドする。 ※serviceメソッドをオーバーライドした場合は、doXxxメソッドは呼び出されない。 呼び出す場合は、serviceメソッド内で意識的にdoXxxメソッドを呼び出す必要がある。 doGetとdoPost doGet→URLからキーワード(変数)を扱う方法。 doPost→ページからキーワードを扱う方法 クライアントからのデータ取得 データの取得にはHttpServletRequestインターフェースを使用 ☆各メソッドについて 【戻り型】【メソッド】【解説】 public String/getParameter(String パラメータ名を指定 )/パラメータがなければnullが返る。 public String[]/getParameterValues(String パラメータが複数ある場合 )/パラメータがなければnullが返る。 public Emumeration/getParameterNames()/クライアントから送信される全てのパラメータのパラメータ名を取得 public void/setCharacterEncoding(String)/エンコード方式を引数に指定したエンコード方式に置き換える。 パラメータを取得する前に指定。 スコープについて データの有効範囲のこと。Servletのスコープは3つある。 【Session】→Httpセッション間でデータを共有したい場合 【application】→webアプリケーション間でデータを共有したい場合 【request】→リクエスト間でデータを共有したい場合 ☆各スコープのデータ操作方法 【戻り型】【メソッド】【解説】 object/getAttribute(String)/引数に指定されたデータ名に該当するデータ値を返す。 Emumeration/getAttributeNames()/スコープで利用可能な全てのデータ名を返す void/removeAttibute(String)/引数に指定されたデータ名をスコープから削除する。 void/setAttribute(String,Object)/第一引数にデータ名、第二引数にデータ値を指定し、スコープにデータを登録する。 セッション管理 異なるページ間で同一のクライアントを認識する方法。 Servletプログラムはセッション管理にクライアントごとに割り当てる。 セッションIDを使用。 セッションIDは、不規則な英数字の組み合わせを10数桁以上の組み合わせで作成され、 このセッションIDをサーバは初回アクセス時にクライアントに送信し、クライアントは受け取ったセッションIDをリクエスト時に 一緒に送信する。 これで、サーバはクライアントを一意に識別することができ、1セッションの間、クライアントの情報を保持することができる。 通常、セッションIDはクッキーに保存される。 クライアントのクッキーが利用できない場合、URLリライティング(URLにセッションIDを含める)を行う。 ☆セッションタイムアウトを適切に設定する。 ⇒一定時間リクエストが無かったセッションは切断する必要がある。 ☆使用済みのセッションは必ず破棄する。 ⇒ログアウトなどの操作をユーザが行った場合、セキュリティ的な観点からも必ず、セッションの破棄を行う。
https://w.atwiki.jp/mekagazira/pages/15.html
javacでのサーブレットのコンパイル Antでのコンパイル javaでAPIを作成する メモ javacでのサーブレットのコンパイル c \Tomcat6_0_16\webapps\anttest javac -d WEB-INF/classes -cp .;"C \Tomcat6_0_16\lib/servlet-api.jar" src/HelloWorldServlet.java Antでのコンパイル Antのセットアップ ダウンロード http //ant.apache.org/bindownload.cgi PATHを通す ANT_HOMEを設定し、PATHに%ANT_HOME%\binを追加する。 プロジェクトルートにbuild.xmlを置く ?xml version="1.0" encoding="Shift_JIS"? project default="compile" !-- ソースファイルがあるディレクトリ -- property name="src.dir" value="src" / !-- クラスファイルを出力するディレクトリ -- property name="classes.dir" value="WEB-INF/classes" / !-- ライブラリのあるディレクトリ -- property name="lib.dir" value="../../lib" / path id="classpath" fileset dir="${lib.dir}" include name="**/*.jar" / /fileset /path !-- コンパイル -- target name="compile" mkdir dir="${classes.dir}" / javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" / /target /project ant実行 c \Tomcat6_0_16\webapps\anttest ant Buildfile c \Tomcat6_0_16\webapps\anttest\build.xml compile [javac] c \Tomcat6_0_16\webapps\anttest\build.xml 24 warning includeantruntime was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 1 source file to c \Tomcat6_0_16\webapps\anttest\WEB-INF\classes BUILD SUCCESSFUL Total time 1 second javaでAPIを作成する 以下の様にjspを作成してiniの様な「名前」=「値」で値を返しえあげる。 %@ page language="java" contentType="text/plain; charset=Windows-31J" % return_code= %=request.getAttribute("return_code")% error_reason= %=request.getAttribute("error_reason")% open_date= %=request.getAttribute("open_date")% SYSTEMERROR.txt return_code=9 error_reason=Exception_occured web.xml ?xml version="1.0" encoding="ISO-8859-1"? !DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http //java.sun.com/dtd/web-app_2_3.dtd" web-app servlet servlet-name hogeServlet /servlet-name servlet-class com.mkeka.hogeServlet /servlet-class init-param param-name SQLSTR /param-name param-value SELECT * FROM hogeTable WHERE FLG = 01 AND USER_ID = ? /param-value /init-param init-param init-param param-name RESPONSE_PAGE /param-name param-value RESPONSE.jsp /param-value /init-param /servlet !-- Standard Action Servlet Mapping -- servlet-mapping servlet-name hogeServlet /servlet-name url-pattern /hogeServlet /url-pattern /servlet-mapping error-page error-code 500 /error-code location /SYSTEMERROR.txt /location /error-page error-page exception-type java.lang.Exception /exception-type location /SYSTEMERROR.txt /location /error-page /web-app メモ javax.servletとjavax.servlet.http javax.servlet・・・通信プロトコルに依存しない機能を提供するクラス・インターフェースから構成されている javax.servlet.http・・・HTTPに依存する機能を提供するクラス・インターフェースから構成されている log4j書き方 private static Log log = LogFactory.getLog(hogeServlet.class.getName()); commons-logging.jar log4j-1.2.8.jar #log4j.rootCategory=DEBUG, A1,S1,W1 log4j.rootCategory=DEBUG, A1,W1,S1 # A1 is set to be a FileAppender which outputs to File. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=/service/log/hogeapp/app.log log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d{yyyy MM dd HH mm ss} [get39info %t] %-5p %l %m%n log4j.appender.W1=org.apache.log4j.DailyRollingFileAppender log4j.appender.W1.File=/service/log/hogeapp/appwarn.log log4j.appender.W1.Threshold=WARN log4j.appender.W1.layout=org.apache.log4j.PatternLayout log4j.appender.W1.layout.ConversionPattern=%d{yyyy MM dd HH mm ss} [get39info %t] %-5p %l %m%n log4j.appender.S1=org.apache.log4j.net.SyslogAppender log4j.appender.S1.SyslogHost=localhost log4j.appender.S1.Facility=user log4j.appender.S1.Threshold=ERROR log4j.appender.S1.layout=org.apache.log4j.PatternLayout log4j.appender.S1.layout.ConversionPattern=[get39info] %-5p(APL) %l %m%n javaでHelloWorld Ant編 Servlet API Documentation
https://w.atwiki.jp/okoba23/pages/20.html
servlet実行 sample program ■sample.java import javax.servlet.http.*; import javax.servlet.*; import java.io.IOException; import java.io.PrintWriter; public class sample extends HttpServlet{ public void doGet( HttpServletRequest req, HttpServletResponse res ) throws ServletException,IOException{ res.setContentType("text/html;charaset=Shift_JIS"); PrintWriter out = res.getWriter(); out.println(" html "); out.println(" head "); out.println(" title test servlet /title "); out.println(" /head "); out.println(" body test servlet pages /body "); out.println(" /html "); } } 1.sample.javaのコンパイル サーブレットでは、javax.servletパッケージやjavax.servlet.httpパッケージに収納されているServletAPI(servlet-api.jar)を使用する。 ■コンパイル javac sample.java ※pathを通す必要がある。[マイコンピュータ]右クリック- プロパティ- [詳細設定]タブ- 環境変数で以下を追加。 ※windowsで現在設定されている環境変数を見るコマンドは、DOSを使用して表示。 c \ set - 変数名:CLASSPATH - 値:%CATALINA_HOME%common\lib\servlet-api.jar 2.配備 %CATALINA_HOME%\webapps\[ディレクトリ]\WEB-INF\classes配下にコンパイルしたjarファイルを配備。 サーブレットを実行するには、web.xmlにURLとサーブレットのマッピングを指定。 ■web.xml servlet servlet-name test /servlet-name servlet-class sample /servlet-class /servlet -- servletのクラス名の記述。 servlet-mapping servlet-name test /servlet-name url-pattern /samplepage /url-pattern /servlet-mapping -- servletのURLの記述。 ■ロケーション %CATALINA_HOME%/webapps/[ディレクトリ]/WEB-INF -- JSPやHTMLファイルを置く。フォルダを作成して階層化してもOK -- web.xmlもここに。ない場合は、%CATALINA_HOME%/conf/web.xmlが有効になる。 %CATALINA_HOME%/webapps/[ディレクトリ]/WEB-INF/classes -- クラスファイルを置く。servletのクラスファイルも。 %CATALINA_HOME%/webapps/[ディレクトリ]/WEB-INF/lib -- jarファイルの格納場所。
https://w.atwiki.jp/a_kurosawa/pages/16.html
◆Servlet ◆ServletjQueryとServletでのAjaxで文字化け optionsCollectionを使うならLabelValueBeanを使うのが簡単 jQueryとServletでのAjaxで文字化け jQuery側 $.ajax( url "hoge", data { str "文字列"}, ... Servlet側 response.setContentType("text/html;charset=MS932"); PrintWriter out = response.getWriter(); String str = Utility.getServletParameter(request, "str"); out.print("渡された文字列 " + str); これだと文字化けする恐れがある。 Servlet側は response.setContentType("text/html;charset=UTF-8"); と渡してあげないと、JavaはUTF-8で渡すので文字化けしてしまうらしい。 optionsCollectionを使うならLabelValueBeanを使うのが簡単 他のやり方めんどい
https://w.atwiki.jp/api_programming/pages/32.html
eclipseでのservletの作成 Servletのファイルを作成ファイル→新規→クラス javax.servlet.http.HttpServletクラス継承したクラスを作成名前は○○Servletとしておく(ほうがわかりやすい、たぶん) http //codezine.jp/article/detail/1481 Get/Postを受ける関数を設定別記 jspファイルを作成○○.jsp 作成した Servlet.java と ○○.jsp を関連付けるWEB-INFフォルダの中にある、web.xmlファイルに次を記述 servlet servlet-name ○○ /servlet-name servlet-class 〈パッケージ名〉.○○Servlet /servlet-class /servlet servlet-mapping servlet-name ○○ /servlet-name url-pattern /○○ /url-pattern /servlet-mappint ポストされたデータが文字化けしないように設定しておくfilter ブラウザから直接呼び出しされたくない場合は、その設定もsecurity-constraint GetとPost 簡単には、情報を要求する か 情報を送る か、の違い Postで受ける ServletでdoPostをオーバーライドする protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException \{ RequestDispatcher rd = getServletContext().getRequestDispatcher("/WEB-INF/index.jsp"); rd.forward(req, resp); \ } パラメータを受け取る GETでもPOSTでも同じ受け取り方ができる req.getParameter("param") 指定した名前に対して、値がない場合はnullが返る リクエストパラメータの取得(getParameter) - JavaDrive 表示させるだけなら、わざわざここで取り出さなくても、JSP内で、 %= request.getParameter("productname") % で取り出せる JSPプログラミング入門 第1回:JSPによる入出力の基礎 (2/3) WEB-INF 「web.xml」のように重要な情報が記述されているファイルは、必ずこの「WEB-INF」内に配置をします。 WARファイルの作成 warファイルって何? Web Archive(WAR) 簡単にWebアプリケーションをサーバにアップし公開できるように、Webアプリケーションを単一のアーカイブファイルの形で配布することができる WebアプリケーションをまるごとZIP圧縮し、拡張子を.warに変更したもの Scope 一つのjspで完結する場合は、requestスコープとpageスコープに違いはない。 しかし、以下の場合は意味があるサーブレットからJSPページを呼び出す場合(MVCモデルなど) あるJSPからほかのJSPを呼び出す場合(JSPページのインクルードなど) https //developers.google.com/google-apps/calendar/instantiate?hl=ja include時の文字化け includeで読み込んだファイルが文字化けしないように設定 読み込み元 %@ page language="java" contentType="text/html; charset=(文字コード)" % 読み込み先 %@ page pageEncoding="(文字コード)" % http //www.atmarkit.co.jp/ait/articles/0503/12/news027.html
https://w.atwiki.jp/katsuhiro/pages/33.html
PostgreSQL 環境 Windows Vista jre 1.6 Eclipse 3.4.2 Tomcat 6.0 PostgreSQL 8.4.701 JDBC postgresql-8.4-701.jdbc4.jar 手順 PostgreSQLをダウンロード&インストールPostgreSQLにDBを作成 作成したDBにテーブルと列を作成 作成したテーブルにレコードを作成 PostgreSQL用JDBCをダウンロード %CATALINA_HOME%\lib にJDBCのjarをセット CLASSPATHにJDBCのjarを登録 Eclipseに新規に動的Webプロジェクトを生成 Servletクラスを生成 コーディング(下記参照) Servletのソース package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.*; import java.sql.*; /** * Servlet implementation class TestServlet */ public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public TestServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String drv = "org.postgresql.Driver"; String dsn = "jdbc postgresql //localhost 5432/testdb"; String usr = "postgres"; String pwd = "hoge"; String sql = "select * from staff"; Connection cn = null; Statement st = null; ResultSet rs = null; // コンテンツタイプ指定 response.setContentType("text/html; charset=SJIS"); // HTML ヘッダ出力 PrintWriter rw = response.getWriter(); rw.println(" !DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" "); rw.println(" HTML "); rw.println(" HEAD "); rw.println(" META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\" "); rw.println(" TITLE JAVA Servlet - PostgreSQL JDBC Test /TITLE "); rw.println(" /HEAD "); rw.println(" BODY "); rw.println(" P JAVA Servlet - PostgreSQL JDBC Test /P "); // PostgreSQL JDBC ドライバロード try { Class.forName(drv); } catch (Exception e) { rw.println(" P JDBC ドライバロードエラー BR " + e.toString() + " /P "); } // PostgreSQL JDBC 接続 try { cn = DriverManager.getConnection(dsn,usr,pwd); } catch (Exception e) { rw.println(" P JDBC 接続エラー BR " + e.toString() + " /P "); } // PostgreSQL JDBC 問い合わせ SQL 作成 try { st = cn.createStatement(); } catch (Exception e) { rw.println(" P JDBC 問い合わせ SQL 作成エラー BR " + e.toString() + " /P "); } // PostgreSQL JDBC レコードセットオープン try { rs = st.executeQuery(sql); } catch (Exception e) { rw.println(" P JDBC レコードセットオープンエラー BR " + e.toString() + " /P "); } // PostgreSQL JDBC レコードセットリード try { while (rs.next()) { // 検索された行数分ループ // idを取得 int id = rs.getInt("id"); // nameを取得 String name = rs.getString("name"); // 表示 rw.println(" P " + id + " " + name + " /P "); //rw.println(" P " + rs.getString(1) + " /P "); } } catch (Exception e) { rw.println(" P JDBC レコードセットリードエラー BR " + e.toString() + " /P "); } // PostgreSQL JDBC レコードセットクローズ try { rs.close(); } catch (Exception e) {} // PostgreSQL JDBC ステートメントクローズ try { st.close(); } catch (Exception e) {} // PostgreSQL JDBC 接続クローズ try { cn.close(); } catch (Exception e) {} // HTML テイル出力 rw.println(" /BODY "); rw.println(" /HTML "); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
https://w.atwiki.jp/api_programming/pages/64.html
下位ページ Content リダイレクト doGet、doPost、doDelete、...doGet, doPost,...をただデータを返すために使う リクエストパラメータの処理その他の取得方法一つのパラメータに対して複数の値がある場合 JSPとかのページにパラメータを渡すAttributeとParameter Cookieの利用Cookieの保存有効期限の設定 Cookieの取り出し Cookieの削除Cookieの内容確認 リダイレクト リダイレクトするには「HttpServletResponse」インターフェースで定義されている"sendRedirect"メソッドを使います。 http //www.javadrive.jp/servlet/response/index6.html http //www.atmarkit.co.jp/ait/articles/0407/06/news077.html doGet、doPost、doDelete、... それぞれのリクエストに対する処理を行う 引数はサーブレットへの入力(リクエストのパラメータ)、サーブレットの出力(レスポンスのパラメータ)のオブジェクトをそれぞれ。 doGet doGet, doPost,...をただデータを返すために使う PrintWriter out = resp.getWriter(); out.print(---); out.close(); http //www.javadrive.jp/servlet/ini/index4.html リクエストパラメータの処理 JavaDrive リクエストパラメータの取得(getParameter) getParameterメソッドを使うと、getでもpostでも、同じように処理できる。 request.getParameter("name") nameというキーの値を取得する その他の取得方法 一つのパラメータに対して複数の値がある場合 java.lang.String[] getParameterValues(java.lang.String name); getParameterValues JSPとかのページにパラメータを渡す 要素(Attribute)としてセットしておく request.setAttribute("hoge","aaa") リクエストへの属性追加 - JavaDrive AttributeとParameter Parameter リクエストに乗っかってきたもの Attribute サーブレットとかで生成したもの http //qa.atmarkit.co.jp/q/468 Cookieの利用 Cookieの保存 Cookie cookie = new Cookie("visited", "1"); response.addCookie(cookie); クッキーをクライアントへ保存 - JavaDrive 有効期限の設定 cookie.setMaxAge(int expiry) expiry は 秒単位 何もしないとブラウザの終了まで 有効期限の設定 - JavaDrive Cookieの取り出し まずは取り出すが、ひとつのサイトでひとつのCookieに限らない Cookie cookie[] = request.getCookies(); cookieの変数名はgetName()で、cookieの変数の値はgetValue()で取り出し if (cookie != null){ for (int i = 0 ; i cookie.length ; i++){ if (cookie[i].getName().equals("visited")){ String val = cookie[i].getValue(); } } } クッキーの取り出し - JavaDrive Cookieの削除 有効期限を0に設定して登録する cookie.setMaxAge(0) Cookieの内容確認 ChromeでのCookie確認 http //kwski.net/handy/605/