📄 appletlogin.java
字号:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class AppletLogin extends HttpServlet
{
public static String USER_KEY = "ServletLogin.user";
static java.util.Hashtable crossRef;
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, java.io.IOException
{
// 设置输出类型
resp.setContentType("text/html");
// 定义个PrinterWriter变量来输出内容
java.io.PrintWriter out = resp.getWriter();
// 设置响应头
// 强制页面从server端输出
// 而不是从缓存(cache)中输出
resp.setHeader("Expires", "Tues, 01 Jan 1980 00:00:00 GMT");
// 通过session获取当前用户
// 通过Form获取用户和密码
HttpSession session = req.getSession(true);
String user = (String) session.getValue(USER_KEY);
if (user == null) {
// 检查交叉引用表
user = (String) crossRef.get(session.getId());
if (user != null) {
// 在表中发现用户
// 于是把用户存入session中
// 同时从交叉引用表中删除
session.putValue(USER_KEY, user);
crossRef.remove(session.getId());
}
}
if (user == null) {
// 如果没有发现用户,则显示初始的登录界面
login(out, req);
return;
}
// 打印标准头
//显示登录成功的信息
out.println("<html>");
out.println("<head>");
out.println("<title>欢迎光临</title>");
out.println("</head>");
out.println("<body>");
out.println("<center><h2>登录成功!</h2>");
out.println("<br>");
out.println("</center>");
out.println("</body>");
out.println("</html>");
out.flush();
}
public void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, java.io.IOException
{
// 得到输入流,用来读取客户端的数据
DataInputStream in =
new DataInputStream(req.getInputStream());
// 把二进制送回客户端,
// 需要正确设置content-type的值
resp.setContentType("application/octet-stream");
// 数据必须写入一个字节缓冲区中
// 这样我们就可以告诉客户端数据的长度
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
// 创建一个输出流,
// 把数据写入缓冲区
DataOutputStream out = new DataOutputStream(byteOut);
// 读出正确的session
String sessionId = in.readUTF();
// 读取用户名和密码
String user = in.readUTF();
String password = in.readUTF();
// 验证用户身份
if (validUser(user, password)) {
// 返回一个boolean类型的值
// 代表用户是否合法
out.writeBoolean(false);
}
else {
// 如果用户合法,设置相应的交叉引用表
// 同时返回一个boolean值表示用户合法
crossRef.put(sessionId, user);
out.writeBoolean(true);
// 输出下一个将要显示的页面的URL
out.writeUTF("http://10.9.41.41:8080/star" + req.getRequestURI());
}
// 把输出强制写入缓冲区
out.flush();
// 获得保存返回内容的缓冲区地址
byte[] buf = byteOut.toByteArray();
// 通知客户端发送的数据是多少
resp.setContentLength(buf.length);
// 把缓冲区内容输出到客户端
ServletOutputStream servletOut = resp.getOutputStream();
servletOut.write(buf);
servletOut.close();
}
//下面是登录页面,包含了LoginApplet
protected void login(java.io.PrintWriter out,
HttpServletRequest req)
throws java.io.IOException
{
HttpSession session = req.getSession(true);
out.println("<html>");
out.println("<head>");
out.println("<title>Login</title>");
out.println("<center><h2>欢迎光临,请您先登录</h2>");
out.println("<applet width=200 height=120");
out.println(" name=\"LoginApplet\"");
out.println(" codebase=\"http://10.9.41.41:8080/star\"");
out.println(" code=\"LoginApplet\">");
out.println("<param name=\"servlet\" value=\"" +
req.getRequestURI() + "\">");
out.println("<param name=\"id\" value=\"" +
session.getId() + "\">");
out.println("</applet>");
out.println("</center></body></html>");
}
//下面这个函数用来验证用户是否合法
protected boolean validUser(String username, String password)
{
boolean valid = false;
// 对用户身份进行简单认证
if ((username != null) && (username.length() > 0)) {
valid = username.equals(password);
}
return valid;
}
//重载servlet的初始化函数
public void init(ServletConfig cfg)
throws ServletException
{
// 创建一个交叉引用表(哈希表)
if (crossRef == null) {
crossRef = new java.util.Hashtable();
}
super.init(cfg);
}
public void destroy()
{
super.destroy();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -