使用基本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模式创建新闻网站的主要内容,如果未能解决你的问题,请参考以下文章

使用基本MVC2模式创建新闻网站

使用基本MVC2模式创建新闻网站

使用基本MVC2模式创建新闻网站

使用基本MVC2模式创建新闻网站

使用基本MVC2模式创建新闻网站

使用基本MVC2模式创建新闻网站