第16回セミナー †
サーブレットの続き †
セッション管理 †
- HttpSessionクラスを用いると、Cookieベースのセッション管理を行うことができる。
- Cookieを使うので、データはクライアントサイドに保存される。
- getAttribute(),setAttribute()メソッドでデータの読み出し、保存が可能。
- セッションの保存はブラウザによって挙動が異なる。
- Chromeでは、ブラウザを閉じてもセッションは継続される。(Tomcatを再起動すると消えるが、それ以外にも消えるタイミングがあるかもしれない)
- IEでは、ブラウザを閉じるとセッションも破棄される。
リスエスとの転送 †
- ReequestDispatcherを使うと、HTTPリクエストを他のページに転送することができる。
- 転送先はページではなくサーブレットでもよい。
フィルタについて †
- 対象のフォルダ内のすべてのサーブレット対して、フィルタを設定することができる。
- フィルタは、サーブレットにデータが渡される前と、渡された後に特定の処理を行うことができるようにする機能。
- フィルタを使うには、web.xmlに<filter>と<filter-mapping>タグを記述する必要がある。
認証について †
- サーブレットにアクセスする際にユーザ名とパスワードによるBASIC認証を行うことができる。(他の認証方式については各自調べてください)
- web.xmlにセキュリティ関係のタグを記述する必要がある。
- ユーザ情報は、Tomcatのconfフォルダ内のtomcat-user.xmlファイルに記述する。(教科書のp.473)
JSP(Java Server Pages) †
- JSPは、HTML文書内にJavaのコードを埋め込む技術。
- サーブレットを使うのに比べて、かなり簡単にサーバーサイドの処理を行うことができる。
週間予約アプリの作成 †
- 月~金の8:00~18:00までの間の予約が可能なWebアプリを作成した。
- JSPから別のクラスを読み込む方法がわからなかったため、強引のincludeしている。
- やはり、パッケージに入れないと読み込めないらしい。
- サーバー上のローカルファイルに保存して、ページごとに読み込んで使っている。
Reservation.jsp †
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ include file="ReservationModel.jsp" %>
<%
String path=application.getRealPath("reservation.dat");
ReservationModel rm=new ReservationModel();
rm.open(path);
%>
<html>
<head><title>週間予定表</title></head>
<body>
<h1>週間予定表</h1>
<%
String[] col_name={ "時間","月","火","水","木","金" };
%>
<form action="http://localhost:8080/K07/Reservation2.jsp" method="get">
<select name="WEEK">
<%
for(int i=1;i<col_name.length;i++)
out.println("<option value="+i+">"+col_name[i]+"</option>");
%>
</select>
<select name="TIME">
<%
for(int i=0;i<11;i++){
out.println("<option value="+i+">"+(i+8)+":00</option>");
}
%>
</select>
<input type=text name="CONTENT" size=30 />
<input type=submit value="予約" />
</form>
<table border=1>
<%
for(int c=0;c<6;c++){
out.println("<th width=100>"+col_name[c]+"</th>");
}
for(int r=0;r<11;r++){
out.println("<tr>");
for(int c=0;c<6;c++){
String s=(c==0)?(r+8)+":00":rm.get(c,r);
out.println("<td align=center>"+s+"</td>");
}
out.println("</tr>");
}
%>
</table>
</body>
</html>
Reservation2.jsp †
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ include file="ReservationModel.jsp" %>
<%
int week=Integer.parseInt(request.getParameter("WEEK"));
int time=Integer.parseInt(request.getParameter("TIME"));
String tmp=request.getParameter("CONTENT");
String content=new String(tmp.getBytes("8859_1"),"JISAutoDetect");
String path=application.getRealPath("reservation.dat");
ReservationModel rm=new ReservationModel();
rm.open(path);
rm.add(week,time,content);
rm.save(path);
%>
<jsp:forward page="Reservation.jsp" />
ReservationMode.jsp †
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%
class ReservationModel{
HashMap<String,String> map;
// 生成
public ReservationModel(){
map=new HashMap<String,String>();
}
// 予約を追加する
public void add(int w,int t,String c){
String key=w+":"+t; // "3:7"など
map.put(key,c);
}
// 予約を取り出す
public String get(int w,int t){
String key=w+":"+t;
String c=map.get(key);
return (c==null)?"":c;
}
// 保存する
public void save(String path){
try{
ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream(path));
os.writeObject(map);
os.close();
}
catch(IOException e){}
}
// 予約モデルを作成する
public void open(String path) throws IOException {
try{
ObjectInputStream is=new ObjectInputStream(new FileInputStream(path));
map=(HashMap<String,String>)is.readObject();
is.close();
}
catch(ClassNotFoundException e){}
catch(IOException e){}
}
}
%>
Javaセミナー2014