テーブル:zipsのためのCREATE TABLE文
CREATE TABLE zips( jis CHAR(10) DEFAULT '' NOT NULL, old_zip CHAR(5) NOT NULL, zip CHAR(7) NOT NULL, addr1_ruby VARCHAR(10) DEFAULT '' NOT NULL, addr2_ruby TEXT NOT NULL, addr3_ruby TEXT NOT NULL, addr1 VARCHAR(10) DEFAULT '' NOT NULL, addr2 TEXT NOT NULL, addr3 TEXT NOT NULL, addr4 TEXT NOT NULL, establishment_ruby TEXT NOT NULL, establishment TEXT NOT NULL, KEY zip_idx (zip) ) DEFAULT CHARACTER SET utf8;
データのロード
SET NAMES utf8; LOAD DATA LOCAL INFILE "KEN_ALL_UTF8.CSV" INTO TABLE zips FIELDS TERMINATED BY ',' ENCLOSED BY '"' (jis,old_zip,zip,addr1_ruby,addr2_ruby,addr3_ruby,addr1,addr2,addr3); LOAD DATA LOCAL INFILE "JIGYOSYO_UTF8.CSV" INTO TABLE zips FIELDS TERMINATED BY ',' ENCLOSED BY '"' (jis,establishment_ruby,establishment,addr1,addr2,addr3,addr4,zip,old_zip); -- Windowsのコマンドプロンプトでは以下が必要 SET NAMES cp932;
zip.jsp
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>郵便番号検索結果</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
String uri="jdbc:mysql://localhost/mydb?characterEncoding=UTF-8";
Connection conn = DriverManager.getConnection(uri,"test","pass");
String zip=request.getParameter("zip");
PreparedStatement stmt=conn.prepareStatement("SELECT * FROM zips WHERE zip LIKE ?");
stmt.setString(1,zip+"%");
stmt.setMaxRows(100);
ResultSet rs=stmt.executeQuery();
out.print("<ul>");
while(rs.next())
out.println("<li>"
+rs.getString("zip")+": "
+rs.getString("addr1")
+rs.getString("addr2")
+rs.getString("addr3")
+rs.getString("addr4")
+rs.getString("establishment")
+"</li>");
out.print("</ul>");
%>
</body>
</html>
zip.html
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function load(code){
new Ajax.Updater('result','zip.jsp?zip='+code);
}
</script>
<title>郵便番号検索</title>
</head>
<body>
<form action="zip.jsp" method="get">
<p>
<input name="zip" value="" type="text" onkeyup="load(this.value);" />
<input name="submit" value="検索" type="submit" />
</p>
</form>
<div id='result'></div>
</body>
</html>
JDBCRealmを利用するための準備
USE mydb;
CREATE TABLE users (
user_name VARCHAR(15) NOT NULL PRIMARY KEY,
user_pass VARCHAR(15) NOT NULL
);
CREATE TABLE user_roles (
user_name VARCHAR(15) NOT NULL,
role_name VARCHAR(15) NOT NULL,
PRIMARY KEY (user_name, role_name)
);
INSERT INTO users (user_name,user_pass) VALUES ('testA','passA');
INSERT INTO user_roles (user_name,role_name) VALUES ('testA','guest');
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myweb" docBase="myweb" reloadable="true">
<Realm
className="org.apache.catalina.realm.JDBCRealm"
connectionURL="jdbc:mysql://localhost/mydb"
connectionName="test"
connectionPassword="pass"
debug="99"
driverName="com.mysql.jdbc.Driver"
userTable="users"
userNameCol="user_name"
userCredCol="user_pass"
userRoleTable="user_roles"
roleNameCol="role_name" />
</Context>
web.xmlに追記する要素
<security-role>
<role-name>guest</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>secure pages</web-resource-name>
<url-pattern>/HelloWorld.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>guest</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>DIGEST</auth-method>
</login-config>