小项目-购物网站个别功能的具体实现思路-下(新手)
- (11)修改密码
所需要的JSP页面(点击进入个人中心):
<div class="header_wrap"> <ul> <c:choose> <c:when test="${empty W}"> <li><a href="/shop/views/login.jsp">登录</a></li> <li><a href="/shop/views/register.jsp">注册</a></li> </c:when> <c:otherwise> <li>欢迎您,尊敬的VIP:<a href="/shop/views/persional.jsp">${W.username}</a></li> </c:otherwise> </c:choose>
个人中心JSP页面:
<body> <fieldset> <legend> 欢迎来到您的个人中心 </legend> <div> <ul> <li><a href="/shop/LoginOut">注销当前账户</a></li> <li><a href="/shop/home" >点击返回首页</a></li> <li><a href="/shop/views/login.jsp">返回登陆界面</a></li> <li><a href="/shop/views/update.jsp">点击修改密码</a></li> </ul> </div> <iframe name="show" width="65%" height="85%"></iframe> </fieldset> </body>
修改密码的JSP界面:
<body> <div class="wrap"> <div class="guimeilogo"></div> <div class="login"> <div class="top"> <h1>个人信息</h1> <a href="">修改界面</a> </div> <div class="mid"> <form action="/shop/update" method="post"> <input type="password" name="password" placeholder="原密码" required="required" /> <input type="password" name="passwords" placeholder="新密码" required="required" /> ${Lxr} <input type="submit" id="submit" value="立即修改"/> ${C} </form> </div> </div> </div> </body>
所需要的Servlet:
@WebServlet("/update") public class UpdateServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 读写当前的登录信息。 Map w = (Map) req.getSession().getAttribute("W");
// 获得请求参数 Object password1 = w.get("password");// 获得user表中的原密码类型 String password = req.getParameter("password");// 获取现在登录状态的原密码 String passwords = req.getParameter("passwords");// 修改过后的密码 Integer uid = (Integer) w.get("uid");// 用户的ID
// 两者做比较(equals比较的是字符串内容)如果成功则重定向到登录界面 if (password.equals(password1)){ IUserDAO dao = new UserDAOImpl(); dao.UpdatePassword(passwords,uid); resp.sendRedirect("/shop/views/login.jsp");
// 否则提示更改失败,重定向到更改界面。 }else{ req.setAttribute("Lxr","更改失败"); req.getRequestDispatcher("/update.jsp").forward(req,resp); } } }
流程:
用户点击主界面的个人昵称进入个人中心-在个人中心点击修改密码-进入修改密码的JSp页面,填写提交新的信息-Servlet接收数据处理数据-重定向到登录的JSP页面
- (12)过滤器
过滤器的作用和意义:
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。
例如,某网站里的功能,有很多界面有验证“是否登录”业务,如果使用过滤器的话就可以简化很多本来需要在Servlet中写入的代码段。化繁为简。
这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。
过滤器的写法:
@WebFilter("*.do") public class CharacterEncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器正在启动。"); System.out.println("过滤器正在初始化!"); }
//在这个方法里面写。 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { System.out.println("-------------------过滤器开始工作!-------------------"); //设置编码格式。 request.setCharacterEncoding("UTF-8"); //获取账号密码的关键字信息。 HttpServletResponse resp = (HttpServletResponse) response; HttpServletRequest req = (HttpServletRequest) request; Map w = (Map) req.getSession().getAttribute("W"); //如果没有登录则重定向到登录界面 if (w == null){ resp.sendRedirect("/shop/views/login.jsp"); System.out.println("-------------------过滤器拦截成功!-------------------"); }else { //放行数据。 filterChain.doFilter(req,resp); } } @Override public void destroy() { System.out.println("我被销毁啦。"); } }
实现过滤的方法:
*.do 意为:
所有@WebServlet的映射路径带.do的都会进行拦截。
例如:/scart.do、/Addcart.do