使用基本MVC2模式创建新闻网站
Posted why1997
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用基本MVC2模式创建新闻网站相关的知识,希望对你有一定的参考价值。
一、概念
所谓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富文本编辑的时候,需要配置。
其次最需要注意的就是数据库的操作语句以及数据库的连接,新闻表的代码,由于之前已经做过登录,不在附上该操作代码。在操作数据库时,如果频繁的需要连接数据库,那么可以将连接的代码单独写到一个类中去。
二、运行结果
三.代码
1 package dao; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 import java.util.ArrayList; 10 import java.util.List; 11 12 import bean.News; 13 14 public class Newsdao { 15 private static final long serialVersionUID = 1L; 16 // private String driverName="com.mysql.jdbc.Driver"; 17 // private String url="jdbc:mysql://localhost:3306/newsdata?useSSL=false&serverTimezone=UTC"; 18 // private String name="root"; 19 // private String pwd="123456"; 20 static Connection con=null; 21 public static Connection getCon() { 22 String driverName="com.mysql.cj.jdbc.Driver"; 23 String url="jdbc:mysql://localhost:3306/newsdata?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"; 24 String name="root"; 25 String pwd="123456"; 26 try { 27 Class.forName(driverName); 28 try { 29 con = DriverManager.getConnection(url, name, pwd); 30 } catch (SQLException e) { 31 e.printStackTrace(); 32 } 33 34 } catch (ClassNotFoundException e) { 35 e.printStackTrace(); 36 } 37 return con; 38 } 39 //添加新闻 40 public boolean addNews(News news) { 41 con=Newsdao.getCon(); 42 boolean flag=false; 43 String sql="insert news(title,type,datetime,content) values(‘"+news.getTitle()+"‘,‘" 44 +news.getType()+"‘,‘" 45 +news.getDateTime()+"‘,‘" 46 +news.getContent()+"‘)"; 47 //System.out.println("添加的sql语句"+sql); 48 try { 49 PreparedStatement ps=con.prepareStatement(sql); 50 int i=ps.executeUpdate(); 51 //System.out.println("i的值"+i); 52 ps.close(); 53 con.close(); 54 if(i>0) { 55 flag =true; 56 } 57 } catch (SQLException e) { 58 System.out.println("添加出错啦"); 59 e.printStackTrace(); 60 } 61 62 return flag; 63 } 64 public List<News> selectByID(int id){ 65 con=Newsdao.getCon(); 66 List<News> list=new ArrayList<>(); 67 String sql="select * from news where id="+id+""; 68 System.out.println(sql); 69 Statement state; 70 ResultSet rs; 71 try { 72 state = con.createStatement(); 73 rs=state.executeQuery(sql); 74 while(rs.next()) { 75 News news=new News(); 76 news.setTitle(rs.getString("title")); 77 news.setContent(rs.getString("content")); 78 news.setDateTime(rs.getString("dateTime")); 79 news.setType(rs.getString("type")); 80 ; news.setId(id); 81 list.add(news); 82 //System.out.println(news.getTitle()); 83 } 84 rs.close(); 85 state.close(); 86 con.close(); 87 } catch (SQLException e) { 88 System.out.println("查询出错啦"); 89 e.printStackTrace(); 90 } 91 return list; 92 } 93 94 95 //删除新闻 96 public List<News> selectAll(){ 97 con=Newsdao.getCon(); 98 List<News> list=new ArrayList<News>(); 99 String sql="select * from news"; 100 Statement state; 101 ResultSet rs; 102 try { 103 state = con.createStatement(); 104 rs=state.executeQuery(sql); 105 while(rs.next()) { 106 News news=new News(); 107 news.setId(rs.getInt("id")); 108 news.setTitle(rs.getString("title")); 109 news.setContent(rs.getString("content")); 110 news.setDateTime(rs.getString("dateTime")); 111 news.setType(rs.getString("type")); 112 list.add(news); 113 //System.out.println(news.getType()); 114 } 115 rs.close(); 116 state.close(); 117 con.close(); 118 } catch (SQLException e) { 119 System.out.println("查询出错啦"); 120 e.printStackTrace(); 121 } 122 return list; 123 } 124 125 //修改新闻 126 127 public boolean update(News news) { 128 con=Newsdao.getCon(); 129 boolean flag=false; 130 String sql="update news set title=‘"+news.getTitle()+"‘,type=‘"+news.getType() 131 +"‘,dateTime=‘"+news.getDateTime() 132 +"‘,content=‘"+news.getContent()+"‘ where id="+news.getId()+""; 133 System.out.println(sql); 134 Statement state=null; 135 try { 136 state = con.createStatement(); 137 int i=state.executeUpdate(sql); 138 System.out.println(i); 139 if(i>0) { 140 flag=true; 141 } 142 } catch (SQLException e) { 143 System.out.println("更新错误啦"); 144 e.printStackTrace(); 145 } 146 147 return false; 148 } 149 150 //删除 151 public boolean delete(int id) { 152 con=Newsdao.getCon(); 153 boolean flag=false; 154 String sql="delete from news where id=‘"+id+"‘"; 155 // System.out.println(sql); 156 PreparedStatement ps; 157 try { 158 ps = con.prepareStatement(sql); 159 int i=ps.executeUpdate(); 160 if(i>0){ 161 flag=true; 162 } 163 } catch (SQLException e) { 164 System.out.println("删除出错啦"); 165 e.printStackTrace(); 166 } 167 168 return flag; 169 } 170 171 } 复制代码 package com.yuanze.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import net.sf.json.JSONObject; public class ImageServlet extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 PrintWriter pout=resp.getWriter(); JSONObject rs=new JSONObject(); String savePath = this.getServletContext().getRealPath("/image"); System.out.println(savePath); File file = new File(savePath); //判断上传文件的保存目录是否存在 if (!file.exists() && !file.isDirectory()) { System.out.println(savePath+"目录不存在,需要创建"); //创建目录 file.mkdir(); } SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH?"); String name = "img_"+sdf.format(new Date()) + String.valueOf(new Random().nextInt(1000))+".jpg"; //使用Apache文件上传组件处理文件上传步骤: //1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //解决上传文件名的中文乱码 upload.setHeaderEncoding("UTF-8"); //3、判断提交上来的数据是否是上传表单的数据 if(!ServletFileUpload.isMultipartContent(req)){ //按照传统方式获取数据 return; } //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项 List<FileItem> list=null; try { list = upload.parseRequest(req); } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); rs.put("state", "文件上传失败!"); //在此处写上错误提示信息,这样当错误的时候就会显示此信息 rs.put("url",""); pout.write(rs.toString()); pout.flush(); pout.close(); return; } for(FileItem item : list){ //如果fileitem中封装的是普通输入项的数据 if(!item.isFormField()) {//如果fileitem中封装的是上传文件 //得到上传的文件名称, String filename = item.getName(); filename=URLDecoder.decode(filename, "UTF-8"); System.out.println(filename); if(filename==null || filename.trim().equals("")){ continue; } filename=name; //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + "\\\\" + filename); //创建一个缓冲区 byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标识 int len = 0; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=in.read(buffer))>0){ //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\\\" + filename)当中 out.write(buffer, 0, len); } //关闭输入流 in.close(); //关闭输出流 out.close(); //删除处理文件上传时生成的临时文件 item.delete(); rs.put("state", "SUCCESS");// UEDITOR的规则:不为SUCCESS则显示state的内容 rs.put("url","http://localhost/EdittextServlet/image/"+name);//能访问到你现在图片的路径 pout.write(rs.toString()); pout.flush(); pout.close(); return; } } rs.put("state", "文件上传失败!"); //在此处写上错误提示信息,这样当错误的时候就会显示此信息 rs.put("url",""); pout.write(rs.toString()); pout.flush(); pout.close(); return; } } ImageServlet
package com.yuanze.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import net.sf.json.JSONObject; public class ImageServlet extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 PrintWriter pout=resp.getWriter(); JSONObject rs=new JSONObject(); String savePath = this.getServletContext().getRealPath("/image"); System.out.println(savePath); File file = new File(savePath); //判断上传文件的保存目录是否存在 if (!file.exists() && !file.isDirectory()) { System.out.println(savePath+"目录不存在,需要创建"); //创建目录 file.mkdir(); } SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH?"); String name = "img_"+sdf.format(new Date()) + String.valueOf(new Random().nextInt(1000))+".jpg"; //使用Apache文件上传组件处理文件上传步骤: //1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //解决上传文件名的中文乱码 upload.setHeaderEncoding("UTF-8"); //3、判断提交上来的数据是否是上传表单的数据 if(!ServletFileUpload.isMultipartContent(req)){ //按照传统方式获取数据 return; } //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项 List<FileItem> list=null; try { list = upload.parseRequest(req); } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); rs.put("state", "文件上传失败!"); //在此处写上错误提示信息,这样当错误的时候就会显示此信息 rs.put("url",""); pout.write(rs.toString()); pout.flush(); pout.close(); return; } for(FileItem item : list){ //如果fileitem中封装的是普通输入项的数据 if(!item.isFormField()) {//如果fileitem中封装的是上传文件 //得到上传的文件名称, String filename = item.getName(); filename=URLDecoder.decode(filename, "UTF-8"); System.out.println(filename); if(filename==null || filename.trim().equals("")){ continue; } filename=name; //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + "\\\\" + filename); //创建一个缓冲区 byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标识 int len = 0; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=in.read(buffer))>0){ //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\\\" + filename)当中 out.write(buffer, 0, len); } //关闭输入流 in.close(); //关闭输出流 out.close(); //删除处理文件上传时生成的临时文件 item.delete(); rs.put("state", "SUCCESS");// UEDITOR的规则:不为SUCCESS则显示state的内容 rs.put("url","http://localhost/EdittextServlet/image/"+name);//能访问到你现在图片的路径 pout.write(rs.toString()); pout.flush(); pout.close(); return; } } rs.put("state", "文件上传失败!"); //在此处写上错误提示信息,这样当错误的时候就会显示此信息 rs.put("url",""); pout.write(rs.toString()); pout.flush(); pout.close(); return; } } ImageServlet
以上是关于使用基本MVC2模式创建新闻网站的主要内容,如果未能解决你的问题,请参考以下文章