JavaWeb学习笔记11——MVC新闻网站开发

news/2024/5/9 6:20:14/文章来源:https://blog.csdn.net/h2503652646/article/details/89605709

目录

一、项目结构描述

二、截图

三、关键代码

四、总结


一、项目结构描述

  1. GoPage.java,这是项目的入口,它的最终目的是打开一个页面,新闻首页或者管理员登陆后的后台管理页面。它的任务是获取所有新闻并存入链表,并将新闻链表存入session,方便其他页面获取。获取flag参数,如果获取到了flag=“showlist”,则说明是管理员登录,将新闻数据送入后台管理页面,否则是未登录状态,将数据送入新闻首页浏览。
  2. operateServlet.java,这是操作中心,包括管理员登录、新闻的增删改查。它会根据action参数去调用服务层相应的函数。
  3. DBHelper.java,数据库助手类,本类直接与MySQL相联系,包括数据库的连接、查询、更新、以及最后的释放。
  4. EncodingFilter.java,防止乱码的过滤器。
  5. LoginFilter.java,用于拦截用户未经过登录,直接在地址栏中用url进入管理人员界面。
  6. News.java,新闻的模型,包括新闻ID、新闻类别、新闻标题、新闻内容、新闻作者、更新时间几个属性。
  7. NewsService.java,服务层。通过使用数据库助手类完成新闻的增、删、改、查函数以及用户登录验证函数。
  8. Login.jsp,管理员登录页。
  9. NewsCenter.jsp,新闻首页。
  10. NewsInfo.jsp,新闻详情页。
  11. operateNews.jsp,编辑页面,如编辑新闻和修改新闻。
  12. ShowList.jsp,新闻管理中心页面。

二、截图

三、关键代码

operateServlet.java

package com.hedong.Control;import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**1、这是操作中心,包括管理员登录、新闻的增删改查。* 2、对于不同的操作,程序会去调用服务层的相应功能。*//*** Servlet implementation class operateServlet*/
@WebServlet("/operateServlet")
public class operateServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public operateServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("utf-8");PrintWriter out=response.getWriter();//获取news参数和登录账号密码参数String action=request.getParameter("action");String myType=request.getParameter("newsType");String myTitle=request.getParameter("newsTitle");String myContent=request.getParameter("editorValue");String writer=request.getParameter("newsWriter");String myID=request.getParameter("newsID");String User=request.getParameter("userName");String Password=request.getParameter("passWord");		if(action.equals("add")) {com.hedong.Service.NewsService newsService=new com.hedong.Service.NewsService();//调用服务层添加数据newsService.InsertNews(myType,myTitle,myContent,writer);response.sendRedirect("/NewsWebsite/GoPage?flag=showlist");//重新打开新闻管理页面}else if(action.equals("dele")) {com.hedong.Service.NewsService newsService=new com.hedong.Service.NewsService();//调用服务层删除数据newsService.DeleteNews(myID);response.sendRedirect("/NewsWebsite/GoPage?flag=showlist");//重新打开新闻管理页面}else if(action.equals("edit")) {com.hedong.Service.NewsService newsService=new com.hedong.Service.NewsService();//调用服务层获取数据newsService.EditNews(myType,myTitle,myContent,writer,myID);response.sendRedirect("/NewsWebsite/GoPage?flag=showlist");//重新打开新闻管理页面}else if(action.equals("login")) {com.hedong.Service.NewsService newsService=new com.hedong.Service.NewsService();//调用服务层判断数据System.out.println(User+Password);boolean isLogin=newsService.isUser(User,Password);if(isLogin) {//这个字符串将会在js中被接收//1代表登录成功//2代表用户名或密码为空//3代表用户名或密码错误request.getSession().setAttribute("user",User);out.write("1");}else if(User==""||Password==""){out.write("2");}else {out.write("3");}out.close();}}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

DBHelper.java

package com.hedong.DAL;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/*** 1、本类直接与MySQL相联系,包括数据库的连接、查询、更新、以及最后的释放。*/
public class DBHelper {// 此方法为获取数据库连接public static Connection getConnection() {Connection conn = null;try {String driver = "com.mysql.jdbc.Driver"; // 数据库驱动String url = "jdbc:mysql://localhost:3306/dbnews?useUnicode=true&characterEncoding=UTF-8";//数据库String user = "root"; // 用户名String password = "root"; // 密码Class.forName(driver);// 加载数据库驱动if (null == conn) {conn = DriverManager.getConnection(url, user, password);}} catch (ClassNotFoundException e) {System.out.println("Sorry,can't find the Driver!");e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return conn;}/*** 增删改【Add、Del、Update】** @param sql* @return int*/public static int executeNonQuery(String sql) {int result = 0;Connection conn = null;Statement stmt = null;try {conn = getConnection();stmt = conn.createStatement();result = stmt.executeUpdate(sql);} catch (SQLException err) {err.printStackTrace();free(null, stmt, conn);} finally {free(null, stmt, conn);}return result;}/*** 增删改【Add、Delete、Update】** @param sql* @param obj* @return int*/public static int executeNonQuery(String sql, Object... obj) {int result = 0;Connection conn = null;PreparedStatement pstmt = null;try {conn = getConnection();pstmt = conn.prepareStatement(sql); for (int i = 0; i < obj.length; i++) {pstmt.setObject(i + 1, obj[i]);}result = pstmt.executeUpdate();} catch (SQLException err) {err.printStackTrace();free(null, pstmt, conn);} finally {free(null, pstmt, conn);}return result;}/*** 查【Query】** @param sql* @return ResultSet*/public static ResultSet executeQuery(String sql) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {conn = getConnection();stmt = conn.createStatement();rs = stmt.executeQuery(sql);} catch (SQLException err) {err.printStackTrace();free(rs, stmt, conn);}return rs;}/*** 查【Query】** @param sql* @param obj* @return ResultSet*/public static ResultSet executeQuery(String sql, Object... obj) {Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {conn = getConnection();pstmt = conn.prepareStatement(sql);        for (int i = 0; i < obj.length; i++) {pstmt.setObject(i + 1, obj[i]);}rs = pstmt.executeQuery();} catch (SQLException err) {err.printStackTrace();free(rs, pstmt, conn);}return rs;}/*** 改【edit】** @param sql* @param obj* @return ResultSet*/public static int executeUpdate(String sql) {Connection conn = null;Statement stmt = null;ResultSet rs = null;int result=0;try {conn = getConnection();stmt = conn.createStatement();result = stmt.executeUpdate(sql);} catch (SQLException err) {err.printStackTrace();free(rs, stmt, conn);}return result;}/*** 判断记录是否存在** @param sql* @return Boolean*/public static Boolean isExist(String sql) {ResultSet rs = null;try {rs = executeQuery(sql);rs.last();int count = rs.getRow();if (count > 0) {return true;} else {return false;}} catch (SQLException err) {err.printStackTrace();free(rs);return false;} finally {free(rs);}}/*** 释放【ResultSet】资源** @param rs*/public static void free(ResultSet rs) {try {if (rs != null) {rs.close();}} catch (SQLException err) {err.printStackTrace();}}/*** 释放【Statement】资源** @param st*/public static void free(Statement st) {try {if (st != null) {st.close();}} catch (SQLException err) {err.printStackTrace();}}/*** 释放【Connection】资源** @param conn*/public static void free(Connection conn) {try {if (conn != null) {conn.close();}} catch (SQLException err) {err.printStackTrace();}}/*** 释放所有数据资源** @param rs* @param st* @param conn*/public static void free(ResultSet rs, Statement st, Connection conn) {free(rs);free(st);free(conn);}}

NewsService.java

package com.hedong.Service;import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;/*** 1、服务层。包括新闻的增、删、改、查,以及用户账号密码验证。*/
public class NewsService {public void InsertNews(String myType,String myTitle,String myContent,String writer){SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式String time= df.format(new Date());// new Date()为获取当前系统时间String sql="insert into news_tb (newsType,newsTitle,newsContent,newsWriter,newsTime) values ('"+myType+"','"+myTitle+"','"+myContent+"','"+writer+"','"+time+"')";int result= com.hedong.DAL.DBHelper.executeUpdate(sql);//调用数据修改层if(result>0){System.out.println("add sql over");}		  }public void DeleteNews(String newsID){String sql="delete from news_tb where newsID='"+newsID+"'";int result= com.hedong.DAL.DBHelper.executeUpdate(sql);//调用数据修改层if(result>0){System.out.println("del sql over");}		  }public void EditNews(String myType,String myTitle,String myContent,String writer,String myID){SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式String time= df.format(new Date());// new Date()为获取当前系统时间String sql="update news_tb set newsType='"+myType+"',newsTitle='"+myTitle+"' , newsContent='"+myContent+"' , newsWriter='"+writer+"',newsTime='"+time+"' where newsID='"+myID+"'";int result= com.hedong.DAL.DBHelper.executeUpdate(sql);//调用数据修改层if(result>0){System.out.println("edit sql over");}		  }public boolean isUser(String user,String password) {String sql="select * from login_tb where userID='"+user+"' and passWord='"+password+"'";return com.hedong.DAL.DBHelper.isExist(sql);//调用数据判断层}public ArrayList<com.hedong.Model.News> QueryNews(){		  ArrayList<com.hedong.Model.News> arrNews=new ArrayList<com.hedong.Model.News>();String sql="select * from news_tb ";ResultSet rs= com.hedong.DAL.DBHelper.executeQuery(sql);//调用数据访问层System.out.println("excuete sql over");try {while(rs.next()){com.hedong.Model.News model=new com.hedong.Model.News();model.setNewsID(rs.getInt("newsID"));model.setNewsType(rs.getString("newsType"));model.setNewsTitle(rs.getString("newsTitle"));model.setNewsContent(rs.getString("NewsContent"));model.setNewsWriter(rs.getString("newsWriter"));model.setNewsTime(rs.getDate("newsTime"));arrNews.add(model);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return arrNews;}}

四、总结

  1. 项目中使用了UEditor编辑器用于新闻的编辑,第一次使用没想到挺轻松,这是UEditor编辑器在项目中的使用方法:UEditor在JavaWeb中的应用
  2. 刚开始试图将新闻内容一起放在url后面作为参数传递给编辑修改页面,但结果是新闻内容中包含着一些特殊符号(使用了UEditor编辑器)导致url被提前截断。后来改进的方法是在GoPage.java中获取新闻存入链表,将链表存入session,其他页面只需要知道下标就能显示出正确新闻内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_767064.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Splunk智能运维实战》——2.5 找出浏览量来源最多的网站

本节书摘来自华章计算机《Splunk智能运维实战》一书中的第2章&#xff0c;第2.5节&#xff0c;作者 [美]乔史戴昆&#xff08;Josh Diakun&#xff09;&#xff0c;保罗R.约翰逊&#xff08;Paul R. Johnson&#xff09;&#xff0c;德莱克默克&#xff08;Derek Mock&#xff…

c++ _mkdir无法创建文件夹_五步助力运维迅速创建网站备份!

创建网站备份应该是一个网站管理员最为重要的日常工作之一。但现实情况是&#xff0c;备份这一步往往被很多人忽略&#xff0c;也就是说仍然有很多网管的网站安全意识较低。所有的Linux/Mac用户都能够零经济成本地通过命令行工具创建网站备份。本文的初衷不是为读者提供完整的备…

php无法访问_php网站无法访问可能是什么原因

php网站无法访问的原因可能是&#xff1a;1、php版本过低&#xff0c;如【require php>5.3.0】&#xff0c;此时更换php到更高版本即可&#xff1b;2、数据库错误&#xff0c;此时需要检验数据库账号和用户名是否正确&#xff1b;3、网页的URL失效&#xff0c;此时重新部署程…

MVC 如何在action中获取当前网站的根路径

如果基于MVC搭建的网站在IIS发布的是一个单独的端口&#xff0c;那么可以直接通过后面语句获得跟路径&#xff1a;Request.Url.GetLeftPart(UriPartial.Authority).ToString(); 较完整的获取url传送 但往往我们的网站是作为一个子“应用程序”来发布的&#xff0c;可能如下&…

最牛程序员最爱逛的10大编程网站,你知道几个?

今天我给大家推荐10个高级程序员经常逛的网站&#xff0c;你又去过几个呢&#xff1f;来跟着小编一起看看都有哪些牛逼的网站吧。 分享之前我还是要推荐下我自己的前端学习群&#xff1a;653415492&#xff0c;不管你是小白还是大牛&#xff0c;小编我都挺欢迎&#xff0c;不定…

开发大型高负载类网站应用的几个要点

作者&#xff1a; nightsailer 来源&#xff1a; http://www.phpchina.com/bbs/thread-15484-1-1.html看了一些人的所谓大型项目的方法,我感觉都是没有说到点子上&#xff0c;有点难受。 我也说说自己的看法.我个人认为,很难衡量所谓项目是否大型, 即便很简单的应用在高负载和…

你应该知道的关于SEO和Javascript的6个事实

你应该知道的关于SEO和Javascript的6个事实 了解JavaScript的基础知识已成为SEO专家的一项重要技能&#xff0c;尽管到目前为止&#xff0c;这两个学科之间的关系一直存在争议。 关于SEO和JavaScript的关键问题是发现搜索引擎机器人是否可以正确地感知网站内容并实际评估用户体…

程序员常用的技术网站(http://bbs.jointforce.com/topic/17717)

文章转自《http://bbs.jointforce.com/topic/17717》&#xff0c;多谢分享&#xff01; ----------------------------------------------------------------------------- 作为一个每天都泡在电脑面前的程序员来说&#xff0c;选对一些学习的地方、和大家交流的地方就显得尤…

浅谈Web网站架构演变过程及各阶段所用的技术和架构设计

2019独角兽企业重金招聘Python工程师标准>>> 前言 我们以javaweb为例&#xff0c;来搭建一个简单的电商系统&#xff0c;看看这个系统可以如何一步步演变。 该系统具备的功能&#xff1a; 用户模块&#xff1a;用户注册和管理商品模块&#xff1a;商品展示和管理交易…

推荐5款不为人知的网站!竟如此好用,不收藏下来真的可惜了!

网站是每一个人必不可少的资源&#xff0c;如果你有了一份好的资源&#xff0c;你的效率也会大大提升&#xff0c;下面推荐的5款网站&#xff0c;希望你们能够喜欢&#xff01; 1.创造狮推荐5款不为人知的网站&#xff01;竟如此好用&#xff0c;不收藏下来真的可惜了&#xff…

大型网站架构演变和知识体系

微博上看到的一张图&#xff0c;很形象。之前看过一个淘宝网负责技术的一个主管在某技术交流会上介绍的淘宝的的三代架构发展过程&#xff0c;也是像这样的一步步走过。特此分享。

使用.net core基于Razor Pages开发网站一些工作笔记

本文是在实践工作中遇到的一些问题记录&#xff0c;并给出是如何解决的&#xff0c;.net core已经升级到3.0版本了&#xff0c;其实在项目中很早就已经在使用.net core来开发后台接口了&#xff0c;正好有个网站项目&#xff0c;就使用了Razor Pages来开发&#xff0c;从体验上…

java程序员菜鸟进阶(八)分享一个爬取B2B网站信息的程序

前段时间&#xff0c;女朋友如愿以偿的找到了销售的工作&#xff0c;第一天正式上班还挺高兴&#xff0c;第二天就开始愁眉苦脸了。就是因为他这销售实在是太麻烦&#xff0c;以后每天要到一些B2B网站去找一些客户信息&#xff0c;每天要找几百条&#xff0c;刚开始我还安慰的说…

推荐一个源代码浏览网站

原文&#xff1a; http://www.linuxers.cn/2010/04/23/%E6%8E%A8%E8%8D%90%E4%B8%80%E4%B8%AA%E6%BA%90%E4%BB%A3%E7%A0%81%E6%B5%8F%E8%A7%88%E7%BD%91%E7%AB%99/ 今天在逛水木linux dev版的时候发现了一个不错的网站&#xff0c;www.sooset.com &#xff0c;它可以提供在线…

[转贴] 著名社交网站LinkedIn的Java架构技术

在JavaOne 2008的会议上&#xff0c;著名社交网站LinkedIn的开发者做了2个关于LinkedIn网站的架构技术的演讲&#xff0c;目前这两个演讲的PPT已经可以下载了。下载地址如下&#xff1a; LinkedIn - A Professional Social Network Built with Java™ Technologies and Agile …

Android 开发者福利Google Developers中国网站发布

今天一早就听到各大QQ群&#xff0c;好友说Google 发布中国站点了&#xff0c;迫不及待的查看了究竟。 摘自原文 谷歌开发者公众号 我们很高兴地宣布&#xff0c;Google Developers 中国网站 (developers.google.cn) 正式发布&#xff01; 谷歌自带中文翻译&#xff0c;让我们…

网站原生app服务器安装环境,Websphere环境搭建及应用部署

3) 启动报错&#xff1a; SRVE0293E: [Servlet错误]-[null]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport报错信息&#xff1a;[13-4-9 17:23:42:960 CST] 0000002d webapp E com.ibm.ws.webcontainer.webapp.WebApp logError SRVE0293E: [Servlet错误]-[null]: com.ibm…

九度搜索引擎点击优化_seo优化快排技术是什么?靠不靠谱?

近半年来市场上充斥着大量的seo 优化快速排名的产品&#xff0c;标榜着“指定词7-15天上首页”“不上首页不扣费”“核心算法&#xff0c;稳定官网排名”等各种宣传口号&#xff0c;让人眼花缭乱。那么&#xff0c;到底有没有优化快排的技术&#xff1f;现在这些产品靠不靠谱呢…

让您的网站拥有MSDN资源库搜索功能[转摘MSDN]

方式一 在您需要添加MSDN搜索链接的地方添加以下代码&#xff1a;<script language"Javascript" src"http://www.microsoft.com/china/msdn/search/msdn_search.js"> </script>使用以上代码&#xff0c;产生的搜索样式如下图所示&#xff1a;注…

国外SEO圣经[PDF]

本文专自&#xff1a; 国外的一本经典之作&#xff0c;专业人士称为“SEO圣经”。不教你用任何作弊手段欺骗搜索引擎&#xff0c;而给你一种正确的方法&#xff0c;让你走一条seo优化的康庄大道。将你引向网络营销的成功颠峰&#xff01;这是一本世界上最有名的SEO教程&#xf…