• JAVAEE第四次作业-JSP显示新闻


    JAVAEE第四次作业-JSP显示新闻

    一、任务

    1. 使用mysql创建新闻表

    2. 用户登录时,用servlet获取用户名密码,查询数据库是否存在

    3. 如果是正确的用户名密码,查询新闻表,将新闻数据传给JSP首页

    4. JSP首页用EL表达式显示新闻标题列表

    二、任务1实验过程

    使用mysql创建新闻表

    2.1 Mysql新建新闻表+插入相应数据

    USE users;
    
    CREATE TABLE News (
    	NewID VARCHAR(20),
    	Title VARCHAR(50) NOT NULL,
    	NewsContent VARCHAR(100) NOT NULL,
    	Author VARCHAR(20) NOT NULL,
    	NewsDate VARCHAR(50) NOT NULL,
    
    	PRIMARY KEY(NewID)
    );
    
    INSERT INTO News VALUES (
    	'1','思政教育“不下线”','计科院成立湖北籍学生临时团支部','湖北团支部','2020-06-10'
    );
    INSERT INTO News VALUES (
    	'2','硕士研究生招生考试1','工作圆满结束1','计科院1','2020-06-11'
    );
    INSERT INTO News VALUES (
    	'3','硕士研究生招生考试2','工作圆满结束2','计科院2','2020-06-12'
    );
    INSERT INTO News VALUES (
    	'4','硕士研究生招生考试3','工作圆满结束3','计科院3','2020-06-13'
    );
    
    SELECT * FROM News;
    

    2.2 Mysql新建用户信息表+插入相应数据

    CREATE DATABASE USERS;
    USE USERS;
    
    CREATE TABLE USERS_INFO (
    	UID VARCHAR(20) NOT NULL,
    	UNAME VARCHAR(20) NOT NULL,
    	UPWD VARCHAR(20) NOT NULL,
    	PRIMARY KEY(UID)
    );
    
    INSERT INTO USERS_INFO VALUES (
    	'111','Sonny','123'
    );
    INSERT INTO USERS_INFO VALUES (
    	'222','Jason','123'
    );
    INSERT INTO USERS_INFO VALUES (
    	'333','Spider','123'
    );
    
    SELECT * FROM USERS_INFO;
    

    2.3 查看添加的数据结果

    1. 新闻表

    1592197070102

    2. 用户信息表

    1591077268229

    三、任务2实验过程

    用户登录时,用servlet获取用户名密码,查询数据库是否存在

    3.1 创建UserInfo 实体类

    利用实体类来返回数据库的查询结果,这样使程序的可读性更高。1592197596518

    3.2 使用MVC模式,分离业务模式

    编写SqlHelper类,用于返回所有查询结果

        //select
        public static ResultSet executeQuery(String SQL)
        {
            try
            {
                Connection conn=getConnection();
                Statement stmt=conn.createStatement();
                ResultSet rs=stmt.executeQuery(SQL);
                return rs;
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("查询失败!");
                return null;
            }
        }
    
        //insert update delete
        public static boolean executeUpdate(String SQL)
        {
            try
            {
                Connection conn=getConnection();
                Statement stmt=conn.createStatement();
                int rs=stmt.executeUpdate(SQL);
                if (rs>0)
                    return true;
                else
                    return false;
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("更新失败!");
                return false;
            }
        }
    

    编写具体的查询业务,获取查询结果

        public boolean QueryUsers(UserInfo user) throws SQLException {
            //验证用户名存在性
            String sql = "select * from  users_info  where UNAME='" + user.getuName() + "' and UPWD='" + user.getuPwd() + "'";
            ResultSet rs = SqlHelper.executeQuery(sql);
            if (rs.next()) {
                return true;
            }
            return false;
        }
    

    编写Servlet,将查询结果返回前端

            //获取form中的数据
            UserInfo user = new UserInfo();
            user.setuName(request.getParameter("username"));
            user.setuPwd(request.getParameter("password"));
    
            System.out.println(user.getuName() + ": " + user.getuPwd() +"!!!!!!!!!!!!!!!!!!!!!!!!");
    
            //验证用户名密码
            UsersService usersService = new UsersService();
    
            //确认数据库是否存在
            boolean isHasUser = usersService.QueryUsers(user);
    
            //存在则将结果存到Cookie
            if (isHasUser) {
                int saveyTime = 60 * 60 * 24 * 30;  //保存的时间
    
                //保存账号
                Cookie cookieUserName = new Cookie("username", user.getuName());
                cookieUserName.setMaxAge(saveyTime);
                response.addCookie(cookieUserName);
    
                //保存密码
                Cookie cookieUserPwd = new Cookie("password", user.getuPwd());
                cookieUserName.setMaxAge(saveyTime);
                response.addCookie(cookieUserPwd);
    
                //重定向值index.html界面
                response.sendRedirect("page/index.html");
            } else {
    
                //重定向值login.html界面
                response.sendRedirect("login.html");
            }
        }
    

    3.3 登录账号,进入管理后台

    1592201535610

    1592202809234

    四、任务3实验过程

    如果是正确的用户名密码,查询新闻表,将新闻数据传给JSP首页

    4.1 创建News实体类

    利用实体类来返回数据库的查询结果,这样使程序的可读性更高。

    1592202855075

    4.2 返回数据库中的新闻查询结果

    public List<News> findNews() throws SQLException {
        String sql = "Select * from news";
        ResultSet rs = SqlHelper.executeQuery(sql);
        List<News> newsList = new ArrayList<News>();
        while (rs.next()) {
            News news = new News();
            news.setNewsId(rs.getInt("NewID"));
            news.setTitle(rs.getString("Title"));
            news.setNewsContent(rs.getString("NewsContent"));
            news.setAuthor(rs.getString("Author"));
            news.setNewsDate(rs.getDate("NewsDate"));
    
            newsList.add(news);
        }
        return newsList;
    }
    

    4.3 编写Servlet,显示查询结果至jsp中

    request.setCharacterEncoding("utf-8");
    NewsService newsService=new NewsService();
    
    try {
        List<News> newsList=newsService.findNews();
        request.setAttribute("News",newsList);
        request.getRequestDispatcher("ShowNewsList.jsp").forward(request,response);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    

    五、任务4实验过程

    JSP首页用EL表达式显示新闻标题列表

    5.1 EL表达式显示新闻标题列表

    <div class="table_con">
    	<table>
        	<tr class="tb_title">
            	<td width="10%">ID</td>
                <td width="30%">标题</td>
                <td width="20%">内容</td>
                <td width="15%">作者</td>
                <td width="10%">时间</td>
                <td width="15%">操作</td>
            </tr>
                <c:forEach var="n" items="${News}" >
                <tr>
                <td width="10%">${n.newsId}</td>
                <td width="30%">${n.title}</td>
                <td width="20%">${n.newsContent} </td>
                <td width="15%">${n.author}</td>
                <td width="10%">${n.newsDate}</td>
                <td width="15%">
                    <a href="editServlet?newid=${n.newsId}" class="bj_btn">编辑</a>
                    <a href="viewServlet?newid=${n.newsId}" class="sj_btn">查看</a>
                    <a href="deleteServlet?newid=${n.newsId}" class="del_btn">删除</a>
                </td>
                </tr>
                </c:forEach>
        </table>
    </div>
    

    5.2 效果展示

    六、码云地址

    码云地址: https://gitee.com/Jason98/JavaEE-Course

    1591105872425

  • 相关阅读:
    IE9不能在线打开InfoPath表单的解决办法
    在Word中使用Quick Parts功能
    .NET WinForm程序在Windows7下实现玻璃效果和任务栏进度条效果
    如何对已经发布过的InfoPath模板进行修改
    .NET WinForm中给DataGridView自定义ToolTip并设置ToolTip的样式
    有关SharePoint Client Object应用的笔记
    解决VS 2010中编译程序时弹出"Type universe cannot resolve assembly"的错误
    SharePoint客户端对象模型"(400) Bad Request"错误
    C# Method Attribute and Reflection
    .NET WinForm下一个支持更新ProgressBar进度的DataGridView导出数据到Excel的类
  • 原文地址:https://www.cnblogs.com/jason5689/p/13131025.html
Copyright © 2020-2023  润新知