zoukankan      html  css  js  c++  java
  • 新闻发布系统

    ·一.登录模块开发
        1.创建了一个用户信息实体类(数据表的字段)
        2.开发了Dao层:创建了一个接口,接口中有一个方法
           //登录的方法
           public User login(String username) throws Exception;
        3.开发了Dao层的实现层,创建了一个类,实现了Dao层接口,重写了login方法
           @Override
           public User login(String username) throws Exception {
            User user=null;
            //步骤一:创建一条SQL
            String sql="select * from news_users where uname=?";
            //步骤二:执行SQL并且接受返回值
            ResultSet rs = executeQuery(sql, username);
            //步骤三:将返回值装配到实体对象当中
            if(rs!=null) {
             while(rs.next()) {
              user=new User();
              user.setUid(rs.getInt("uid"));
              user.setUname(rs.getString("uname"));
              user.setUpwd(rs.getString("upwd"));
             }
            }
            return user;
           }
        4.开发Service层,创建一个接口,接口中有一个login方法,
           public interface IUserInfoService {
            //登录的方法
            public User login(String username,String password) throws Exception;
           }
        5.开发Service的实现类,创建了一个类,这个类实现了Service接口,重写了login方法,方法中主要将dao层拿到的数据跟用户输入的数据做比较
           public class IUserInfoServiceImpl implements IUserInfoService{
            //植入Dao层对象
            private IUserInfoDao userinfoDao=new IUserInfoDaoImpl();
            @Override
            public User login(String username, String password) throws Exception {
             //执行login方法,从数据库中拿出当前查询到的user数据
             User user = userinfoDao.login(username);
             //先判断从dao层接收过来的user对象是否为空,在不是空的情况下,用实体中存放的数据跟用户输入的数据做对比
             if(user!=null&&user.getUpwd().equals(password)) {
              return user;
             }
             return null;
            }
           }
        6.开发Servlet层,创建了一个类,这个类继承了HttpServlet抽象类,重写了doGet()和doPost()方法,在doGet()中调用doPost(),内部实现逻辑如下:
           6.1从前台能够接受到用户提交的用户名和密码
           6.2调用service层的login方法执行登录操作
           6.3接收方法的返回值,判断返回值是否为空,如果为空则代表登录失败,跳转到Login.jsp,如果不为空,将用户信息保存到session对象当中,并且跳转到首页
     二.非法路径拦截(没有登录的用户无法进行后台操作)
          在需要拦截的页面中加入如下代码(判断session对象当中是否有用户登录的信息,如果没有则跳转到登录页面)
           <%
            //获取Session的存储的登录信息
            User user=(User)session.getAttribute("user");
            if(user==null){
             response.sendRedirect("page/login/login.jsp");
            }
           %>
     三.退出系统
          在Servlet当中加上对应模块的代码,用了一个action地址区分不同的功能
          if(action.equals("logOut")) {
           //清空Session
           req.getSession().removeAttribute("user");
           resp.sendRedirect("/NewsManager");
          }
          <a href="<%=basePath %>IUserInfoServlet?action=logOut" class="signOut"><i class="seraph icon-tuichu"></i><cite>退出</cite></a>
      
     四.新闻列表
        1.开发Dao层,创建一个Dao层接口,在接口中添加一个查询所有新闻的方法
           public interface INewsDao {
            //查询所有新闻的方法
            public List<News> getAllNews() throws Exception;
           }
        2.创建Dao层实现类,创建一个类,实现Dao层接口,然后执行数据库查询操作
           @Override
           public List<News> getAllNews() throws Exception {
            List<News> newsList=new ArrayList<News>();
            //步骤一:创建Sql
            String sql="select * from news,topic where news.ntid=topic.tid";
            //步骤二:执行
            ResultSet rs = executeQuery(sql);
            //步骤三:装载数据
            if(rs!=null) {
             while(rs.next()) {
              News news=new News();
              news.setNid(rs.getInt("nid"));
              news.setNtitle(rs.getString("ntitle"));
              news.setNtid(rs.getInt("ntid"));
              news.setNauthor(rs.getString("nauthor"));
              news.setNcontent(rs.getString("ncontent"));
              news.setNpicPath(rs.getString("npicpath"));
              news.setNcreateDate(rs.getDate("ncreateDate"));
              news.setNmodifyDate(rs.getDate("nmodifyDate"));
              news.setNsummary(rs.getString("nsummary"));
              Topic topic=new Topic();
              topic.setTid(rs.getInt("tid"));
              topic.setTname(rs.getString("tname"));
              //怎么让当前拿到的News对象和Topic对象关联起来
              news.setTopic(topic);
              newsList.add(news);
             }
            }
            return newsList;
           }
        3.创建Service层接口,跟Dao层接口的方法相同
           public interface INewsService {
            //查询所有新闻的方法
            public List<News> getAllNews() throws Exception;
           }
        4.创建Service层的实现类,实现Service层接口
           public class INewsServiceImpl implements INewsService{
            //植入Dao层接口对象
            private INewsDao newsDao=new INewsDaoImpl();
            @Override
            public List<News> getAllNews() throws Exception {
             return newsDao.getAllNews();
            }
           }
        5.Servlet处理用户请求,调用service层拿到从数据库查询出来的数据,将数据保存到request作用域当中,跳转到新闻列表页面
           @Override
           protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String action=req.getParameter("action");
            if(action.equals("newsList")) {
             //执行查询新闻列表操作
             try {
              List<News> allNews = newService.getAllNews();
              for (News news : allNews) {
               System.out.println(news.getNid());
              }
              //把集合数据保存下来
              req.setAttribute("newsList", allNews);
              //跳转页面
              req.getRequestDispatcher("page/news/newsList.jsp").forward(req, resp);
             } catch (Exception e) {
              e.printStackTrace();
             }
            }
           }
        6.渲染数据
           <table class="layui-table">
            <thead>
             <tr>
              <th>新闻编号</th>
              <th>新闻标题</th>
              <th>新闻类别</th>
              <th>发布者</th>
              <th>发布时间</th>
              <th>操作</th>
             </tr>
             <%
              List<News> newsList = (List<News>) request.getAttribute("newsList");
              for (News news : newsList) {
             %>
             <tr>
              <td><%=news.getNid()%></td>
              <td><%=news.getNtitle()%></td>
              <td><%=news.getTopic().getTname()%></td>
              <td><%=news.getNauthor()%></td>
              <td><%=news.getNcreateDate()%></td>
              <td><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
               <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
               <a class="layui-btn layui-btn-xs layui-btn-primary"  lay-event="look">预览</a></td>
             </tr>
             <%
              }
             %>
            </thead>
           </table>
    新闻删除:
        1.在INewsDao接口中创建删除方法
           //删除新闻
           public int deleteNews(int nid) throws Exception;
        2.在INewsDaoImpl中重写该方法,执行数据库操作
           @Override
           public int deleteNews(int nid) throws Exception {
            String sql="delete from news where nid=?";
            int count = executeUpdate(sql, nid);
            return count;
           }
        3.在INewsService接口中创建删除方法,供Servlet调用
           //删除新闻
           public int deleteNews(int nid) throws Exception;
        4.在INewsServiceImpl实现类中重写该方法,调用Dao层该方法
           @Override
           public int deleteNews(int nid) throws Exception {
            return newsDao.deleteNews(nid);
           }
        5.在INewsServlet中通过action控制功能,调用Service层该方法进行删除,删除成功调用新闻列表地址
           else if(action.equals("deleteNews")) {
            //获取页面上选择的新闻id
            String nid=req.getParameter("nid");
            try {
             //执行删除信息的方法
             int count = newService.deleteNews(Integer.parseInt(nid));
             if(count>0) {
              req.getRequestDispatcher("INewsServlet?action=newsList").forward(req, resp);
             }
            } catch (NumberFormatException e) {
             e.printStackTrace();
            } catch (Exception e) {
             e.printStackTrace();
            }
           }
        6.页面中找到删除按钮,添加Servlet地址,进行删除
           <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del" href="INewsServlet?action=deleteNews&nid=<%=news.getNid() %>">删除</a>
    六.新闻添加
        步骤:需要将新闻分类的数据绑定到newsAdd.jsp页面中的下拉列表
         1.创建Dao层接口:ITopicDao,在里面写了一个方法用于查询所有的新闻分类
            //查询新闻分类
            public List<Topic> getAllTopic() throws Exception;
         2.创建Dao层接口实现类:ITopicDaoImpl,重写Dao层方法,查询数据
            @Override
            public List<Topic> getAllTopic() throws Exception {
             List<Topic> topicList=new ArrayList<>();
             //SQL语句
             String sql="select * from topic";
             ResultSet rs = executeQuery(sql);
             if(rs!=null) {
              while(rs.next()) {
               Topic topic=new Topic();
               topic.setTid(rs.getInt("tid"));
               topic.setTname(rs.getString("tname"));
               topicList.add(topic);
              }
             }
             closeResource();
             return topicList;
            }
         3.创建Service层接口,跟Dao层接口的方法相同
            //查询新闻分类
            public List<Topic> getAllTopic() throws Exception;
         4.创建Service层的实现类,实现Service层接口
            public class ITopicServiceImpl implements ITopicService{
             //创建Dao层接口对象
             private ITopicDao topicDao=new ITopicDaoImpl();

             @Override
             public List<Topic> getAllTopic() throws Exception {
              return topicDao.getAllTopic();
             }
            }
         5.创建Servlet实现用户访问
            String action=request.getParameter("action");
            if(action.equals("topicList")) {
             //查询所有新闻分类的操作
             try {
              List<Topic> allTopic = topicService.getAllTopic();
              request.setAttribute("topicList", allTopic);
              request.getRequestDispatcher("page/news/newsAdd.jsp").forward(request, response);
             } catch (Exception e) {
              e.printStackTrace();
             }
            }
         6.在newsList.jsp页面中,找到添加文章按钮,将href属性值改为访问Servlet的地址
            <a class="layui-btn layui-btn-normal" href="<%=basePath %>ITopicServlet?action=topicList">添加文章</a>
         7.newsAdd.jsp页面的数据渲染
            <select name="topic" lay-verify="required">
             <%
              List<Topic> allTopic=(List<Topic>)request.getAttribute("topicList");
              for(Topic topic:allTopic){ 
             %>
              <option value="<%=topic.getTid()%>"><%=topic.getTname()%></option>
             <%
              }
             %>
            </select>
     
  • 相关阅读:
    八、比卦
    七、师卦
    六、讼卦
    五、需卦
    力扣-两数之和
    什么是3NF (范式) ?
    SQL事务4个特性
    什么是索引?
    假设把只包含01的数组(如{0,0,1,1,1,0,1,0,0,1})按照升序排序,可以任意交换两个数的位置,请输出最少需要交换的次数。
    找规律并用编程实现如下数列(数值超过10000停止打印) 1,1,2,2,3,2,5,4,8,8
  • 原文地址:https://www.cnblogs.com/wnwn/p/11155153.html
Copyright © 2011-2022 走看看