2010年9月27日月曜日

Jsp/Servletのスコープ

リクエストスコープの有効範囲は1つのリクエストが終わるまでの間です。
セッションスコープは同じクライアント間が有効範囲です。
アプリケーションスコープはWebアプリケーション内で有効です。リクエストやセッションが違っても有効です。また、アプリケーションコンテキストと呼ばれます。

■getAttribute(String name)での値はObjectで帰ってくるので、必要に応じてキャスト
行う、

■セッションIDとカウンター
package session;

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 javax.servlet.http.HttpSession;

import sun.net.www.content.text.plain;

public class CounterServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException
    {
        HttpSession session = request.getSession();//セッションの取得
       
        Integer count = (Integer) session.getAttribute("count");//セッションかたcountの取得
       
        if(count == null)//nullなら0を代入        {
            count = new Integer(0);
        }
        count = new Integer(count.intValue() + 1);//カウントUP
       
        session.setAttribute("count", count);//セッションに格納
        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
       
        pw.print("<p>sessionIdは" + session.getId() + "</p>");//セッションIDの取得       
        pw.print("<p>" + count + "</p>");//カウントの表示       
    }
   
}

Jsp/Servletでフィルター処理

■フィルター処理
public class TestFilter implements Filter
{
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException
    {
        request.setCharacterEncoding("Windows-31J");//文字コードの設定
        response.setContentType("text/plain; charset=Windows-31J");//文字コードの設定

chain.doFilter(request,response);//次の処理に渡す

■XMLの記述

    <filter>
        <filter-name>TestFilter</filter-name>
        <filter-class>filter.TestFilter</filter-class>
    </filter>
   
    <filter-mapping>
        <filter-name>TestFilter</filter-name>
        <url-pattern>/*</url-pattern>//すべてのファイルにフィルターを掛ける
    </filter-mapping>

jsp/servletで入力値のチェック

■数値チェック,intに変換し数値で無い場合はキャッチで受け取る
int year = Integer.parseInt(yearStr);
catch (Exception e)

■emailの書式チェック
String pattern = "[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+";
if(text.matches(pattern))
{
 マッチ処理
}
else{マッチしない処理}

2010年9月16日木曜日

JspとServletとJavaBeansの連携で分かった事

■■■■■■■■■■■サーブレットで大事な事■■■■■■■■■■■■■■

 リクエストに渡すスコープ名request.setAttribute("cb",cb);とJsp部分でJavaBeansで受け取る
<jsp:useBean id="cb" class="mybeans.CarBean"の部分の名前は合わせておく、
public class Sample7 extends HttpServlet
{
    public void doGet(HttpServletRequest request,
            HttpServletResponse respons)
    throws ServletException
    {
        try
        {
            //GETで名前の受け取り
            String tmp = request.getParameter("cars");
            String names = new String(tmp.getBytes("8859_1"),"JISAutoDetect");
       
            //BeansにCarの名前をセット
            CarBean cb = new CarBean();
            cb.setCarName(names);
            cb.makecardata();
       
            request.setAttribute("cb",cb);//この部分

2010年9月14日火曜日

フィルター処理の記述、

■サーブレット表示のソース
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SampleFilter extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException
    {
        try
        {
            response.setContentType("text/html;charset=Windows-31J");
            response.getWriter().println("<p>Servlet処理です</p>");
        } catch (Exception e)
        {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}


■フィルター表示のソース

import java.io.*;
import java.util.*;
import javax.servlet.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class FilterSrc implements Filter
{
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
        throws IOException,ServletException
        {
        try{
            response.setContentType("text/html;charset=Windows-31J");
            PrintWriter pw = response.getWriter();
            pw.println("フィルタ処理");

            chain.doFilter(request, response);
        }catch (Exception e) {
            // TODO: handle exception
        }
        }
       
    public void init(FilterConfig filterConfig) {
        // TODO 自動生成されたメソッド・スタブ
       
    }
    public void destroy() {
        // TODO 自動生成されたメソッド・スタブ
       
    }

}

■web.xmlの記述

    <servlet>
        <servlet-name>SampleFilter</servlet-name>
        <servlet-class>SampleFilter</servlet-class>
    </servlet>
    <filter>
        <filter-name>FilterSrc</filter-name>
        <filter-class>FilterSrc</filter-class>
    </filter>
    <servlet-mapping>
        <servlet-name>SampleFilter</servlet-name>
        <url-pattern>/FilterSrc/SampleFilter</url-pattern>//ここをそろえておくことが味噌
    </servlet-mapping>

    <filter-mapping>
        <filter-name>FilterSrc</filter-name>
        <url-pattern>/FilterSrc/SampleFilter</url-pattern>
//ここをそろえておくことが味噌
    </filter-mapping>
そのたポイント■
①フィルターのソースのメソッドはdoFilter()です、その内部で処理を行いましょう、
FilterCainのdoFilter()メソッドの処理が終わると次の処理が行われます
②Filterを実装
③doFilterの引数はServletのリクエスト、レスポンス、FilterChainの3つ
④実装したFilterのinitやdesroyのメソッドも忘れずに

コンテキストとは!!サーブに画面線維の注意点

アプリケーションサーバは各階層をコンテキストという単位で管理している、
コンテキストルートはJspでは
request.getContextPath()
で呼び出します。
requestHttpServletRequestクラスの暗黙オブジェクトで、Jspではデフォルトで
使えます。

■■■■■getRequestDispatcherdeでサーブに画面線維の注意点■■■■■■■■■■■■
(    RequestDispatcher rd = sc.getRequestDispatcher("/ExInclude2Servlet");

getRequestDispatcherdeを使ってサーブレットに画面線維をする場合は、
web.xmlに登録しておかなければいけません

■■■■■forwardメソッドとsendRedirectメソッドとの違い■■■■■

forwardは(独立しない)リクエスト処理
sendRedirect (独立した)リクエスト処理

2010年9月13日月曜日

ServletでHTMLと日本語を書き出し

■■■■■■■■HTMLを書き出す時■■■■■■■■■■
response.setContentType("text/html;  charset=Windows-31 ");
はhtmlの書き出しと、エンコーディングを Windows-31で行います。

■■■■■■■■テキストを書き出す時■■■■■■■■■■
response.setContentType("text/plain; charset=Windows-31J");

★上記を書かないと


?????????
 
な感じになります 

Jsp記述色々

■■■■■■変数宣言■■■■■■
<%! int i = 0; %>はJspが初めて呼び出された後、共有されます
<% i =  i++; %>
ですので、iの変数はアクセスの間カウントUPされます。

■■■■■■サーブレットを作成はHttpServletを継承■■■■■■
サーブレットを作成する時は、HttpServletを継承します。
 extends  HttpServletと記述する

■■■■■■doGet()メソッド■■■■■■
HttpServletのオーバーライドメソッド
ブラウザーがら リクエストで受け取り、レスポンス で返します、

■■■■■■例外処理■■■■■■
レスポンスの書き込みはIOExceptionでスローし、
他の例外処理は、ServletExceptionでラップてスローします。
例: 
try
{
例外の発生がある処理
}
catch(SomeException e)
{

throw new ServletException(e);
}
■■■■■■web.xml■■■■■■
<web-app>
<servlet>

 <servlet-name>TestServlet</servlet-name>//サーブレットの名前
  <servlet-class>TestServlet</servlet-class>//サーブレットのクラス、パッケージがある
//場合はパッケージに合わせましょう
</servlet>
<servlet-mapping>
 <servlet-name>TestServlet</servlet-name>//サーブレットの名前

 <url-pattern>/testservlet</url-pattern>//ブラウザからのurl
</servlet-mapping>
<web-app>
 ■■■■■■web.xmlのワイルドカード■■■■■■
/test/*
*.txtなどあります

Jspで配列中の名前表示

 jspで配列中の名前表示ソース■
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
<%
String []names = {"大田","川崎","永浦","西橋"};
int i;
int count = names.length;
for(i = 0; i < count; i++)
{
out.println(names[i]);
}

%>


</body>
</html>

★★★★★★★★実行結果★★★★★★★★
大田 川崎 永浦 西橋

 ★★★★★eclipse画面★★★★














★★★★★表示URL★★★★
http://localhost:8080/Jsp10_1_1/p_intro.jsp

2010年9月1日水曜日

JPanel

コンテナにパネルを追加してボタンを追加、

JButton jb1 = new JButton();
JButton jb2 = new JButton();


setLayout(new GridLayout(2,1)); //コンテナにグリッドを作成
Jpanel jp1 = new JPanel();//パネルの作成
Jpanel jp2 = new JPanel();
jp1.add(ボタンオブジェクト);//パネルにボタンの追加
jp2.add(ボタンオブジェクト);
add.(jp1);//コンテナにパネルを追加
add.(jp2);