サーブレット アプレット通信プログラムの開発中にセッションの問題が発生しました。ユーザーのログインに成功した後、jsp にログイン ページがあり、ユーザーをアプレットのある index.jsp ページに誘導しています。index.jsp にリダイレクトする前に、サーブレットでセッション変数を設定しました。私のアプレットでは、セッションで設定されたデータと、データベースおよびプロパティ ファイルからのデータを取得する必要があります。私のコードは
//サーブレットです
if(action.equals("login")){
uinfo = new UserInformation();
String uid = request.getParameter("txt_UserName");
String pwd = request.getParameter("pwd_PassWord");
int i = uinfo.authenticateUser(uid, pwd);
//System.out.println(i);
if(i==1){
session.setAttribute("uName", uid);
request.getRequestDispatcher("index.jsp").forward(request, response);
else if(action.equals("applet")){
try{
output = new ObjectOutputStream(response.getOutputStream());
uinfob= new UserInformationBean();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(path+"/connection.properties"));
} catch (IOException ex) {
ex.printStackTrace();
}
uinfob.setHost(prop.getProperty("host"));
uinfob.setIs_Active("Y");
uinfob.setUid(session.getAttribute("uName").toString());
output.writeObject(uinfob);
output.flush();
//output.close();
}catch(IOException iox){
iox.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
output.close();
}
}
私のアプレットで
public void init() {
try{
String queryString="action=applet";
URL codeBase = getCodeBase();
URL servletURL = new URL(codeBase.getProtocol(), codeBase.getHost(), codeBase.getPort(), "/SwingBrowser1/UserServlet?"+queryString);
servletConnection = servletURL.openConnection();
servletConnection.setDoInput(true);
servletConnection.setDoOutput(true);
servletConnection.setUseCaches(false);
servletConnection.setDefaultUseCaches(false);
servletConnection.setRequestProperty("Content-Type","application/octet-stream");
getData();
}catch(Exception e){
e.printStackTrace();
}
}
// TODO overwrite start(), stop() and destroy() methods
public void getData()
{
try{
ObjectInputStream input = new ObjectInputStream(servletConnection.getInputStream());
UserInformationBean uib =(UserInformationBean)input.readObject();
System.out.println(uib.getHost()+"-------------"+uib.getIs_Active()+"-----------------"+uib.getUid());
input.close();
}
catch( Exception e)
{
e.printStackTrace();
}
java.io.EOFException エラーが発生しており、サーブレットの else ブロックで sop を使用してこれをテストしました。前に設定した属性がnull値を返しています。