?? bankbillservlet.java
字號:
package com.chapter16.bankbill;
import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;
import com.chapter16.shared.*;
public class BankBillServlet extends HttpServlet {
protected static final String DBName = "java:/DefaultDS";
private DataSource dataSource;
public void init(ServletConfig config) throws ServletException {
try {
InitialContext ic = new InitialContext();
dataSource = (DataSource) ic.lookup(DBName);
} catch (Exception e) {
e.printStackTrace();
throw new ServletException("init error");
}
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/octet-stream");
InputStream is = request.getInputStream();
OutputStream os = response.getOutputStream();
DataInputStream call = new DataInputStream(is);
DataOutputStream result = new DataOutputStream(os);
//分清楚需要處理的模塊
byte method = call.readByte();
switch (method) {
//處理登錄模塊
case MessageConstants.OPERATION_LOGIN_USER:
login(call,result);
break;
//顯示欠費列表
case MessageConstants.OPERATION_LIST_ACCOUNT:
sendBillInfo(request,response);
break;
case MessageConstants.OPERATION_UPDATE_ACCOUNT:
updateAccount(call,result);
break;
}
response.setContentLength(result.size());
}
private void updateAccount(DataInputStream call,
DataOutputStream result) throws IOException {
byte[] data = new byte[call.readInt()];
call.read(data);
AccountInfo accinfo = new AccountInfo();
accinfo.deserialize(data);
System.out.println(accinfo.getUserName());
System.out.println(accinfo.getPassword());
System.out.println(accinfo.getCreditCardHolderName());
System.out.println(accinfo.getCreditCardNumber());
//進行數據庫驗證是否用戶名和密碼合法
//這里省略了數據庫的驗證部分,直接返回一個合法的信息
//如果成功登錄返回1
result.writeInt(1);
return;
}
private void login(DataInputStream call,
DataOutputStream result) throws IOException{
String username = call.readUTF();
String password = call.readUTF();
System.out.println(username);
System.out.println(password);
//進行數據庫驗證是否用戶名和密碼合法
//這里省略了數據庫的驗證部分,直接返回一個合法的信息
//如果成功登錄返回1
result.writeInt(1);
return;
}
private void sendBillInfo(HttpServletRequest request,
HttpServletResponse response) throws IOException{
Connection conn;
response.setContentType("application/octet-stream");
OutputStream os = response.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
try {
conn = dataSource.getConnection();
//獲得行數
PreparedStatement ps1 = conn.prepareStatement("SELECT COUNT(*) As rowcount"
+ " FROM BANKBILL");
ResultSet rs1 = ps1.executeQuery();
rs1.next();
int num = rs1.getInt("rowcount");
rs1.close();
ps1.close();
PreparedStatement ps = conn.prepareStatement("SELECT *"
+ " FROM BANKBILL");
ResultSet rs = ps.executeQuery();
//發送賬單數目
dos.writeInt(num);
BillInfo binfo = new BillInfo();
while (rs.next()) {
binfo.setBilldate(rs.getString(1));
binfo.setMoney(rs.getString(2));
binfo.setReason(rs.getString(3));
byte[] data = binfo.serialize();
//一條記錄的長度
dos.writeInt(data.length);
//發送賬單數據
dos.write(data);
System.out.println(rs.getString(1));
}
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
response.setContentLength(dos.size());
dos.close();
os.close();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -