java jsp servlet校园任务管理系统

文章介绍了在Java校园任务管理系统中,如何使用EncodingFilter解决HttpServletRequest的编码问题,以及UserServlet中处理用户登录、注册、退出和信息修改等功能的实现细节。

【451】java jsp servlet校园任务管理系统

 开发工具:idea 或eclipse
 数据库mysql5.7+
 数据库链接工具:navcat,小海豚等

package pers.hdh.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Map;

public class EncodingFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)resp;

        chain.doFilter(new MyRequest(request), resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

/**
 * 增强HttpServletRequest获取参数的方法,解决从客户端传到服务器端的编码问题
 */
class MyRequest extends HttpServletRequestWrapper {
    private HttpServletRequest request;
    private boolean flag=true;

    public MyRequest(HttpServletRequest request) {
        super(request);
        this.request = request;
    }

    @Override
    public String getParameter(String name) {
        String[] arr = getParameterValues(name);
        if (arr == null || arr.length == 0) {
            return null;
        }
        return arr[0];
    }

    @Override
    public String[] getParameterValues(String name) {
        if (name == null || name.trim().length() == 0) {
            return null;
        }
        Map<String, String[]> map = getParameterMap();
        if (map == null || map.size() == 0) {
            return null;
        }

        return map.get(name);
    }

    @Override
    public Map<String, String[]> getParameterMap() {
        //获取请求方式
        String requestMethod = request.getMethod();

        if ("post".equalsIgnoreCase(requestMethod)) { // post请求
            try {
                request.setCharacterEncoding("utf-8");
                return super.getParameterMap();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        } else if ("get".equalsIgnoreCase(requestMethod)) { // get请求
            Map<String,String[]> map = super.getParameterMap();
            if (flag) {
                for (String key : map.keySet()) {
                    String[] arr = map.get(key);
                    for (int i = 0; i < arr.length; i++) {
                        try {
                            //arr[i] = new String(arr[i].getBytes("iso8859-1"), "utf-8");
                            arr[i] = URLDecoder.decode(arr[i], "UTF-8");
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }
                }
                flag = false; //false说明已经转码过,不用重复
            }
            return map;
        }

        return super.getParameterMap();
    }
}

 

package pers.hdh.web.servlet;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.dbutils.DbUtils;
import pers.hdh.beans.User;
import pers.hdh.service.UserService;
import pers.hdh.service.impl.UserServiceImpl;
import pers.hdh.utils.BeanFactory;
import pers.hdh.utils.MD5Utils;
import pers.hdh.utils.UUIDUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;

//@WebServlet(urlPatterns = {"/user"})
public class UserServlet extends BaseServlet {

    /**
     * 跳转到登录页面
     * @param request
     * @param response
     * @return
     */
    public String loginUI(HttpServletRequest request, HttpServletResponse response) throws Exception {
        return "jsp/index.jsp";
    }

    /**
     * 用户登录
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public String login(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String stuid = request.getParameter("stuid");
        String password = MD5Utils.md5(request.getParameter("password"));

        User user = null;
        try {
            UserService service = (UserService) BeanFactory.getBean("UserService");
            user = service.getByStuidAndPWD(stuid, password);
        } catch (SQLException e){
            logger.error("user表查询记录失败");
            // 登录失败,跳转回到登录页面
            return "/";
        }

        if (user == null) { // 用户为空,查询不到用户
            request.setAttribute("msg", "不存在的账户或密码错误");
            return "/";
        } else { // 非空
            String[] saveArr = request.getParameterValues("save"); // 获取保存用户信息的请求
            if (saveArr != null ) { // 非空说明要求保存
                switch (saveArr.length) {
                    case 2: // 2个参数代表保存账号和密码
                        Cookie c = new Cookie("savePwd", password);
                        c.setPath(request.getContextPath()+"/");
                        c.setMaxAge(3600*24);
                        response.addCookie(c);
                    case 1: // 1个参数代表保存账号
                        c = new Cookie("saveStuid", stuid);
                        c.setPath(request.getContextPath()+"/");
                        c.setMaxAge(3600*24); // 保存一天
                        response.addCookie(c);

                }
            }

            // user放入session域中
            request.getSession().setAttribute("user", user);
            // 登录成功,跳转到主页面——任务列表,同时查询数据库,展示所有任务
            response.sendRedirect(request.getContextPath() + "/task?method=getTasks&currPage=1&category=&desc=&state=");
            return null;
        }
    }

    /**
     * 跳转到注册页面
     * @param request
     * @param response
     * @return
     */
    public String registUI(HttpServletRequest request, HttpServletResponse response) throws Exception {
        return "jsp/regist.jsp";
    }

    /**
     * 用户注册,添加一条记录到user表中
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public String add(HttpServletRequest request, HttpServletResponse response) throws Exception {
        User user = new User();
        // 获取表单数据,封装结果集
        BeanUtils.populate(user, request.getParameterMap());
        user.setUid(UUIDUtils.setId());
        // 密码加密
        user.setPassword(MD5Utils.md5(user.getPassword()));

        try {
            UserService service = (UserService) BeanFactory.getBean("UserService");
            service.add(user);
        } catch (SQLException e){
            e.printStackTrace();
            logger.error("user表添加记录失败");
            // 重定向,提示注册失败
            response.sendRedirect(request.getContextPath() + "/jsp/registError.jsp");
            return null;
        }
        // 重定向,提示注册成功
        response.sendRedirect(request.getContextPath() + "/jsp/registSuccess.jsp");
        return null;
    }

    /**
     * 退出用户
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public String logout(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 销毁session
        request.getSession().invalidate();
        // 重定向回到登录页面
        response.sendRedirect(request.getContextPath());
        return null;
    }

    /**
     * 修改用户信息
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public String update(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 封装数据
        User user = new User();
        BeanUtils.populate(user, request.getParameterMap());
        // 密码加密
        user.setPassword(MD5Utils.md5(user.getPassword()));

        // 调用service处理业务逻辑
        try {
            UserService service = (UserService) BeanFactory.getBean("UserService");
            service.update(user);
        } catch (SQLException e) {
            logger.error("user表修改记录失败");
            throw e;
        }

        // 将新的user bean对象放入域中,更新数据
        request.getSession().setAttribute("user", user);
        response.sendRedirect(request.getContextPath() + "/jsp/user_info.jsp");
        return null;
    }

    public String applyUpdatePwd(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String stuid = request.getParameter("stuid");
        String email = request.getParameter("email");

        // 调用service处理业务逻辑
        try {
            UserService service = (UserService) BeanFactory.getBean("UserService");
            User user = service.getByStuidAndEmail(stuid, email);
            if (user == null) {
                request.setAttribute("message", "申述失败,请输入正确的账号和绑定的邮箱");
                return "jsp/apply_msg.jsp";
            }
        } catch (SQLException e) {
            logger.error("user表查询记录失败");
            throw e;
        }

        // 信息提示
        request.setAttribute("message", "申述成功,请前往您的邮箱查看申述结果");
        return "jsp/apply_msg.jsp";
    }

    /**
     * 跳转到修改密码页面,用于忘记密码时的申述
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public String updateUI(HttpServletRequest request, HttpServletResponse response) throws Exception {
        request.setAttribute("uid",request.getParameter("uid"));
        return "jsp/update.jsp";
    }

    /**
     * 申述后修改密码
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public String updatePwd(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 调用service处理业务逻辑
        try {
            UserService service = (UserService) BeanFactory.getBean("UserService");

            System.out.print(request.getParameter("uid"));

            User user = service.getByUid(request.getParameter("uid"));
            // 密码加密
            user.setPassword(MD5Utils.md5(request.getParameter("password")));
            service.update(user);
        } catch (SQLException e) {
            logger.error("user表修改记录失败");
            throw e;
        }

        // 信息提示
        request.setAttribute("message", "密码修改成功,您可以使用新密码登录账号。");
        return "jsp/apply_msg.jsp";
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿毕业分享网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值