Last Up Date 2010/01/16 00:50
Techscore http://www.techscore.com/tech/Java/main.html#J2SE
次の二つは全くの等価である。
<jsp:useBean id="myBean" class="MyBean" scope="session"> <jsp:useProperty name="myBean" property="prop" value="val">
<% MyBean myBean = (MyBean)session.getAttribute("myBean"); if (myBean == null){ myBean = new MyBean(); session.setAttribute("myBean",myBean); } myBean.setPorp("val"); %>
2002/02/26
JSPの中で、日本語リテラルを含むソースをコンパイルすると「エクケープ文字が不正です」が出るときがあるらしい。
"削除可能"などがでる。
JSPからユニコードに変換する時の諸問題で発生するらしい。詳細は未調査。
回避方法は、
"削除可能\"
とすると良い。
上の例では、[能]の字がエラーをおこしているようだ。
2002/03/26
http://www.ingrid.org/java/jserv/i18n/corruptedchar.html にわかりやすい記述があった
2002/07/19
@IT
Webブラウザが文字コードを判定する基準は?
http://www.atmarkit.co.jp/fjava/rensai3/mojibake01/mojibake01.html
サーブレットはcookieによる方法と、URLwritingによる方法があるそうだ。
URLwritingによる実装の場合は、クッキーに依存しないため、クライアント側でcookieの使用をoffにしていても使用できる。
現時点で判っていないのは、クライアント側でcookieを無効にしていたら、自動的にURLwritingに変更されるようにサーブレットが実装されているのか、それとも実装設計で決めなければならないのか...
2003/01/28
public class TestServlet05 extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
//TODO Method stub generated by Lomboz
}
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
http://ash.or.jp/java/webapp_scope.htm
三つのスコープがある
リクエストスコープ
1回のHTTPプロトコルで実行される、サーブレットとforwardされたJSP間で有効なオブジェクトです。リクエストの処理が終わると破棄されます。 HttpServletRequestの属性として設定します。
Servlet
request.setAttribute("testBean",testBean);
JSP
<jsp:useBean id="testBean" class="testPackage.TestBean" scope="request" /> … <%= testBean.getDate() %>
セッションスコープ
同一のセッションで実行される、サーブレットやJSPで有効なオブジェクトです。一定時間が経過しsessionが終了すると破棄されます。 HttpSessionの属性として設定します。
Servlet
HttpSession session = request.getSession(); session.setAttribute("testBean",testBean);
JSP
<jsp:useBean id="testBean" class="testPackage.TestBean" scope="session" /> … <%= testBean.getDate() %>
このセッションスコープですが、Webアプリケーション間でのセッションスコープは共有されません
本来は、アプリケーション内での会話どうしを連携させるもととして使うもののようです
アプリケーションスコープ
同じアプリケーション内のすべてのサーブレットやJSPで共有されるオブジェクトです。サーバを終了すると破棄されます。
セッション間でも情報共有されます。
ServletContextの属性として設定します。
Servlet
ServletContext servletContext = getServletConfig().getServletContext(); servletContext.setAttribute("testBean",testBean);
JSP
<jsp:useBean id="testBean" class="testPackage.TestBean" scope="application" /> … <%= testBean.getDate() %>
ポイントは、JNDIツリーから、データソースを取得する事。
//データソースをJNDIから取得する InitialContext initialContext = new InitialContext(); DataSource dataSource = (DataSource) initialContext.lookup("jdbc_test_pool");
JSPで生成したページをキャッシュさせたくない場合には、以下のようなファイルを用意して、
<%@ page include="Nocache.inc" %> のようにインクルードするとよい。
Nocache.inc
<%! private String getHTTPDate() { java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("E, dd MMM yyyy hh:mm:ss zzz", java.util.Locale.US); formatter.setTimeZone(java.util.TimeZone.getTimeZone("GMT")); return formatter.format(new java.util.Date()); } %><% response.setHeader("Expires", getHTTPDate()); response.setHeader("Pragma","no-cache"); response.setHeader("Cache-Control","no-cache"); %>
また、レスポンスヘッダは以下のようになる。
HTTP/1.1 200 OK Content-Type: text/html;charset=Shift_JIS Cache-control: no-cache Pragma: no-cache Expires: Tue, 17 12 2002 15:34:27 GMT Date: Tue, 17 Dec 2002 15:34:27 GMT Server: Apache Coyote/1.0 Proxy-Connection: close Connection: close
Webアプリケーションにおける サーバ・サイドJavaの効果的な利用(前編)
http://www.atmarkit.co.jp/fjava/special/ejb01/ejb01.html
Webアプリケーションにおける サーバ・サイドJavaの効果的な利用 (後編)
http://www.atmarkit.co.jp/fjava/special/ejb02/ejb02.html
JDBCはもう不要? パフォーマンス問題を解決したEJBは 実用期を迎える
http://www.atmarkit.co.jp/fjava/special/ejb20/ejb20.html
JBossでかんたんEJB(3)
http://www.atmarkit.co.jp/fjava/rensai3/jboss03/jboss03.html
EclipseでEJBを作成するあたりが少し書いてあった
http://mictan.gozaru.jp/jboss_eclipse.html
サーブレットや、JSPは、一般的にマルチスレッドで稼働されるものと認識すべきである。
http://www.atmarkit.co.jp/fjava/rensai2/webopt04/webopt04.html
つまりスタティック変数はもとより、インスタンス変数も、異なるスレッドから同時アクセスの可能性がある事を考慮すべきである。
サーブレットの場合の解決方法
方法1
インターフェイス javax.servlet.SingleThreadModel をインプリメントしてシングルスレッドモデルにしてしまう。方法2
メソッドをsynchronizedにしてしまう。方法3
必要な箇所を synchronized で囲む。クラス変数に対し、スレッドセーフにする為には、クラス変数のsynchronizedのアクセサを用いれば良い。
JSPの場合の解決方法
<%! と %>で変数宣言だけするとインスタンス変数になってしまうので、
<% と %>でjavaコーディングすれば、ローカル変数扱いになる。
http://www.nihon-eng.co.jp/c-break/TechNote/java/JAVA_SVLT5.htm
web.xml の URLマッピングに記述する内容は、コンテキストルートは含まない。
20090605_web.xml_url-pattern_のきり方について
<jsp:forward page="/response.jsp" />
http://msugai.fc2web.com/java/servlet/dispatcher.html
K氏の実験によれば、ディスパッチする時、HTMLとJSPでは、切り方に相違があるとの事
JSPにディスパッチする時
/ 始まりの場合は、コンテキストルートからの絶対指定になる。
/ 以外の始まりは、JSPからJSP呼び出しの場合は、JSPどおしの相対パスになる。
HTMLにディスパッチするとき
/ 始まりの場合は、webRootからの絶対指定になる。
/ 以外の始まりは、呼び出しもとのフォルダからの相対パスになる。
複数のアプリケーションで共有する 部品 を 配置する方法は、いくつかの方法があるようだ
1 APサーバーの起動スクリプトのクラスパスに登録をする方法。
jarもclassファイルもシステムクラスパスに宣言して使用できる。
2 ear形式の配置を行う。
APP-INF/LIB にjarをおいたり、APP-INF/classes に classファイルを置いたりする事ができる。
3 それぞれのWEB-INF/LIB に配置を行う。
JARファイルを配置する。
異なるフォルダに同じJARファイルが存在する事になる。
本来の形は、2 の方式なのだろう。
リソースの入替・追加が発生した時に、
・アプリケーションの停止を避けたい
・入替するモジュールを最小限にしたい
の念頭にするならば、2はEAR全体の再デブロイが発生してしまうので、
1で クラスパス指定により、CLASSファイルを裸で置く案が有望になる。
しかし、1 だと、ファイルを更新した場合は、APサーバーの再起動が必要になる。
それは、クラスローダーで、そのクラスがメモリにローディングされている可能性があるからである。
http://muimi.com/j/apsrv/weblogic/dirdep/
サーブレットコンテナでの、基本的なフォルダ構成
Javaの道:Tomcat(2.プログラム配置・実行):
http://www.javaroad.jp/opensource/js_tomcat2.htm
WEB-APP/classes WEB-APP/ib WEB-INF/classes WEB-INF/lib
などへは、明示的にclasspath を切らなくても 使用可能になっている。
それは、classLoder がサーチをする時に、検索範囲にしかけを入れているようである。
JVMに対するクラスパスは、どこでからでも 検索できる位置づけとなる。
JVM でのクラスパスに配置されているクラスからは、WEB-APP、WEB-INF 配下のクラスは参照できない。
WEB-APP/classes WEB-APP/ib のクラスからは、WEB-INF/classes WEB-INF/lib のクラスは参照できない。
これは、一般化された物から、特化された物は 使用できない事を表していると考えられる。
クラスパス ← WEB-APP ← WEB-INF という方向へは利用可能である。
http://java.sun.com/dtd/web-app_2_3.dtd によると、次のように順番が設定されているようだ
<!ELEMENT web-app ( icon?, display-name?, description?, distributable?, context-param*, filter*, filter-mapping*, listener*, servlet*, servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?, error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*, login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref* )>
この順番を守らないと、xmlパース例外が発生する。
HttpServletRequest::getRemoteAddr()
要求を送信したクライアントのインターネットプロトコル (IP) アドレスを返します。HTTP サーブレットの場合、返される値は CGI 変数 REMOTE_ADDR の値と同じです。
HttpServletRequest::getRemoteHost()
要求を送信したクライアントの完全指定のドメイン名を返します。Web コンテナがホスト名を解決できなかったり、パフォーマンス向上のためにホスト名を解決しないことを選択した場合は、ドットで区切られた書式の IP アドレスを返します。HTTP サーブレットの場合、返される値は CGI 変数 REMOTE_HOST の値と同じです。
WebLogic JSP リファレンス
http://edocs.beasys.co.jp/e-docs/wls/docs81/jsp/reference.html Ver8.1
http://edocs.beasys.co.jp/e-docs/wls61/jsp/reference.html#68555 VER6.1
//JSPに処理を委譲する ServletContext sc = super.getServletContext(); RequestDispatcher disp = sc.getRequestDispatcher("/test.jsp"); disp.forward(request,response);
test.jsp は、コンテキストルート直下にいます。
requestから、入力パラメタを取得して、外部のファイルに出力する例
private void inputDump(HttpServletRequest request) { Enumeration enum = request.getParameterNames(); PrintWriter writer = null; try { writer = new PrintWriter( new BufferedWriter( new FileWriter("c:\\temp\\testlog.log"))); } catch (IOException e) { e.printStackTrace(); } while (enum.hasMoreElements()) { String parameterName = (String) enum.nextElement(); String[] parameterValues = request.getParameterValues(parameterName); String outString = parameterName; for (int i = 0; i < parameterValues.length; i++) { outString += " = " + parameterValues[i]; } writer.println(outString); } writer.flush(); }
<web-app> <!-- Action Servlet Configuration --> <servlet> <servlet-name>xxxStrutsServlet</servlet-name> <servlet-class>uxx.session.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> …
javax.servlet.getInitParameter(java.lang.String name) を用いて取得できます。
HttpServlet を継承していれば、使用できます。
getInitParameter("config") で、 "/WEB-INF/struts-config.xml" が取得できます
JakartaProjectにて、便利なクラスが存在するようです
JakartaProject
http://www.javaroad.jp/servletjsp/sj_servlet12.htm
Struts
http://www.javaroad.jp/opensource/js_struts20.htm
JSPでは、session オブジェクトは予め定義されているオブジェクト変数として使用できる。
使用したく無い場合は、以下のように宣言する必要がある。さもなくば、<%@ page session= "true" %> となり
既存のセッションの取得、もしくは、新たに生成したセッションが設定される。
<%@ page session= "false" %>
フォワードは、Servlet/JSPコンテナ内で処理の委譲
リダイレクトは、一度クライアントブラウザへ返した後、httpリクエストの再発行である
JSPフォワードの例
<jsp:forward page="menu.html"/>
Tomcat 6.0系を標準インストールした時のデモを利用した
http://localhost:8080/examples/servlets/servlet/RequestParamExample
このリストストを受け取るサーブレットは、doPost と doGet は 同一のメソッドで処理するようになっているので
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doGet(request, response); }
urlから渡しても、同様の動きが再現できるはず
http://localhost:8080/examples/servlets/servlet/RequestParamExample?firstname=さしすせそ&lastname=たちつてと
パラメタータ は ? につづき 変数名=値&変数名=値&変数名=値 …という書式である
http://www39.atwiki.jp/dragon109/pages/29.html
URLパターン(パスマッピング)
<url-pattern> /hello/* </url-pattern>
この場合、「http://localhost:8080/webxmltest/hello/」から始まる全ての呼び出しに対して指定のサーブレットを実行する。 下記のどの呼び出し方をしても同じサーブレットが呼び出される。
http://localhost:8080/webxmltest/hello/hellowolrd
http://localhost:8080/webxmltest/hello/index.html
http://localhost:8080/webxmltest/hello/sub/sub2/exsample.jpg
URLパターン(拡張子マッピング)
<url-pattern>*.gif</url-pattern>
この場合、呼び出しのURLの最後が「.gif」で終わる全ての呼び出しに対して指定のサーブレットを実行する。
下記のどの呼び出し方をしても同じサーブレットが呼び出される。
http://localhost:8080/webxmltest/sample.gif
http://localhost:8080/webxmltest/hello.gif
http://localhost:8080/webxmltest/hello/abc.gif
URLパターン(デフォルトマッピング)
どのURLマッピングにもマッチしなかった全ての呼び出しに対して対応するサーブレットを呼び出すためのもの。
<url-pattern>/</url-pattern>
URLパターンの優先順位
高 特定のファイルへのマッピング
↑ パスマッピング
↓ 拡張子マッピング
低 デフォルトマッピング
<url-pattern>
/
</url-pattern>
を、宣言すると、
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
が、有効にならない
以下のコードを仕込めばわかるが System.out.println(new File(".").getAbsolutePath());
自分の場合は、ココでした D:\Eclipse\tomcat6.0\.
外部パスを取得するなら、プロパティファイルを用いるとかしたほうが良いかも
サーブレットの基礎を行っているときに
doPost メソッド内で ServletConfig ss = getServletConfig();
をおこなったら、取得に失敗 NULLになった。
なんで?
サーブレットコンテナ(Tomcat)を再起動したら、OKだった 。
デバッグモードで 起動させたまま、ソース修正をしていたのが原因か
原因2 init(ServletConfig config) を オーバーライズしていた
しかし、super.init(ServletConfig config) を呼び出していなかった。
通常は、引数なしの public void init() を呼び出すだけでよい。 これだと、Super呼び出しが不要。
http://localhost:8080/コンテキストルート/jsp/out01.jsp
ココに存在する JSPに委譲したい場合
// JSPに処理を委譲する ServletContext sc = super.getServletContext(); RequestDispatcher disp = sc.getRequestDispatcher("/jsp/out01.jsp"); disp.forward(request, response);
JSPの指定先は、コンテキストルート配下のパスで切る
でも、
http://localhost:8080/fw_proto_servlet01/start.html
<form action="/fw_proto_servlet01/servlet" method=post>
submit したら…
jspは開いたけど、ブラウザのURLは /servletが表示されていた。
http://localhost:8080/fw_proto_servlet01/servlet
って事は、JSPの存在位置と、URLがあっていない事になる。
そういうもんだっけ?
実験からあぶりだすと…
サーブレット内のディスパッチャーは、 どのJSPを使用するかー である。
したがって、コンテキストルート を起点とした、使用するJSPの所在を指定するものである。
クライアントブラウザーの上部の URL欄は、 レスポンスされたコンテンツではなく、リクエスト/要求した内容である。
クライアントから URLをリクエストする際に、相対を指定したときには、 次のルールで 絶対パスに組み立てられなおして、要求が投げられるようである。
- URLが/終わりのときは、ディレクトリ扱いである。
- /以外で終わっているときは、ファイル扱いである。
- 要求パスが /始まりのときは、ディレクトリ扱いである。
要求相対パスが… 上部のURLが … host/root/base host/root/base/ aaa host/root/aaa host/root/base/aaa /aaa host/aaa host/aaa /aaa/ host/aaa/ host/aaa/ /aaa/bbb host/aaa/bbb host/aaa/bbb /aaa/bbb/ host/aaa/bbb/ host/aaa/bbb/ aaa/ host/root/aaa/ host/root/base/aaa/ aaa/bbb host/root/aaa/bbb host/root/base/aaa/bbb aaa/bbb/ host/root/aaa/bbb/ host/root/base/aaa/bbb/ 太字は、フォルダを示すことになる
ベストプラクティスを考えて見みると
ベストじゃないなぁ
welcomPage host/Docroot/index.html host/Docroot/index.html サーブレット呼び出し action host/Docroot/action
JSPにディスパッチするときと、同じ方法で、HTMLが指定できるみたいだ
ディスパッチャーは、リクエストオブジェクトからでも、取得できるぞ
RequestDispatcher disp = request.getRequestDispatcher("/simpletest01/html01.html");
http://himtodo.fc2web.com/java/encode.html
Oracle JDBCドライバ 周りで 例外が発生
Eclipse上で Tomcatの初回実行後に、例外が発生してしまう
致命的: Error while registering Oracle JDBC Diagnosability MBean.
javax.management.MalformedObjectNameException: Invalid character '
' in value part of property
at javax.management.ObjectName.construct(ObjectName.java:602)
at javax.management.ObjectName.<init>(ObjectName.java:1403)
at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:303)
at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:213)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:209)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at resources.CustomerResource.getCustomerAsXml(CustomerResource.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
以下省略
環境 Eclipse 3.4.2
Oacle 11g 11.1.0.6.0
JDBC 11.1.0.6.0 ojdbc6.jar
原因 不明
対処方法
Oracleから、JDBCの新しい版がでているので、それを使用せよ
Oracle 11.1.0.7.0-Production JDBC 4.0 compiled with JDK6
以下のページから入手
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_111060.html
Tomcat5.5で実験した。
セッションに格納したオブジェクトは、シリアライズ可能なオブジェクトである。
コンテキストをリロードしても、シリアライズ可能なオブジェクトは復元されていた。
WEBアプリケーションの停止/起動を行っても、シリアライズ可能なオブジェクトは復元されていた。
Tomcat自身を停止した場合は、再現できなかった。
シリアライズ可能なオブジェクトの作り方
../java/basic_language/basic_language.html#20090730_シリアライズ
http://www.atmarkit.co.jp/fjava/javatips/028jspservlet019.html
ControlServlet
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; public class ControlServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("application/octet-stream;charset=Windows-31J"); resp.setHeader("Content-Disposition", "attachment; filename=db.csv"); PrintWriter out = resp.getWriter(); try { String lineSeparator = System.getProperty("line.separator"); out.print("項目A,項目B,項目C,項目D,項目E"); out.print(lineSeparator); out.print("aaa1,bbb1,ccc1,ddd1,eee1"); out.print(lineSeparator); out.print("aaa2,bbb1,ccc2,ddd1,eee2"); out.print(lineSeparator); out.print("aaa3,bbb1,ccc3,ddd1,eee3"); out.print(lineSeparator); } finally { try { if (out != null) { out.close(); } } catch (Exception e) { throw new ServletException(e); } } } }
web.xml
<?xml version="1.0" encoding="utf-8"?> <!-- --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <description>20090824_csv_download</description> <display-name>20090824_csv_download</display-name> <servlet> <servlet-name>controlServlet</servlet-name> <servlet-class>ControlServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>controlServlet</servlet-name> <url-pattern>*.go</url-pattern> </servlet-mapping> </web-app>
index.html
<!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>index.html simple hallow java1</title> </head> <body> <form action="action.go" method=POST> <input type=submit> </form> </body> </html>
項目A,項目B,項目C,項目D,項目E
aaa1,bbb1,ccc1,ddd1,eee1
aaa2,bbb1,ccc2,ddd1,eee2
aaa3,bbb1,ccc3,ddd1,eee3
サーブレットのコンテントタイプについて
種類 | 拡張子 | Content-Type |
---|---|---|
HTMLファイル | html, htm | text/html |
テキストファイル | txt | text/plain |
GIF | gif | image/gif |
PNG | png | image/png |
Windows 実行ファイル | exe | application/octet-stream |
httpServletResponse.sendError( HttpServletResponse.SC_NOT_FOUND,"テスト的に404返しをしてみた" );
FierBugで見てみると。
web.xml にエラーページを設定した場合はどうなるか?
<error-page> <error-code>404</error-code> <location>/404.html</location> </error-page>
エラーページがあてがわれても、404が帰ってきている事が確認できました。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!-- http://localhost:8080/20100114_list_get/ --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>リスト形式の画面から、選択された行のキーを得る</title> <script type="text/javascript" src="jquery-1.3.2.js"></script> <script type="text/javascript"> $(document).ready(function(){ }); function funcCheckedkey(){ var c c = $("#myTable1").find("input:checked").length; alert(c); var $sendKeys = $("#myTable1 [name='chk']:checked ").parent().parent().find("[name='key']") $sendKeys.each(function(){ // $("#sendkey").clone(). // alert($(this).text()); $("#sendKeys").append("<div name='sendKey'>" + $(this).text() + "</div>" ) // $("#sendKey") // $(this).toggleClass("example"); }); // alert($sendKeys.text()); } </script> </head> <body> <table id="myTable1" border="1"> <thead> <tr> <th>check</th><th>key</th><th>value</th> </tr> </thead> <tbody> <tr> <td><input id="chk1" type="checkbox" name="chk" > </td><td name="key">keyA</td><td>valueA</td> </tr> <tr> <td><input id="chk2" type="checkbox" name="chk" checked > </td><td name="key">keyB</td><td>valueA</td> </tr> <tr> <td><input id="chk3" type="checkbox" name="chk" > </td><td name="key">keyC</td><td name="abc">valueA</td> </tr> <tr> <td><input id="chk4" type="checkbox" name="chk" > </td><td name="key">keyD</td><td>valueA</td> </tr> </tbody> </table> <input id="myButon" type="button" value="chekcdkey" onclick="funcCheckedkey()"></input> <hr/> <div id="sendKeys"></div> <hr/> <form action="sss.go" method=POST> <input type=text size=20 name=dataname> <br> aaaaaaaaaaaaaa <input type=submit> </form> </body> </html>