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.重复登录