Session实现登陆注销中遇到的问题
- 代码
- 问题
这次因为要写一个输入输出功能,所以就先学习了简单的例子,但是在这之中还是出现了很多问题!!
代码
1、先创建一个静态html界面作为登陆界面
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆界面</title>
</head>
<body>
<form action="http://localhost:8080/Servlet_war_exploded/Servlet/LoginServlet" method="post">
帐号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
2、创建一个登陆功能的servlet
package servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import static java.lang.Thread.sleep;
public class LoginServlet extends HttpServlet {
/**
* @category 使用Session处理用户登陆
* @author Bird
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
List<User> list = Db.getAll();
for(User u: list){
if(u.getUsername().equals(username) && u.getPassword().equals(password)){
request.getSession().setAttribute("user", u);//登录成功,将用户数据放入到Session中
response.sendRedirect("http://localhost:8080/Servlet_war_exploded/jsp/index.jsp");
return;//进行重定向,并且下面的代码不再执行
}
}
out.write("<script language='javascript'>alert('error');window.location.href='http://localhost:8080/Servlet_war_exploded/index.html';</script>");
// out.write("您的用户名或密码错误");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
3、创建一个简单的数据库
DB.java
package servlet;
import java.util.ArrayList;
import java.util.List;
class Db{
public static List<User> list = new ArrayList<User>();
static{
list.add(new User("aaa","123"));
list.add(new User("bbb","123"));
list.add(new User("ccc","123"));
}
public static List<User> getAll(){
return list;
}
}
4、创建一个User类
User.java
package servlet;
/**
* @category 封装用户的数据的对象
* @author Bird
*
*/
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
5、注销代码
package servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class LoginOutServlet extends HttpServlet {
/**
* @category 退出登录的Servlet,注销
* @author Bird
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(false);//防止创建Session
if(session == null){
response.sendRedirect("http://localhost:8080/Servlet_war_exploded/jsp/index.jsp");
return;
}
session.removeAttribute("user");
response.sendRedirect("http://localhost:8080/Servlet_war_exploded/index.html");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
最后是要进入的页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
欢迎您,${user.username}<br>
<a href="http://localhost:8080/Servlet_war_exploded/Servlet/LoginOutServlet">退出登录</a>
</body>
</html>
到这就实现了简单的登录登出功能了。
遇到的问题
在这之中遇到了很多问题,发现页面的定向也不对,方法调用也出了问题。最后发现问题都是在跳转的时候链接地址的错误,或者是启动页面的错误。所以认真修改url路径,看好自己要去的地方到底是哪里,就可以很好的解决问题了!!
收获虽然不多,但是也是一个很好的学习过程了。