SQLの窓

2020年08月14日


Tomcat 7(JSP) : 配列, ArrayList, ループ処理

関連する記事

XAMPP 内 Tomcat Version 7 の設定と簡単な JSP の実行テスト


forEach の中の 処理で out.println が使えないので、文字列の処理は ArrayList を使用して行って、out.println は、拡張 for の中で実行しました。

この記事の趣旨は、JSP を使用して java の基礎を学習するというものなので、JSP のタグや Beans は利用しないつもりです。

sample_03.jsp
<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=utf-8" %>
<%!
// *********************************************************
// ローカル関数
// *********************************************************
public String getData( HttpServletRequest request,String name ) {

	String value = request.getParameter( name );
	if ( value == null ) {
		value = "";
	}

	return value;
}
%>
<%
// *********************************************************
// ページ処理
// *********************************************************
request.setCharacterEncoding("utf-8");

String strField1 = getData( request, "field1");

String strField2 = getData( request, "field2");

// 配列
String[] month = {"睦月","如月","弥生","卯月","皐月","水無月","文月","葉月","長月","神無月","霜月","師走"};

// ArrayList に変換 ( 但し、この場合データを追加できない : 固定 : 配列と同じ )
List<String> listMonth = Arrays.asList( month );

%>
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css">

<style>
#main {
	padding: 30px;
	font-size: 24px;
}

form {
	margin-bottom: 20px;
}

.btn {
	vertical-align: top;
}
</style>
</head>
<body>
<div id="main">

<form method="get">
	<input type="text" name="field1" value="<%= strField1 %>">
	<input type="submit" name="send" value="GET" class="btn btn-info">
</form>

<form method="post">
	<input type="text" name="field2" value="<%= strField2 %>">
	<input type="submit" name="send" value="POST" class="btn btn-info">
</form>


<div class="alert alert-primary"><%= request.getMethod() %></div>

<% 

if ( request.getMethod().equals( "POST" ) ) {

	// 配列
	for( int i = 0; i < month.length; i++ ) {
		out.println( String.format( "%s<br>", month[i] ) );
	}

	out.println("<hr>");
	
	// ArrayList
	for(int i = 0; i < listMonth.size(); i++ ) {
		out.println( String.format( "%s<br>", listMonth.get(i) ) );
	}

	out.println("<hr>");

	// 拡張 for
	for( String value : listMonth ) {
		out.println( String.format( "%s<br>", value ) );
	}

	out.println("<hr>");

	List<String> list = new ArrayList<String>();

	// forEach + ラムダ式 ( ※ forEach の中で out が使えない )
	listMonth.forEach( (value) -> { list.add( String.format( "%sだよ", value )); } );

	for( String value : list ) {
		out.println( String.format( "%s<br>", value ) );
	}

}
%>

</div>
</body>
</html>


includeディレクティブ を用いて、jsp ファイルを二つに分割します

sample_03_base.jsp
<%@ page
	language="java"
	import="java.util.*"
	contentType="text/html;charset=utf-8" %>
<%!
// *********************************************************
// ローカル関数
// *********************************************************
public String getData( HttpServletRequest request,String name ) {

	String value = request.getParameter( name );
	if ( value == null ) {
		value = "";
	}

	return value;
}
%>
<%
// *********************************************************
// ページ処理
// *********************************************************
request.setCharacterEncoding("utf-8");

String strField1 = getData( request, "field1");

String strField2 = getData( request, "field2");

// 配列
String[] month = {"睦月","如月","弥生","卯月","皐月","水無月","文月","葉月","長月","神無月","霜月","師走"};

// ArrayList に変換 ( 但し、この場合データを追加できない : 固定 : 配列と同じ )
List<String> listMonth = Arrays.asList( month );

%>
<%@ include file="sample_03_part_01.jsp" %>


sample_03_part_01.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css">

<style>
#main {
	padding: 30px;
	font-size: 24px;
}

form {
	margin-bottom: 20px;
}

.btn {
	vertical-align: top;
}
</style>
</head>
<body>
<div id="main">

<form method="get">
	<input type="text" name="field1" value="<%= strField1 %>">
	<input type="submit" name="send" value="GET" class="btn btn-info">
</form>

<form method="post">
	<input type="text" name="field2" value="<%= strField2 %>">
	<input type="submit" name="send" value="POST" class="btn btn-info">
</form>


<div class="alert alert-primary"><%= request.getMethod() %></div>

<% 

if ( request.getMethod().equals( "POST" ) ) {

	// 配列
	for( int i = 0; i < month.length; i++ ) {
		out.println( String.format( "%s<br>", month[i] ) );
	}

	out.println("<hr>");
	
	// ArrayList
	for(int i = 0; i < listMonth.size(); i++ ) {
		out.println( String.format( "%s<br>", listMonth.get(i) ) );
	}

	out.println("<hr>");

	// 拡張 for
	for( String value : listMonth ) {
		out.println( String.format( "%s<br>", value ) );
	}

	out.println("<hr>");

	List<String> list = new ArrayList<>();

	// forEach + ラムダ式 ( ※ forEach の中で out が使えない )
	listMonth.forEach( (value) -> { list.add( String.format( "%sだよ", value )); } );

	for( String value : list ) {
		out.println( String.format( "%s<br>", value ) );
	}

}
%>

</div>
</body>
</html>





posted by lightbox at 2020-08-14 19:17 | java : JSP | このブログの読者になる | 更新情報をチェックする

2020年08月11日


XAMPP 内 Tomcat Version 7 の設定と簡単な JSP の実行テスト



JDK は、OpenJDK をダウンロードして解凍して、C:\Java に設置したとします。 
( ※ ここでは、8 を使用しました )

▼ 必要なレジストリエントリ( これを手作業で作成します )
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit]
"JavaHome"="C:\\java"


XAMPP は、"C:\xampp" にインストールされているとします。

1) "C:\xampp\tomcat\conf\web.xml" の変更
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>trimSpaces</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>compilerSourceVM</param-name>
        <param-value>1.8</param-value>
    </init-param>
    <init-param>
        <param-name>compilerTargetVM</param-name>
        <param-value>1.8</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>


※ trimSpaces を true にする事によって無駄な改行を省く事ができます( 強調部分を追加です )

※ compilerSourceVM は、Java 8 の新機能を使うのに必要です。
<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>


※ この設定で、その仮想フォルダのファイルの一覧を表示可能にします

2) "C:\xampp\tomcat\conf\server.xml" の変更
※ Tomcat7 のみ。Tomcat8 以降は必要ありません
<Connector
	port="8080"
	protocol="HTTP/1.1"
	connectionTimeout="20000"
	redirectPort="8443"
	URIEncoding="UTF-8" />

ここまでで、いったん起動すると C:\xampp\tomcat\conf\Catalina\localhost が作成されます。

※ 本文が UTF-8 で記述するという前提のお話です。( 8080 で検索してコメントでないエントリに追加 )

3) ソースコードを配置する場所の定義

※ "C:\xampp\tomcat\conf\Catalina\localhost" に以下のファイルを作成します。
※ ソースコードを "C:\user\lightbox\tomcat" に lightbox.xml として作成するとします
<Context
	displayName="Web Application Home"
	docBase="C:\user\lightbox\tomcat"
	path="/lightbox"
	reloadable="true"
	useNaming="false">
</Context>

▼ 以下サンプルです
sample_01.jsp
<%@ page
	language="java"
	contentType="text/html;charset=utf-8" %>
<%!
// *********************************************************
// ローカル関数
// *********************************************************
public String printFor( int count ) {

	String ret = "";

	for( int i = 0; i < count; i++ ) {
		ret += String.format( "%d<br>", i+1 );
	}

	return ret;
}
%>
<%
// *********************************************************
// ページ処理
// *********************************************************
request.setCharacterEncoding("utf-8");

String strField = request.getParameter("field");
if ( strField == null ) {
	strField = "";
}

%>
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css">

<style>
#main {
	padding: 30px;
	font-size: 24px;
}

form {
	margin-bottom: 20px;
}
</style>
</head>
<body>
<div id="main">

<form method="get">
	<input type="text" name="field" value="<%= strField %>">
	<input type="submit" name="send" value="GET">
</form>

<% 
out.println( printFor(15) ); 
%>

</div>
</body>
</html>


sample_02.jsp

request.setCharacterEncoding は、POST で必要でした。
<%@ page
	language="java"
	contentType="text/html;charset=utf-8" %>
<%!
// *********************************************************
// ローカル関数
// *********************************************************
public String printFor( String[] data ) {

	String ret = "";

	for( int i = 0; i < data.length; i++ ) {
		ret += String.format( "%s<br>", data[i] );
	}

	return ret;
}
%>
<%
// *********************************************************
// ページ処理
// *********************************************************
request.setCharacterEncoding("utf-8");

String strField1 = request.getParameter("field1");
if ( strField1 == null ) {
	strField1 = "";
}

String strField2 = request.getParameter("field2");
if ( strField2 == null ) {
	strField2 = "";
}

String[] month = {"睦月","如月","弥生","卯月","皐月","水無月","文月","葉月","長月","神無月","霜月","師走"};

%>
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css">

<style>
#main {
	padding: 30px;
	font-size: 24px;
}

form {
	margin-bottom: 20px;
}

.btn {
	vertical-align: top;
}
</style>
</head>
<body>
<div id="main">

<form method="get">
	<input type="text" name="field1" value="<%= strField1 %>">
	<input type="submit" name="send" value="GET" class="btn btn-info">
</form>

<form method="post">
	<input type="text" name="field2" value="<%= strField2 %>">
	<input type="submit" name="send" value="POST" class="btn btn-info">
</form>


<div class="alert alert-primary"><%= request.getMethod() %></div>

<% 
out.println( printFor(month) ); 
%>

</div>
</body>
</html>



posted by lightbox at 2020-08-11 13:50 | java : JSP | このブログの読者になる | 更新情報をチェックする

2020年01月20日


JDK がインストールされていない PC の XAMPP の TOMCAT を Pleiades の JDK8 で動作させる

catalina_start.bat より、レジストリに 『HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit』が存在する必要があるのが解ります。

さらに、そのキー以降のどこかに JavaHome の値として実際のパスが必要です。

▼ 必要なレジストリエントリ( これを手作業で作成します )
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit]
"JavaHome"="C:\\pleiades\\java\\8"



catalina_start.bat
@echo off
::::::::::::::::::::::::::::::::::::
::  Set JAVA_HOME and   ::
::::::::::::::::::::::::::::::::::::

IF EXIST tomcat\logs\catalina.pid (
  del /F/Q tomcat\logs\catalina.pid
) 

echo.
echo [XAMPP]: Searching JDK HOME with reg query ...
set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit

reg query "%KeyName%" /s
if %ERRORLEVEL% == 1 (
  echo . [XAMPP]: Cannot find current JDK installation! 
  echo . [XAMPP]: Cannot set JAVA_HOME. Aborting ...
  goto :END
)

set "CURRENT_DIR=%cd%"
set "CATALINA_HOME=%CURRENT_DIR%"

:: only for windows 32 bit if you have problems with the tcnative-1.dll
:: set CATALINA_OPTS=-Djava.library.path="%CATALINA_HOME%\bin"

set Cmd=reg query "%KeyName%" /s
for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j

echo.
echo [XAMPP]: Seems fine!
echo [XAMPP]: Set JAVA_HOME : %JAVA_HOME%
echo [XAMPP]: Set CATALINA_HOME : %CATALINA_HOME%
echo.

if %ERRORLEVEL% == 0 (
echo run > logs\catalina.pid
)

"%CATALINA_HOME%\bin\catalina.bat" run


:END
echo done.
pause



このページの PDF




posted by lightbox at 2020-01-20 12:10 | java : JSP | このブログの読者になる | 更新情報をチェックする

2017年04月15日


Pleiades All in One(NEON) で、サーブレットとJSP を作成する手順

関連する記事

Pleiades All in One(NEON) で、Windows アプリを作成する手順( WindowBuilder )

Pleiades All in One(NEON) には、Tomcat8 が同梱されているので普通にすぐ使えます。(Tomcat6とTomcat7 も入ってます)

(少なくとも単独起動に必要です)

プロジェクト作成

▼ 動的 Web プロジェクトを作成します




サーブレット作成



初期のソース


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class WebApp
 */
@WebServlet("/WebApp")
public class WebApp extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public WebApp() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}


パースペクティブを Java EE にして実行







JSP 作成



▼ ソースを以下に変更して実行
( 全て保存して http://localhost:8080/Web1/NewFile.jsp にアクセス )
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP シンプル</title>
</head>
<body>

こんにちは!

</body>
</html>

サーブレットを以下のように変更

変更後、全て保存して実行( サーバは再起動 )



import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;

@WebServlet("/WebApp")
public class WebApp extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

	public WebApp() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PageContext pageContext = _jspxFactory.getPageContext(this, request, response,
	  			null, true, 8192, true);
	JspWriter out = pageContext.getOut();


	response.setContentType("text/html; charset=UTF-8");

	out.write("<!DOCTYPE html>\r\n");
	out.write("<html>\r\n");
	out.write("<head>\r\n");
	out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
	out.write("<title>Insert title here</title>\r\n");
	out.write("</head>\r\n");
	out.write("<body>\r\n");
	out.write("\r\n");
	out.write("こんにちは!\r\n");
	out.write("\r\n");
	out.write("</body>\r\n");
	out.write("</html>");

	_jspxFactory.releasePageContext(pageContext);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

※ JSP がコンパイルされた結果の java ソースコードより転用しています

C:\user\java\Web170415a がワークスペースです
C:\user\java\Web170415a\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\Web1\org\apache\jsp\NewFile_jsp.java
posted by lightbox at 2017-04-15 22:25 | java : JSP | このブログの読者になる | 更新情報をチェックする

2011年10月09日


JSP : 実行中の .jsp と同じフォルダにあるファイルの実際のパスを取得する

jajakarta の 日本語ページドキュメントは日本語が化けるので調べるのが
面倒ですが、application.getRealPath と、request.getServletPath
で実現可能です。

// この値はCGI変数のSCRIPT_NAMEと同じ値
String SCRIPT_NAME = request.getServletPath();
out.print( SCRIPT_NAME );
out.print( "<br />" );

// 文字列分解
String[] pathResult = SCRIPT_NAME.split("/");

// 分解した文字列を必要な部分再配置
int idx = pathResult.length;
String mainPath = "";
for( int i = 1; i < pathResult.length - 1; i++ ) {
	if ( i == 1 ) {
		mainPath += pathResult[i];
	}
	else {
		mainPath += ( "/" + pathResult[i] );
	}
}

// 再配置文字列
out.print( mainPath );
out.print( "<br />" );

// 目的のフルパス
String strRealPath = application.getRealPath( mainPath + "/mydata.txt" );
out.print( strRealPath );
out.print( "<br />" );



posted by lightbox at 2011-10-09 20:09 | java : JSP | このブログの読者になる | 更新情報をチェックする

2011年10月04日


java(JSP) : テーブル名一覧と列名一覧の取得

テータベースは、ODBC 経由の Oracle です

関連する記事

VB.net : GetSchema メソッドでデータベース内のテーブル一覧と指定したテーブルの列名一覧を取得する

Microsoft の ODBC アクセスとあまり変わりはありません。
データベースの情報は接続オブジェクトに依存します
続きを読む( ソースコード )

posted by lightbox at 2011-10-04 14:12 | java : JSP | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり