zoukankan      html  css  js  c++  java
  • 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)

    遇见前文的注冊模块,本篇是登录模块。主要包含登录主界面,和登录相关编写的LoginAction、LoginDao和LoginService。以及配置的Filter。以下按逻辑顺序记录具体过程和代码:

    一、在前文的index文件夹点击登录button后。通过javascript跳转至LoginAction。

    <script type="text/javascript">
     function login(){
       var th = document.form1;
       if(th.username.value==""){
          alert("用户名不能为空!

    。"); th.username.focus(); return ; } if(th.pswd.value==""){ alert("password不能为空!

    "); th.pswd.focus(); return ; } th.action="<%=path%>/servlet/LoginAction"; th.submit(); } </script>


    二、就是关于登录这个事件,须要创建三个文件各自是LogingAction,是个Servlet。LoginService是个接口,LoginDao实现上面的接口,查询数据库。

    跟前文的注冊模块一样的哈。

    LogingAction.java

    package com.product.login.action;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.product.login.dao.LoginDao;
    import com.product.login.service.LoginService;
    
    public class LoginAction extends HttpServlet {
    
    	private LoginService service;
    	/**
    	 * Constructor of the object.
    	 */
    	public LoginAction() {
    		super();
    	}
    
    	/**
    	 * Destruction of the servlet. <br>
    	 */
    	public void destroy() {
    		super.destroy(); // Just puts "destroy" string in log
    		// Put your code here
    	}
    
    	/**
    	 * The doGet method of the servlet. <br>
    	 *
    	 * This method is called when a form has its tag value method equals to get.
    	 * 
    	 * @param request the request send by the client to the server
    	 * @param response the response send by the server to the client
    	 * @throws ServletException if an error occurred
    	 * @throws IOException if an error occurred
    	 */
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		this.doPost(request, response);
    	}
    
    	/**
    	 * The doPost method of the servlet. <br>
    	 *
    	 * This method is called when a form has its tag value method equals to post.
    	 * 
    	 * @param request the request send by the client to the server
    	 * @param response the response send by the server to the client
    	 * @throws ServletException if an error occurred
    	 * @throws IOException if an error occurred
    	 */
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html; charset=utf-8");
    		String path = request.getContextPath();
    		PrintWriter out = response.getWriter();
            String username = request.getParameter("username");
            String pswd = request.getParameter("pswd");
            List<Object> params = new ArrayList<Object>();
            params.add(username);
            params.add(pswd);
            boolean flag = service.login(params);
            out.println("username = " + username);
            out.println("pswd = " + pswd);
            
            if(flag){
            request.getSession().setAttribute("username", username);
            response.sendRedirect(path + "/main.jsp");
            }else{
            	out.println("登录失败 ");
            }
    		out.flush();
    		out.close();
    	}
    
    	/**
    	 * Initialization of the servlet. <br>
    	 *
    	 * @throws ServletException if an error occurs
    	 */
    	public void init() throws ServletException {
    		// Put your code here
    		service = new LoginDao();
    	}
    
    }
    

    要点:创建一个Session,将username存进去传递给main.jsp。

    也即在main.jsp的时候我要知道当前是谁在登录。

            if(flag){
            request.getSession().setAttribute("username", username);
            response.sendRedirect(path + "/main.jsp");
            }

    LoginService.java

    package com.product.login.service;
    
    import java.util.List;
    
    public interface LoginService {
    	public boolean login(List<Object> params);
    }

    LoginDao.java

    package com.product.login.dao;
    
    import java.util.List;
    import java.util.Map;
    
    import com.product.jdbc.dbutil.JdbcUtils;
    import com.product.login.service.LoginService;
    
    public class LoginDao implements LoginService {
    	private JdbcUtils jdbcUtils;
    	public LoginDao(){
    		jdbcUtils = new JdbcUtils();
    	}
    	@Override
    	public boolean login(List<Object> params) {
    		// TODO Auto-generated method stub
    		boolean flag = false;
    		String sql = "select * from userinfo where username = ?

    and pswd = ?"; try{ jdbcUtils.getConnection(); Map<String, Object> map = jdbcUtils.findSimpleResult(sql, params); flag = (!map.isEmpty()) ?

    true : false; }catch(Exception e){ e.printStackTrace(); }finally{ jdbcUtils.releaseConn(); } return flag; } }


    三、这样假设登录成功的话就跳转到了main.jsp界面:


    main.jsp代码例如以下:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    	String path = request.getContextPath();
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/frameset.dtd">
    <HTML xmlns="http://www.w3.org/1999/xhtml">
    <HEAD>
    <TITLE>后台管理系统</TITLE>
    <META http-equiv=content-type content="text/html; charset=utf-8">
    </HEAD>
    <FRAMESET rows=105,* cols="*" bordercolor="04376E">
    	<FRAME name=ads marginWidth=0 marginHeight=0 src="<%=path%>/top.jsp"
    		frameBorder=0 noResize scrolling=no longDesc="">
    	<FRAMESET rows=675 cols=198,* frameborder="yes">
    		<FRAME name=list marginWidth=0 marginHeight=0 src="<%=path%>/left.jsp"
    			frameBorder=0 noResize scrolling=yes longDesc="">
    		<FRAME name=main marginWidth=0 marginHeight=0
    			src="<%=path%>/postdata.jsp" frameBorder=0 scrolling=yes longDesc="">
    	</FRAMESET>
    	<NOFRAMES>
    	</NOFRAMES>
    </FRAMESET>
    <body>
    </body>
    </HTML>
    

    能够看到main.jsp在书写上利用了<frameset>标签。在里面嵌套<frame>,各自是top.jsp left.jsp postdata.jsp.使用说明參见:链接1 链接2

    在index.jsp里添加了底部的jsp,使用的是iframe:

    <IFRAME name="top" align="default" src="<%=path %>/bottom.jsp"
    frameBorder=0 width=100% scrolling=no height=88>
    <h1>&nbsp;</h1>
    </IFRAME>

    正好能够对照其差别,详见链接1 链接2 链接3  iframe使用时经常要和target配合使用。參见  链接1 链接2

    top.jsp left.jsp postdata.jsp这三个的代码就不贴了。在源代码里。

    四:filter的使用

    起因是浏览器直接输入http://localhost:8080/xianfengYan/main.jsp 这时还没有登录,没有验证。我们不希望游客訪问这个界面,因此须要加个过滤器进行过滤,直接将页面跳转至index.jsp.

    新建包package com.product.filter;

    MyFilter.java

    package com.product.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyFilter implements Filter {
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain chain) throws IOException, ServletException {
    		// TODO Auto-generated method stub
    		//过滤用户的请求,推断是否登录
    		
    		HttpServletRequest httpServletRequest = (HttpServletRequest)request;
    		HttpServletResponse httpServletResponse = (HttpServletResponse)response;
    		httpServletRequest.setCharacterEncoding("utf-8");
    		httpServletResponse.setCharacterEncoding("utf-8");
    		String path = httpServletRequest.getContextPath();
    		String username = (String)httpServletRequest.getSession().getAttribute("username");
    		if(username == null){
    			httpServletResponse.sendRedirect(path + "/index.jsp");
    		}
    		chain.doFilter(httpServletRequest, httpServletResponse);
    	}
    
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    		// TODO Auto-generated method stub
    		
    	}
    
    }
    

    然后再web.xml里进行配置:

    	<filter>
    		<filter-name>MyFilter</filter-name>
    		<filter-class>com.product.filter.MyFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>MyFilter</filter-name>
    		<url-pattern>/main.jsp</url-pattern>
    	</filter-mapping>

    url-pattern里表示过滤的页面,我们指定过滤/main.jsp这个界面。

    代码下载链接:http://download.csdn.net/detail/yanzi1225627/7448175


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Unix 时间戳;时间戳获取和生成
    linux 显示文件全局路径
    云原生是什么?
    linux 终端输出有颜色字体
    git 建立本地分支和远程分支关系
    Linux 终端修改分辨率;Linux 系统添加新的分辨率方法;
    windows 下,如何查看文件夹被哪个程序占用(转)
    剑指Offer(第二版)面试题目分析与实现-解决面试题的思路
    WRF Model Wrf 模式 软件测试环境配置
    MPI 本地局域网运行多机配置,同时运行多个程序;
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4730356.html
Copyright © 2011-2022 走看看