1.创建登录页面同时判断session是否为空
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取Session中的数据
HttpSession session = req.getSession();
String str=(session.getAttribute("flag")==null?"":"用户名或密码错误");
//销毁session
session.invalidate();
//获取请求信息
//处理请求信息
//响应处理结果
//直接响应
resp.getWriter().write("<html>");
resp.getWriter().write("<head>");
resp.getWriter().write("</head>");
resp.getWriter().write("<body>");
resp.getWriter().write("<form action='user' method='get'>");
resp.getWriter().write("<font color='red'>"+str+"</font>");
resp.getWriter().write(" 用户名:<input type='text' name='uname' value=''/><br />");
resp.getWriter().write(" 密码:<input type='password' name='pwd' value=''/><br />");
resp.getWriter().write("<input type='submit' value='登录'/><br />");
resp.getWriter().write("</form>");
resp.getWriter().write("</body>");
resp.getWriter().write("</html>");
}
}
2.创建用户登录判断的serverlet看用户名密码是否错误,同时成功后计数
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 处理用户登录
* @author 赵广陆
*/
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
String uname=req.getParameter("uname");
String pwd=req.getParameter("pwd");
//处理请求信息
//校验用户信息
if("zhangsan".equals(uname) && "123".equals(pwd)){
//登录成功
//获取ServletContext对象
ServletContext sc=this.getServletContext();
//获取计数器
Object obj=sc.getAttribute("nums");
//判断
if(obj!=null){
//计数器数据自增
int nums=(int) obj;
nums=nums+1;
//存储计数器数据到ServletContext对象
sc.setAttribute("nums", nums);
}else{
sc.setAttribute("nums",1);
}
//创建Session对象
HttpSession hs=req.getSession();
//存储数据
hs.setAttribute("uname",uname);
//响应处理结果(重定向到登录成功的Servlet)
resp.sendRedirect("main");
}else{
//登录失败
//创建Session并增加登录失败标记
HttpSession session = req.getSession();
session.setAttribute("flag","loginFalse");
//响应处理结果(重定向到登录页面)
resp.sendRedirect("login");
}
}
}
3.计数功能
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
/**
* 1、在服务器关闭的时候将ServletContext中的计数器数据存储到nums.txt中
* 2、在服务器启动的时候将nums.txt中的数据存储到ServletContext中
*
*
*
*
* @author MyPC
*
*/
public class NumServlet extends HttpServlet {
//在服务器启动的时候将nums.txt中的数据存储到ServletContext中
@Override
public void init() throws ServletException {
//获取ServletContext对象
ServletContext sc=this.getServletContext();
//获取nums.txt中存储的浏览器次数
//获取nums.txt的绝对路径(动态获取)
String path=sc.getRealPath("num/nums.txt");
//创建File对象
File f=new File(path);
//读取nums.txt中的数据
//获取资源流对象
BufferedReader br=null;
InputStreamReader is=null;
FileInputStream fs=null;
try {
fs=new FileInputStream(f);
is=new InputStreamReader(fs);
br=new BufferedReader(is);
//读取
String nums=br.readLine();
//将数据存储到ServletContext中
sc.setAttribute("nums",Integer.parseInt(nums));
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭流资源
try {
fs.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//在服务器关闭的时候将ServletContext中的计数器数据存储到nums.txt中
@Override
public void destroy() {
//获取ServletContext对象
ServletContext sc=this.getServletContext();
//获取计数器数据
int nums=(int) sc.getAttribute("nums");
//将计数器数据存储到nums.txt文件中
//获取nums.txt文件的绝对路径(动态获取)
String path=sc.getRealPath("num/nums.txt");
//获取nums.txt的File对象
File f=new File(path);
//获取资源的流对象
BufferedWriter bw=null;
OutputStreamWriter ow=null;
FileOutputStream fs=null;
try {
//获取nums.txt的流对象
fs=new FileOutputStream(f);
ow=new OutputStreamWriter(fs);
bw=new BufferedWriter(ow);
//将数据写入到nums.txt中
bw.write(nums+"");
//刷新
bw.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭流资源
try {
fs.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ow.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.登录成功后重定向到成功Severlet
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MainServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
//获取ServletContext对象
ServletContext sc=this.getServletContext();
//获取计数器数据
int nums=(int) sc.getAttribute("nums");
//处理请求信息
//响应处理结果
//直接响应
resp.getWriter().write("<html>");
resp.getWriter().write("<head>");
resp.getWriter().write("</head>");
resp.getWriter().write("<body>");
resp.getWriter().write("<h3>欢迎"+req.getSession().getAttribute("uname")+"访问我的主页</h3>");
resp.getWriter().write("<hr />");
resp.getWriter().write("当前网页浏览器次数为:"+nums);
resp.getWriter().write("</body>");
resp.getWriter().write("</html>");
}
}
运行效果:
1.错误登录
2.正确登录
3.重复登录