学习内容:学习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);
}
}
}
}