过滤器-实现全站编码
过滤器,很强悍的一个技术。这个必须要会。
package cn.hncu.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; public class CharsetFilter implements Filter{ private String charset=null; @Override public void init(FilterConfig filterConfig) throws ServletException { charset = filterConfig.getInitParameter("charset"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(charset); response.setContentType("text/html;charset="+charset); chain.doFilter(request, response); } @Override public void destroy() { } }
点击邮件激活地址后的页面:result.jsp
这个就是点击注册链接后的返回页面。
根据DAO层的不同返回值,实现了分别对用户显示不同的提示。
添加了网页自动跳转!
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>带邮箱激活的注册模块</title> <script type="text/javascript"> var tm; var i=5; function time(){ i--; div1.innerHTML = i+"秒钟以后,自动去登录!"; if(i<1){ window.clearInterval(tm);//将定时器清除 window.location.href="<c:url value='index.jsp'/>"; } } onload=function(){ tm = window.setInterval(time, 1000); }; </script> </head> <body> <c:if test="${count==-1}"> 服务器异常,请重新激活!<br/> <a href="<c:url value='/index.jsp'/>">登录</a> <br/> <div id="div1"> </div> </c:if> <c:if test="${count==0}"> 激活地址错误,请使用正确的激活地址!<br/> <a href="<c:url value='/index.jsp'/>">登录</a> <br/> <div id="div1"> </div> </c:if> <c:if test="${count==1}"> 你已经激活过,请勿重复激活!<br/> <a href="<c:url value='/index.jsp'/>">登录</a> <br/> <div id="div1"> </div> </c:if> <c:if test="${count==2}"> 激活成功,欢迎去登录!<br/> <a href="<c:url value='/index.jsp'/>">登录</a> <br/> <div id="div1"> </div> </c:if> </body> </html>
LoginDaoJdbc-用户登录DAO实现类
这里用到了c3p0和dbutils,在query方法中,new BeanHandler<User>
(User.class) 此句可以直接给我们返回一个User对象!
package cn.hncu.login.dao; import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import cn.hncu.domain.User; import cn.hncu.pubs.C3p0Pool; public class LoginDaoJdbc implements LoginDAO{ public User login(User u){ String sql = "select * from users where name=? and pwd=? and active='1' "; QueryRunner run = new QueryRunner(C3p0Pool.getDataSource()); try { User user = run.query(sql, new BeanHandler<User>(User.class) , u.getName(),u.getPwd()); return user; } catch (SQLException e) { e.printStackTrace(); return null; } } }
还有很多代码,就不一一列出了,
项目应用MVC框架思想,注意分层。
演示结果:
激活的原理很简单,我们链接后面向我们的ActiveServlet传递了一个acode参数,用这个参数的值(UUID生成的)到后台去校验,以让用户通过验证!