javaEE开发—JSP显示新闻

要求:

创建新闻表,用户登录时,用servlet获取用户名密码,查询数据库是否存在,如果是正确的用户名密码,查询新闻表,将新闻数据传给JSP首页,JSP首页用EL表达式显示新闻标题列表。

实现效果:

登录界面:在这里插入图片描述
登录失败:
在这里插入图片描述
登录成功,跳转到新闻界面
在这里插入图片描述
新闻列表界面:
在这里插入图片描述

实现思路:

1.项目结构:
在这里插入图片描述
java部分:
在这里插入图片描述
web部分:
在这里插入图片描述
其中test.css,test.html,test.js为登录主界面,具体实现可查看:记录第一次JavaWeb项目开发
其中yinglang为导入的新闻模板
在这里插入图片描述
2.数据库部分
新建News表:

create table News  
(  
idnews int,
category varchar(50),
title varchar(50),
content varchar(50),
author varchar(50),
newsdate date,
)  

插入数据:
在这里插入图片描述
3.代码部分
1.DatabaseOperation
数据库相关

package Controller;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DatabaseOperation {
    
    
    // 数据库连接
    private Connection conn = null;
    // 通过注入参数的方式使数据库访问更加安全
    private PreparedStatement pstmt = null;
    // 数据库返回的结果
    private ResultSet rs = null;

    public  DatabaseOperation() {
    
    
        Connection connection = null;
        try {
    
    
            // 注册驱动程序
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            this.conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=NEWS_SYSTEM",
                    "sa", "123456");
        } catch (Exception e) {
    
    
            System.out.println(getCurrentTime() + ",构造函数处引发了异常:\n" + e.getMessage());

        }
    }

    public static Connection getConnection() {
    
    
        Connection connection = null;
        try {
    
    
            // 注册驱动程序
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            connection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=NEWS_SYSTEM",
                    "sa", "123456");

            return connection;
            
        } catch (Exception e) {
    
    
            System.out.println(getCurrentTime() + ",构造函数处引发了异常:\n" + e.getMessage());
            return  null;
        }
    }

    //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("查询失败!");
            System.out.println("-------------------------------");
            return null;
        }
    }

    /***
     * 判断登录是否成功
     * @param user 用户名
     * @param password 密码
     * @return 数据库查找结果
     */
    public boolean login(String user, String password) {
    
    
        String sql = "select * from users where name=? and pwd=?";
        boolean exists = false;

        try {
    
    
            this.pstmt = conn.prepareStatement(sql);
            this.pstmt.setString(1, user);
            this.pstmt.setString(2, password);
            this.rs = this.pstmt.executeQuery();

            if (this.rs.next()) {
    
    
                exists = true;
            }
        } catch (Exception e) {
    
    
            System.out.println(getCurrentTime() + ",登录校验处引发了异常:\n" + e.getMessage());
        }

        return exists;
    }

    /***
     * 更改数据库
     * @param database 数据库名称
     * @param user 用户名
     * @param password  密码
     */
    public void updateDatabase(String database, String user, String password) {
    
    
        try {
    
    
            this.conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=" + database,
                    user, password);
        } catch (Exception e) {
    
    
            System.out.println(getCurrentTime() + ",更新数据库信息处引发了异常:\n" + e.getMessage());
        }
    }

    /***
     * 关闭数据库所有相关连接
     */
    public void closeConnection() {
    
    
        try {
    
    
            if (this.conn != null) {
    
    
                this.conn.close();
            }
            if (this.pstmt != null) {
    
    
                this.pstmt.close();
            }
            if (this.rs != null) {
    
    
                this.rs.close();
            }
        } catch (Exception e) {
    
    
            System.out.println(getCurrentTime() + ",关闭数据库连接处引发了异常:\n" + e.getMessage());
        }
    }

    /***
     * 获取当前时间
     * @return 当前时间
     */
    public static String getCurrentTime() {
    
    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        return sdf.format(date);
    }
}

2.NewsService
提供News类的数据服务(目前只完善了查询所有新闻内容的函数)

package Service;

import Controller.DatabaseOperation;
import Entity.News;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

//提供News类的数据服务
public class NewsService {
    
    

    public void AddNews(){
    
    }
    public void DeleteNews(){
    
    }
    public void UpdateNews(){
    
    }
    public List<News> QueryNews() throws SQLException {
    
    
        String sql="Select * from news";
        DatabaseOperation operation=new DatabaseOperation();
        ResultSet rs= operation.executeQuery(sql);
        List<News> lsNews=new ArrayList<News>();
        while (rs.next())
        {
    
    
            News news=new News();
            news.setIdnews(rs.getInt(1));
            news.setCategory(rs.getString(2));
            news.setTitle(rs.getString(3));
            news.setContent(rs.getString(4));
            news.setAuthor(rs.getString(5));
            news.setNewsdate(rs.getDate(6));
            lsNews.add(news);
        }
        return lsNews;
    }
    public void GetNews(){
    
    }

}

3.ShowNewsListServlet
从NewsService中获取所需的数据,并将数据传递给ShowNewsList.jsp来显示

package Controller;

import Entity.News;
import Service.NewsService;

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


@WebServlet(name = "Controller.ShowNewsListServlet")
public class ShowNewsListServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request,response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("utf-8");
        NewsService newsService=new NewsService();
        try {
    
    
            List<News> lsNews=newsService.QueryNews();
            request.setAttribute("lsNews",lsNews);
            request.getRequestDispatcher("ShowNewsList.jsp").forward(request,response);
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }


}

4.News
用于映射数据库中的news表

package Entity;

import java.sql.Date;

public class News {
    
    
    private int idnews;
    private String category;
    private String title;
    private String content;
    private String author;
    private Date newsdate;

    public int getIdnews() {
    
    
        return idnews;
    }
    public void setIdnews(int idnews) {
    
    
        this.idnews = idnews;
    }
    public String getCategory() {
    
    
        return category;
    }
    public void setCategory(String category) {
    
    
        this.category = category;
    }
    public String getTitle() {
    
    
        return title;
    }
    public void setTitle(String title) {
    
    
        this.title = title;
    }
    public String getContent() {
    
    
        return content;
    }
    public void setContent(String content) {
    
    
        this.content = content;
    }
    public String getAuthor() {
    
    
        return author;
    }
    public void setAuthor(String author) {
    
    
        this.author = author;
    }
    public Date getNewsdate() {
    
    
        return newsdate;
    }
    public void setNewsdate(Date newsdate) {
    
    
        this.newsdate = newsdate;
    }

}

5.Users
用于映射数据库中的users表
6.ShowNewsList.jsp
增加循环的代码,其中的lsNews数据就是在ShowNewsListServlet通过服务获取到并传递给该jsp文件的数据

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


<c:forEach var="n" items="${lsNews}" >
<tr>
<td width="10%">${
    
    n.idnews}</td>
<td width="30%">${
    
    n.title}</td>
<td width="20%">${
    
    n.content} </td>
<td width="15%">${
    
    n.author}</td>
<td width="10%">${
    
    n.newsdate}</td>
<td width="15%">
    <a href="editServlet?newid=${n.idnews}" class="bj_btn">编辑</a>
    <a href="viewServlet?newid=${n.idnews}" class="sj_btn">查看</a>
    <a href="deleteServlet?newid=${n.idnews}" class="del_btn">删除</a>
</td>
</tr>
</c:forEach>

需要导入jar包
在这里插入图片描述
7.web.xml
配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>Controller.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ShowNewsListServlet</servlet-name>
        <servlet-class>Controller.ShowNewsListServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ShowNewsListServlet</servlet-name>
        <url-pattern>/yinglang/ShowNewsListServlet</url-pattern>
    </servlet-mapping>
    <!--设置会话超时为一分钟-->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>
</web-app>

项目地址:

https://gitee.com/xmr123/JAVAEE/tree/feature-JSP/

猜你喜欢

转载自blog.csdn.net/sunshine543123/article/details/106874031