【javaweb笔记】7、MVC及三层架构详解,乱码问题,三层代码流程解析

三层架构:

MVC与三层架构:

三层代码流程解析:

实例流程:

代码实例:

Student.java

package org.student.entity;

public class Student {
	private int sno ;
	private String sname ; 
	private int sage ; 
	private String saddress ;
	public Student() {
	}
	
	public Student(String sname,int sage, String saddress) {
		this.sname = sname;
		this.sage = sage;
		this.saddress = saddress;
	}
	
	public Student(int sno, String sname, int sage, String saddress) {
		this.sno = sno;
		this.sname = sname;
		this.sage = sage;
		this.saddress = saddress;
	}
	public int getSno() {
		return sno;
	}
	public void setSno(int sno) {
		this.sno = sno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getSage() {
		return sage;
	}
	public void setSage(int sage) {
		this.sage = sage;
	}
	public String getSaddress() {
		return saddress;
	}
	public void setSaddress(String saddress) {
		this.saddress = saddress;
	} 
	
	@Override
	public String toString() {
		return this.getSno()+"-"+this.getSname()+"-"+this.getSage()+""+this.getSaddress();
	}
	
	
}

AddStudentServlet.java

package org.student.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.student.entity.Student;
import org.student.service.IStudentService;
import org.student.service.impl.StudentServiceImpl;

public class AddStudentServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		int no =Integer.parseInt( request.getParameter("sno"));
		String name = request.getParameter("sname");
		int age = Integer.parseInt(  request.getParameter("sage")) ;
		String address = request.getParameter("saddress");
		Student student  = new Student(no,name,age,address) ;
		
		//接口 x = new 实现类();
		IStudentService studentService = new StudentServiceImpl();
		boolean result = studentService.addStudent(student) ;
		
		/*
		 *   out  request  response session  application 
		 *   out:	PrintWriter out = response.getWriter() ;
		 *   session:	request.getSession()
		 *   application:	request.getServletContext()
		 */
		//设置响应编码
		response.setContentType("text/html; charset=UTF-8");
		response.setCharacterEncoding("utf-8");
		
		PrintWriter out = response.getWriter() ;//响应对象
		
		/*
		if(result) {
			//out.println("增加成功!");
			//response.sendRedirect("QueryAllStudentsServlet");
		}else {
			//out.println("增加失败!");
			//response.sendRedirect("QueryAllStudentsServlet");
		}*/
		if(!result) {//如果增加失败,给request放入一条数据error
			request.setAttribute("error", "addError");  
		}else {//增加成功
			request.setAttribute("error", "noaddError");  
		}
//		response.sendRedirect("QueryAllStudentsServlet");
		request.getRequestDispatcher("QueryAllStudentsServlet").forward(request, response);
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

StudentServiceImpl.java

package org.student.service.impl;

import java.util.List;

import org.student.dao.IStudentDao;
import org.student.dao.impl.StudentDaoImpl;
import org.student.entity.Student;
import org.student.service.IStudentService;

//业务逻辑层:逻辑性的增删改查( 增:查+增)  ,对dao层进行的组装
public class StudentServiceImpl implements IStudentService{
	IStudentDao studentDao = new StudentDaoImpl();
	//根据学号查询学生
	public Student queryStudentBySno(int sno) {
		return studentDao.queryStudentBySno(sno);
	}
	//查询全部学生
	public List<Student> queryAllStudents(){
		return studentDao.queryAllStudents() ;
	}
	
	public boolean updateStudentBySno(int sno, Student student) {
		if(studentDao.isExist(sno)) {
			return studentDao.updateStudentBySno(sno, student) ;
		}
		return false ;
	}	
	
	public boolean deleteStudentBySno(int sno) {
		if(studentDao.isExist(sno)) {
			return studentDao.deleteStudentBySno(sno) ;
		}
			return false ;
	}
	
	public boolean addStudent(Student student) {
		if(!studentDao.isExist(student.getSno())) {//不存在
			
			return studentDao.addStudent(student) ; 
		}else {
			System.out.println("此人已存在!");
			return false ;
		}
	}
	@Override
	public List<Student> queryStudentsByPage(int currentPage, int pageSize) {
		
		return studentDao.queryStudentsByPage(currentPage, pageSize);
	}
	@Override
	public int getTotalCount() {
		return studentDao.getTotalCount();
	}
}

StudentDaoImpl.java

package org.student.dao.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.student.dao.IStudentDao;
import org.student.entity.Student;
import org.student.util.DBUtil;

//数据访问层:原子性 的增删改查
public class StudentDaoImpl implements IStudentDao{
	private final String URL  ="jdbc:oracle:thin:@127.0.0.1:1521:ORCL" ;
	private final String USERNAME  ="scott" ;
	private final String PASSWORD  ="tiger" ;
	
	//存在大量冗余(重复)
	public boolean addStudent(Student student) {//zs 23 xa 
		String sql ="insert into student(sno,sname,sage,saddress) values(?,?,?,?) " ;
		Object[] params = {student.getSno(),student.getSname(),student.getSage(),student.getSaddress()};
		return DBUtil.executeUpdate(sql, params) ;
	}
	
	//根据学号修改学生: 根据sno知道待修改的人 ,把这个人 修改成student
	public boolean updateStudentBySno(int sno,Student student) {//3 -> zs,23,bj
		String sql = "update student set sname =?,sage=?,saddress=? where sno=?" ;
		Object[] params = {student.getSname(),student.getSage(),student.getSaddress(),sno};
		return DBUtil.executeUpdate(sql, params) ;
	}
	
	//根据学号删除学生
	public boolean deleteStudentBySno(int sno) {
		String sql = "delete from student where sno = ?" ;
		Object[] params = {sno} ;
		return DBUtil.executeUpdate(sql, params) ;
	}
	
	//查询全部学生(很多学生)
	public List<Student> queryAllStudents() {
		PreparedStatement pstmt = null ;
		Student student = null;
		List<Student> students = new ArrayList<>();
		ResultSet rs = null ;
		try {
			String sql = "select * from student" ;
			 rs = DBUtil.executeQuery(sql, null) ;
//			 rs =  pstmt.executeQuery() ;
			  while(rs.next()) {
				  int no =   rs.getInt("sno") ;
				  String name =   rs.getString("sname") ;
				  int age =   rs.getInt("sage");
				  String address = rs.getString("saddress") ;
				  student = new Student(no,name,age,address);
				  students.add(student) ;
			  }
			  return students ;
		} catch (SQLException e) {
			e.printStackTrace();
			return null ; 
		}catch (Exception e) {
			e.printStackTrace();
			return null ; 
		}
		finally {
			DBUtil.closeAll(rs, pstmt, DBUtil.connection);
//				try {
//					if(rs!=null)rs.close();
//					if(pstmt!=null)pstmt.close();
//					if(DBUtil.connection!=null)DBUtil.connection.close();
//				} catch (SQLException e) {
//					e.printStackTrace();
//				} 
		}
	}
	//根据姓名查询
	//根据年龄查询
	//查询此人是否存在
	public boolean isExist(int sno) {//true:此人存在  false:不存在
		return queryStudentBySno(sno)==null? false:true  ;
	}
	
	//根据学号 查询学生
	public Student queryStudentBySno(int sno) {//3
		Student student = null;
		Connection connection = null ;
		 PreparedStatement pstmt = null ;
		  ResultSet rs = null ; 
		try {
			Class.forName("oracle.jdbc.OracleDriver") ;
			 connection = DriverManager.getConnection( URL,USERNAME,PASSWORD ) ;
			 String sql = "select * from student where sno =? " ;
			  pstmt = connection.prepareStatement( sql) ;
			  pstmt.setInt(1, sno);
			   rs = pstmt.executeQuery() ;
			  if(rs.next()) {
				  int no =   rs.getInt("sno") ;
				  String name =   rs.getString("sname") ;
				  int age =   rs.getInt("sage");
				  String address = rs.getString("saddress") ;
				  student = new Student(no,name,age,address);
			  }
			  return student ;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return null ; 
		} catch (SQLException e) {
			e.printStackTrace();
			return null ; 
		}catch (Exception e) {
			e.printStackTrace();
			return null ; 
		}
		finally {
				try {
					if(rs!=null)rs.close();
					if(pstmt!=null)pstmt.close();
					if(connection!=null)connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				} 
		}
	}

	
	//查询当前页(特定页)的学生集合
	//currentPage:页数、当前页的页码
	//pageSize:页面大小
	@Override
	public List<Student> queryStudentsByPage(int currentPage,int pageSize) {
		String sql = "select *from "
					+"("
					+	"select rownum r,t.*from"
					+"	(select s.* from student s order by sno asc) t"
					+"	where  rownum<=? 	"
					+") where  r>=?" ;
		
//		Object[] params = {页数*页面大小,(页数-1)*页面大小+1};
		Object[] params = {currentPage*pageSize,(currentPage-1)*pageSize+1};
		ResultSet rs = DBUtil.executeQuery(sql, params) ;
		List<Student> students = new ArrayList<>();
		try {
			while(rs.next()) {
				Student student = new Student(rs.getInt("sno"),rs.getString("sname") ,rs.getInt("sage"),rs.getString("saddress"));
				students.add(student) ;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBUtil.closeAll(rs, DBUtil.pstmt, DBUtil.connection);
		}
		
		
		return students;
	}

	@Override
	public int getTotalCount() {
		String sql = "select count(*) from student" ;
		return DBUtil.getTotalCount(sql);
	}
	
}

猜你喜欢

转载自blog.csdn.net/kuaileky/article/details/86618427