登录页面 login.jsp
校验用户 LoginServlet.java
登录成功 succ1.jsp
只是小实验,所以没有连接数据库。
首先,登录页面是一个简单的提交表单。
<h1>大写的登陆h1><br/>
<font color="red"><b><%=message %>b>font>
<form action="/day_11-3/LoginServlet" method="post">
用户: <input type="text" name="username" value="<%=uname %>"/><br/>
密码: <input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
form>
这是用户输入错误时,返回的错误信息:
<%
String message = "";
String msg = (String)request.getAttribute("msg");//获取错误信息
if(msg != null){
message = msg;
}
%>
然后,用户如果登录成功一次,在下次访问该登录页面会有用户名缓存,通过cookie来实现:
<%-- 读取cookies --%>
<%
String uname = ""; //先将字符串设置为空
Cookie[] cs = request.getCookies();//获取请求中所有的cookies
if(cs != null){
for(Cookie c : cs){ //遍历cookies
if("uname".equals(c.getName())){ //查找名为name的cookie
uname = c.getValue(); //获取他的值
}
}
}
%>
下来我们看一下LoginServlet,
这里要注意字符编码问题,所以我们直接设置为utf-8
request.setCharacterEncoding("utf-8");
接下来,获取表单参数:
//获取参数
String username = (String)request.getParameter("username");
String password = (String)request.getParameter("password");
验证用户:假设只有当用户名为 zhangsan,密码为111时才正确。
if("zhangsan".equals(username) && "111".equals(password)){
//登陆成功
//把用户名保存到cookie中,发给客户端
Cookie cookie = new Cookie("uname",username);
cookie.setMaxAge(60*60*24);//保存一天
response.addCookie(cookie);
/*
* 3.保存用户信息到session中
* 4.重定向到succ1.jsp
*/
HttpSession session = request.getSession();
session.setAttribute("username", username);
response.sendRedirect("/day_11-3/session2/succ1.jsp");
}else{//登录失败
/*
* 5.保存错误信息到request域中
* 6.转发到login.jsp
*/
request.setAttribute("msg", "用户名或密码错误");
RequestDispatcher qr = request.getRequestDispatcher("/session2/login.jsp");
qr.forward(request,response);
}
这里,我们要注意一下,cookie不能有中文。
还有一种情况,是用户直接访问登录成功的页面,我们会判定用户是否已经登录,如果没有,则返回到登录页面。
String username = (String)session.getAttribute("username");
if(username == null) {
out.print("");
out.print("请您先登录");
out.print("");
return;
}
这里还有一个succ2页面,即当用户登录成功,服务器会创建一个session,在会话过程中,用户访问其他页面,不用重新登录。
以下是源代码:
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<h1>大写的登陆h1><br/>
<%-- 读取cookies --%>
<%
String uname = "";
Cookie[] cs = request.getCookies();//获取请求中所有的cookies
if(cs != null){
for(Cookie c : cs){ //遍历cookies
if("uname".equals(c.getName())){ //查找名为name的cookie
uname = c.getValue(); //获取他的值
}
}
}
%>
<%
String message = "";
String msg = (String)request.getAttribute("msg");//获取错误信息
if(msg != null){
message = msg;
}
%>
<font color="red"><b><%=message %>b>font>
<form action="/day_11-3/LoginServlet" method="post">
用户: <input type="text" name="username" value="<%=uname %>"/><br/>
密码: <input type="password" name="password"/><br/>
<input type="submit" value="登陆"/>
form>
body>
html>
LoginServlet.java
package cn.itcast.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 1.获取表单数据
*/
//处理中文问题
request.setCharacterEncoding("utf-8");
//获取参数
String username = (String)request.getParameter("username");
String password = (String)request.getParameter("password");
/*
* 2.验证用户名和密码是否正确
*/
if("zhangsan".equals(username) && "111".equals(password)){
//登陆成功
//把用户名保存到cookie中,发给客户端
Cookie cookie = new Cookie("uname",username);
cookie.setMaxAge(60*60*24);//保存一小天
response.addCookie(cookie);
/*
* 3.保存用户信息到session中
* 4.重定向到succ1.jsp
*/
HttpSession session = request.getSession();
session.setAttribute("username", username);
response.sendRedirect("/day_11-3/session2/succ1.jsp");
}else{//登录失败
/*
* 5.保存错误信息到request域中
* 6.转发到login.jsp
*/
request.setAttribute("msg", "用户名或密码错误");
RequestDispatcher qr = request.getRequestDispatcher("/session2/login.jsp");
qr.forward(request,response);
}
}
}
succ1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'succ1.jsp' starting pagetitle>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
head>
<body>
<h1>succ1h1>
<%
//这里是从网址直接访问登录成功的页面,会先判定是否是登录进来的
String username = (String)session.getAttribute("username");
if(username == null) {
//重定向到登录页面
//request.setAttribute("msg", "您还没有登录,请先登录");
// request.getRequestDispatcher("/session2/login.jsp").forward(request, response);
//给用户一个登录链接
out.print("/day_11-3/session2/login.jsp\">");
out.print("请您先登录");
out.print("");
return;
}
%>
<%=username %>您好,欢迎登陆
body>
html>