学习日志day37(2021-08-30)(1、实现登录与注销功能 2、实现添加主题功能)

学习内容:学习JavaWeb(Day37)

1、实现登录与注销功能
2、实现添加主题功能


1、实现登录与注销功能

(1)添加servlet注解,相当于在web.xml中配置servlet,name代表servlet-name,urlPatterns代表url-pattern,name可以省略不写。WebServlet注解和在web.xml中配置servlet写一个即可,不可同时都写。

@WebServlet(name = "UserServlet" ,urlPatterns = "/login.html")//servlet注解
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

当向另一个页面进行转发时,要注意当前页面的参数,是否和要转发的页面的参数有重复的,如果有要重新给参数赋值。

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        UserService userService = new UserService();
        String action = request.getParameter("action");
        String contextPath = request.getContextPath();
        if (action.equals("login")){
            String uname = request.getParameter("uname");
            String upwd = request.getParameter("upwd");
            NewsUser user = userService.login(uname);
            if (user == null){//用户名不存在
                request.setAttribute("error","用户名不存在");
                //再次向index.html转发时,会将当前页面的action一起转发过去,所以要重新将action置空
                request.getRequestDispatcher("index.html?action=null").forward(request,response);
            }else if(!user.getUpwd().equals(upwd)){//密码错误
                request.setAttribute("error","密码错误");
                request.getRequestDispatcher("index.html?action=null").forward(request,response);
            }else {//登陆成功
                request.getSession().setAttribute("user",user);
                response.sendRedirect("newspages/admin.jsp");
            }
        }else if (action.equals("logout")){//退出
            request.getSession().invalidate();//注销session
            //request.getSession().setAttribute("user",null);
            response.sendRedirect("index.html");
        }
    }
}

(2)在上面的UserServlet中,将登陆用户的账号密码存在session作用域中。在admin.jsp中判断是否存在user对象,如果没有,就重定向到首页,不执行之后的代码。所以注销时就销毁session作用域或者将user对象设为null。
<%
NewsUser user = (NewsUser) session.getAttribute(“user”);
if (user == null) {//会话超时或没有登录,直接重定向到首页
response.sendRedirect(request.getContextPath() + “/index.html”);
return;
}
%>

2、实现添加主题功能

(1)在Dao层使用insert()方法进行添加,使用findTopic()方法判断输入的tname是否存在。

public int insert(String tname){
    String sql = "insert into topic(tname) values(?)";
    return util.executeUpdate(sql,tname);
}

public Topic findTopic(String tname){
    String sql = "select * from topic where tname = ?";
    Topic topic = (Topic) util.executeQueryForObject(sql, new RowMapper() {
        @Override
        public Object mapperRow(ResultSet rs) throws SQLException {
            int tid = rs.getInt("tid");
            String tname = rs.getString("tname");
            Topic topic = new Topic(tid,tname);
            return topic;
        }
    },tname);
    return topic;
}

添加成功后重定向到编辑主题页面

@WebServlet(name = "TopicServlet", urlPatterns = "/topic.html")
public class TopicServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        String action = request.getParameter("action");
        TopicService topicService = new TopicService();
        PrintWriter out = response.getWriter();
        if (action.equals("list")){
            List<Topic> topicList = topicService.queryTopic();
            request.setAttribute("topicList",topicList);
            request.getRequestDispatcher("newspages/topic_list.jsp").forward(request,response);
        }else if (action.equals("addtopic")){
            String tname = request.getParameter("tname");
            Topic topic = topicService.findTopic(tname);
            int result = 0;
            if (topic == null){//可以添加
                result = topicService.addList(tname);
                if (result > 0){//添加成功
                    out.print("<script>alert('添加成功');location.href='" + request.getContextPath() + "/topic.html?action=list';</script>");
                }else {//添加失败
                    request.setAttribute("error","添加失败,请联系管理员");
                    request.getRequestDispatcher("newspages/topic_add.jsp").forward(request,response);
                }
            }else{//主题已存在
                request.setAttribute("error","添加失败,主题已存在");
                request.getRequestDispatcher("newspages/topic_add.jsp").forward(request,response);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值