使用基本MVC2模式创建新闻网站
MVC简介
所谓MVC,即Model-View-Controller。
(1)Model层:Model指模型部分,一般在应用中Model层包括业务处理层和数据访问层。数据访问层主要是对数据库的一些操作的封装。业务处理层应用JavaBean构建, JavaBean主要是用作将从View层获取的数据和数据库的数据进行桥接。除却JavaBean以外,若想构建分布式应用系统,可以应用EJB组件进行业务逻辑层的构建。
(2)Controller层:Controller指控制部分,一般是对View层提交的请求为其设置对应的Servlet进行特定功能的处理,这里的进行特定功能的处理一般是编写在Model中的业务处理层中的。Controller一般只是在Web应用中充当一个中介者的作用。
(3)View层:View指视图部分,这一部分的内容是展示给用户实际进行交互的,通常使用JSP和HTML进行构建(个人比较喜欢以HTML嵌入JSP的方式来构建网页)。
综上来说,一个小型完整的基于MVC设计模式的Web应用程序的处理流程应该如下:
由上面的图中我们可以看出,用户在客户端(Web应用的客户端即为浏览器)中发出请求的时候,请求首先由View层的JSP/HTML将HTTP请求传给控制器中对应的Servlet,然后由Servlet负责调用Model层中的业务逻辑处理部分进行要求的处理,处理期间如果设计数据库的操作,则与数据库进行操作,最后全部操作结束之后,由业务逻辑层将结果发给控制层,控制层以HTTP响应的形式将结果发送回客户端。
简单的基于MVC2的增删改查
基本的操作就是连接数据库的进行简单的增删改查,然后数据的回显。此处遇到的主要的问题一个是使用ueditor富文本编辑的时候,需要配置。
其次最需要注意的就是数据库的操作语句以及数据库的连接,新闻表的代码,由于之前已经做过登录,不在附上该操作代码。在操作数据库时,如果频繁的需要连接数据库,那么可以将连接的代码单独写到一个类中去。
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import bean.News; public class Newsdao {
private static final long serialVersionUID = 1L;
// private String driverName="com.mysql.jdbc.Driver";
// private String url="jdbc:mysql://localhost:3306/newsdata?useSSL=false&serverTimezone=UTC";
// private String name="root";
// private String pwd="123456";
static Connection con=null;
public static Connection getCon() {
String driverName="com.mysql.cj.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/newsdata?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
String name="root";
String pwd="";
try {
Class.forName(driverName);
try {
con = DriverManager.getConnection(url, name, pwd);
} catch (SQLException e) {
e.printStackTrace();
} } catch (ClassNotFoundException e) {
e.printStackTrace();
}
return con;
}
//添加新闻
public boolean addNews(News news) {
con=Newsdao.getCon();
boolean flag=false;
String sql="insert news(title,type,datetime,content) values('"+news.getTitle()+"','"
+news.getType()+"','"
+news.getDateTime()+"','"
+news.getContent()+"')";
//System.out.println("添加的sql语句"+sql);
try {
PreparedStatement ps=con.prepareStatement(sql);
int i=ps.executeUpdate();
//System.out.println("i的值"+i);
ps.close();
con.close();
if(i>) {
flag =true;
}
} catch (SQLException e) {
System.out.println("添加出错啦");
e.printStackTrace();
} return flag;
}
public List<News> selectByID(int id){
con=Newsdao.getCon();
List<News> list=new ArrayList<>();
String sql="select * from news where id="+id+"";
System.out.println(sql);
Statement state;
ResultSet rs;
try {
state = con.createStatement();
rs=state.executeQuery(sql);
while(rs.next()) {
News news=new News();
news.setTitle(rs.getString("title"));
news.setContent(rs.getString("content"));
news.setDateTime(rs.getString("dateTime"));
news.setType(rs.getString("type"));
; news.setId(id);
list.add(news);
//System.out.println(news.getTitle());
}
rs.close();
state.close();
con.close();
} catch (SQLException e) {
System.out.println("查询出错啦");
e.printStackTrace();
}
return list;
} //删除新闻
public List<News> selectAll(){
con=Newsdao.getCon();
List<News> list=new ArrayList<News>();
String sql="select * from news";
Statement state;
ResultSet rs;
try {
state = con.createStatement();
rs=state.executeQuery(sql);
while(rs.next()) {
News news=new News();
news.setId(rs.getInt("id"));
news.setTitle(rs.getString("title"));
news.setContent(rs.getString("content"));
news.setDateTime(rs.getString("dateTime"));
news.setType(rs.getString("type"));
list.add(news);
//System.out.println(news.getType());
}
rs.close();
state.close();
con.close();
} catch (SQLException e) {
System.out.println("查询出错啦");
e.printStackTrace();
}
return list;
} //修改新闻 public boolean update(News news) {
con=Newsdao.getCon();
boolean flag=false;
String sql="update news set title='"+news.getTitle()+"',type='"+news.getType()
+"',dateTime='"+news.getDateTime()
+"',content='"+news.getContent()+"' where id="+news.getId()+"";
System.out.println(sql);
Statement state=null;
try {
state = con.createStatement();
int i=state.executeUpdate(sql);
System.out.println(i);
if(i>) {
flag=true;
}
} catch (SQLException e) {
System.out.println("更新错误啦");
e.printStackTrace();
} return false;
} //删除
public boolean delete(int id) {
con=Newsdao.getCon();
boolean flag=false;
String sql="delete from news where id='"+id+"'";
// System.out.println(sql);
PreparedStatement ps;
try {
ps = con.prepareStatement(sql);
int i=ps.executeUpdate();
if(i>){
flag=true;
}
} catch (SQLException e) {
System.out.println("删除出错啦");
e.printStackTrace();
} return flag;
} }
新闻的添加
package servlet; import java.io.IOException;
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 bean.News;
import dao.Newsdao; /**
* Servlet implementation class AddServlet
*/
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet { public AddServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
String title=request.getParameter("title");
String type=request.getParameter("type");
String datetime=request.getParameter("datetime");
String content=request.getParameter("ueditor");
System.out.println("这是ueditor的内容"+title+content);
News news=new News();
news.setTitle(title);
news.setContent(content);
news.setDateTime(datetime);
news.setType(type); Newsdao nd=new Newsdao(); try{
nd.addNews(news);
response.sendRedirect("newslistServlet");
//request.getRequestDispatcher("/newslist.jsp").forward(request, response);
}catch(Exception e) {
System.out.println("添加失败");
}
} }
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.util.*" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8">
<script type="text/javascript" charset="utf-8" src="utf8-jsp/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="utf8-jsp/ueditor.all.min.js"> </script>
<script type="text/javascript" charset="utf-8" src="utf8-jsp/lang/zh-cn/zh-cn.js"></script> <title>新闻页</title>
<style type="text/css"> body{
margin-top:20px;
backgroud-color:#ff2812;
text-align:center;
}
.text{
width:500px;
height:20px; }
.btn{
right: 35px;
bottom: 25px;
width: 100px;
height: 30px;
background: #759fc7;
font-size: 15px;
color: #fff;
letter-spacing: 10px;
margin-left:40px;
text-align: center;
}
</style>
</head>
<body>
<div >
<h2>添加新闻</h2>
<form action="addServlet" method="POST" >
新闻标题 <input class="text" type="text" name="title" ><br><br> 新闻类别
<input type="radio" name="type" value="娱乐" checked="checked"/>娱乐
<input type="radio" name="type" value="体育"/>体育
<input type="radio" name="type" value="国际"/>国际
<input type="radio" name="type" value="社会"/>社会
<input type="radio" name="type" value="财经"/>财经
<input type="radio" name="type " value="科技"/>科技
<br><br>
发布时间 <input class="text" type="text" name="datetime" ><br><br>
正文编辑
<script id="editor" type="text/plain" name="ueditor" style="width:1024px;height:500px;margin-left:100px"></script> <button class="btn" type="submit">保存</button >
<!-- <button class="btn" type="submit">退出</button> -->
</form>
</div> <script type="text/javascript">
var ue=UE.getEditor('editor');
function getPlainTxt() {
var arr = [];
arr.push("使用editor.getPlainTxt()方法可以获得编辑器的带格式的纯文本内容");
arr.push("内容为:");
arr.push(UE.getEditor('editor').getPlainTxt());
alert(arr.join('\n'))
}
</script>
</body>
</html>
删除
package servlet; import java.io.IOException; 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 dao.Newsdao; /**
* Servlet implementation class DeleteServlet
*/
@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public DeleteServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String id=(String)request.getParameter("id");
System.out.println("被删除的新闻");
int nid=Integer.parseInt(id);
Newsdao nd=new Newsdao();
nd.delete(nid);
response.sendRedirect("newslistServlet");
//request.getRequestDispatcher("/newslist.jsp").forward(request, response);
} }
修改
注意:此处我是用的先回显需要修改的新闻内容,在进行修改操作。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.util.*" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8">
<script type="text/javascript" charset="utf-8" src="utf8-jsp/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="utf8-jsp/ueditor.all.min.js"> </script>
<script type="text/javascript" charset="utf-8" src="utf8-jsp/lang/zh-cn/zh-cn.js"></script> <title>新闻页</title>
<style type="text/css"> body{
margin-top:20px;
backgroud-color:#ff2812;
text-align:center;
}
.text{
width:500px;
height:20px; }
.btn{
right: 35px;
bottom: 25px;
width: 100px;
height: 30px;
background: #759fc7;
font-size: 15px;
color: #fff;
letter-spacing: 10px;
margin-left:40px;
text-align: center;
}
</style>
</head>
<body>
<div >
<h2>修改新闻</h2>
<form action="updateServlet" method="GET" >
<c:forEach var="s" items="${item}">
新闻编号 <input class="text" type="text" name="id" value="${s.id }"><br><br>
新闻标题 <input class="text" type="text" name="title" value="${s.title }"><br><br> 新闻类别
<input type="radio" name="type" value="娱乐" ${("娱乐"eq s.type)?"checked":""}/>娱乐
<input type="radio" name="type" value="体育" ${("体育"eq s.type)?"checked":""}/>体育
<input type="radio" name="type" value="国际" ${("国际"eq s.type)?"checked":""}/>国际
<input type="radio" name="type" value="社会" ${("社会"eq s.type)?"checked":""}/>社会
<input type="radio" name="type" value="财经" ${("财经"eq s.type)?"checked":""}/>财经
<input type="radio" name="type" value="科技" ${("科技"eq s.type)?"checked":""}/>科技
<br><br>
发布时间 <input class="text" type="text" name="datetime" value="${s.dateTime }" ><br><br>
正文编辑
<script id="editor" type="text/plain" name="editor" style="width:1024px;height:500px;margin-left:100px">${s.content}</script> <button class="btn" type="submit">保存</button >
<!-- <button class="btn" type="submit">退出</button> -->
</form>
</div>
</c:forEach>
<script type="text/javascript"> var ue=UE.getEditor('editor');
UE.getEditor('editor').setContent('${s.content}');
/* function setContent(isAppendTo) {
var arr = [];
arr.push("使用editor.setContent('欢迎使用ueditor')方法可以设置编辑器的内容");
ue.getEditor('editor').setContent('欢迎使用ueditor', isAppendTo);
alert(arr.join("\n"));
} */
//alter("gg");
//UE.getEditor('editor').setContent('${s.content}'); function getContent() {
var arr = [];
arr.push(UE.getEditor('editor').getContent());
alert(arr.join("\n"));
} </script>
</body>
</html>
package servlet; import java.io.IOException; 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 bean.News;
import dao.Newsdao; /**
* Servlet implementation class UpnewsServlet
*/
@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public UpdateServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
String id=request.getParameter("id");
System.out.println("id的值为"+id);
int nid=Integer.parseInt(id);
String title=request.getParameter("title");
String type=request.getParameter("type");
String datetime=request.getParameter("datetime");
String content=request.getParameter("editor");
News news=new News();
news.setId(nid);
news.setTitle(title);
news.setContent(content);
news.setDateTime(datetime);
news.setType(type);
Newsdao nd=new Newsdao();
try{
nd.update(news);
response.sendRedirect("newslistServlet");
}catch(Exception e) {
System.out.println("修改失败");
}
} }
package servlet; import java.io.IOException;
import java.util.List; 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 bean.News;
import dao.Newsdao; /**
* Servlet implementation class ShowServlet
*/
@WebServlet("/ShowServlet")
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public ShowServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;cahrset=utf-8");
String id=request.getParameter("id");
int nid=Integer.parseInt(id); Newsdao nd=new Newsdao();
List<News> list=nd.selectByID(nid);
request.setAttribute("item", list); System.out.println(list.size());
request.getRequestDispatcher("/update.jsp").forward(request, response); } }
查找
package servlet; import java.io.IOException;
import java.util.List; 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 bean.News;
import dao.Newsdao;
@WebServlet("/SelectServlet")
public class SelectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public SelectServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;cahrset=utf-8");
String id=request.getParameter("id");
int nid=Integer.parseInt(id);
Newsdao nd=new Newsdao();
List<News> list=nd.selectByID(nid);
request.setAttribute("news", list); System.out.println(list.size());
request.getRequestDispatcher("/content.jsp").forward(request, response); } }
以下是具体的运行截图,和一些需要的说明
具体的代码已上传云盘:链接: https://pan.baidu.com/s/1puSGXg5eOmiegHRimThAgQ 提取码: ikdm 复制这段内容后打开百度网盘手机App,操作更方便哦
使用基本MVC2模式创建新闻网站的更多相关文章
- 使用基于MVC2模式创建新闻网站
1.什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示 ...
- 基本MVC2模式创建新闻网站
一.介绍 这实现比较简单,就是对两张表的操作,登录利用session验证用户信息. 2.效果
- 关于Entity Framework采用DB First模式创建后的实体批量修改相关属性技巧
Entity Framework采用DB First模式创建实体是比较容易与方便的,修改已创建的实体在个数不多的情况下也是没问题的,但如果已创建的实体比较多,比如10个实体以上,涉及修改的地方比较多的 ...
- JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)
一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
原文:WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 在<基于IIS的WCF服务寄宿(Hosting)实现揭秘>中,我们谈到在采用基于IIS(或者 ...
- FactoryMethod工厂方法模式(创建型模式)
1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...
- Prototype原型模式(创建型模式)
1.原型模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只有一 ...
- Android 开发学习进程0.30 builder模式创建popwindow
builder模式创建自定义popwindow builder设计模式 将一个复杂的对象构建与它的表示分离,简化代码的使用方式.当对象有多个参数或多个零件同时初始化方法同时初始化方法有默认值时,采用此 ...
- 工厂方法模式——创建型模式02
1. 简单工厂模式 在介绍工厂方法模式之前,先介绍一下简单工厂模式.虽然简单工厂模式不属于GoF 23种设计模式,但通常将它作为学习其他工厂模式的入门,并且在实际开发中使用的也较为频繁. (1 ...
随机推荐
- MySQL分组查询与连接查询
一,分组查询 使用ORDER BY子句将表中的数据分成若干组(还是按行显示) 语法: SELECT 字段名[,聚集函数] FROM 表名 [WHERE子句] GROUP BY 要分组的字段名 [ORD ...
- 基于Html5 Plus + Vue + Mui 移动App开发(三)-文件操作(读取、保存、更新数据)
随着手机的发展,现在越来越多的人选择在手机上看书.无论是专业书籍.文学.英语还是网络小说,在手机上看新闻成了人们处理零碎时间的办法.在智能手机里安装一个资讯APP,可以随时.随地查看自己想看的资讯 ...
- 源码浅谈(二):java中的 Integer.parseInt(String str)方法
这个方法是将字符串转换为整型 一.parseInt方法 ,可以看到默认又调用了parseInt(s,10) , 第二个参数为基数,默认10 ,当然也可以自己设置 public static int ...
- Microsoft Deployment Toolkit build 8456
MDT build 8456的重大变化摘要. 支持的配置更新 Windows ADK for Windows 10,版本1809 Windows 10,版本1809 Configuration Man ...
- Unity切换到安卓平台Shader丢失(opengl)
Unity安卓平台shader平台丢失 Unity的工程切换到Android平台后,运行游戏出现shader丢失 解决办法:在Unity桌面图标的快捷方式后添加 -force-gles20 示例:&q ...
- MySQL基础知识-安装MySQL
前导: 昨天去参加了一个面试,公司不太大,是一家日资企业,在国内有几家分公司,面试官问到了MySQL的基本操作和性能优化,说了一大堆,倒是比较轻松的过了,但是面试结束之后,想了一下,基本操作忘的还是挺 ...
- idea中Springcloud同时运行多个模块、微服务
idea中有个窗口叫做 Run DashBoard 在这里可以管理多个模块的启停,这个面板一般情况下是关闭的打开Run DashBoard面板 在工程的.idea中找到workspace.xml,并找 ...
- python学习_2
1.pycharm部分技巧 1)创建时路径尽量要避免中文2)用滚轮调整编辑器字体大小 1.file->setting...->editor->general 搜索'mouse' ...
- 配置安全的管理访问(GNS3)
实验拓扑: 实验目的: 尝试用R2/R3远程登陆R1路由器并进行管理,在此之前先在R1配置安全的管理访问 1.端口IP配置 R1: e1/0 192.168.1.1/24 e1/1 192.168.2 ...
- CQOI2019(十二省联考)游记
CQOI2019(十二省联考)游记 Day -? 自从联赛爆炸,\(THUWC\)爆炸,\(WC\)爆炸(就没有不爆炸的)之后我已经无所畏惧... 听说是考\(4.5 h\)吗? Day -1 \(Z ...