JavaWeb(二)MVC设计模式

1.MVC三层架构

M:Model>>>模型层:封装数据Java Bean;
V:View>>>视图层:jsp专注显示;
C:Controller>>>控制层:Servlet接收页面请求,找模型层处理,然后响应数据出去;
**好处:**分层,逻辑清楚,便于维护,扩展方便;【适用大型项目】
**缺点:**小型项目,代码稍多;
三层架构与MVC的关系
在这里插入图片描述

2.实战案例:学生管理系统

整个项目工程布局图

在这里插入图片描述
环境搭建,准备工作
第一步:1.数据库建表,添加数据;

mysql> create table stu(
    -> id int primary key not null auto_increment,
    -> name varchar(20),
    -> gender varchar(2),
    -> phone varchar(12),
    -> birthday date,
    -> hobby varchar(50),
    -> info varchar(200)
    -> );
Query OK, 0 rows affected

需要导入必要的jar包
在这里插入图片描述
2.数据库连接c3p0配置文件【c3p0-config.xml】
一般只需修改默认配置即可

<c3p0-config>
	<!-- default-config 默认的配置,  -->
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost/students</property>
    <property name="user">root</property>
    <property name="password">123456</property>
    
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
  </default-config>
  
   <!-- This app is massive! -->
  <named-config name="oracle"> 
    <property name="acquireIncrement">50</property>
    <property name="initialPoolSize">100</property>
    <property name="minPoolSize">50</property>
    <property name="maxPoolSize">1000</property>

    <!-- intergalactoApp adopts a different approach to configuring statement caching -->
    <property name="maxStatements">0</property> 
    <property name="maxStatementsPerConnection">5</property>

    <!-- he's important, but there's only one of him -->
    <user-overrides user="master-of-the-universe"> 
      <property name="acquireIncrement">1</property>
      <property name="initialPoolSize">1</property>
      <property name="minPoolSize">1</property>
      <property name="maxPoolSize">5</property>
      <property name="maxStatementsPerConnection">50</property>
    </user-overrides>
  </named-config>
</c3p0-config>

3.封装JDBCUtil.java用来获取来连接,一般放在util包下

package Student.util;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtil {
	
	static ComboPooledDataSource dataSource = null;
	static{
		dataSource = new ComboPooledDataSource();
	}
	
	public static DataSource getDataSource(){
		return dataSource;
	}
	
	/**
	 * 获取连接对象
	 * @return
	 * @throws SQLException 
	 */
	public static Connection getConn() throws SQLException{
		return dataSource.getConnection();
	}
	
	/**
	 * 释放资源
	 * @param conn
	 * @param st
	 * @param rs
	 */
	public static void release(Connection conn , Statement st , ResultSet rs){
		closeRs(rs);
		closeSt(st);
		closeConn(conn);
	}
	public static void release(Connection conn , Statement st){
		closeSt(st);
		closeConn(conn);
	}
	private static void closeRs(ResultSet rs){
		try {
			if(rs != null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			rs = null;
		}
	}
	
	private static void closeSt(Statement st){
		try {
			if(st != null){
				st.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			st = null;
		}
	}
	
	private static void closeConn(Connection conn){
		try {
			if(conn != null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			conn = null;
		}
	}
}

4.同样在util包下创建一个TextUtil,用来判断字符是否为空

/**
 * @author Leonard
 *	判断一个字符串是否为空
 */
public class TextUtils {
	public static boolean isEmpty(CharSequence s){
		return s==null || s.length()==0;
	}
}

接下开始写项目了。。。。。。。。。。。。。。。。。
写项目
项目完成预览图
在这里插入图片描述
进入第一个列表
在这里插入图片描述
分页显示页面
在这里插入图片描述
第一步:创建jsp页面及对应的Servlet
1.创建index.jsp显示页面

<body>
	//超链接的地址是Servlet控制层
    <h3><a href="StudentListServlet">显示所有学生列表</a></h3><br>
    <h3><a href="StudentListPageServlet?currentPage=1">分页显示所有学生列表</a></h3>
</body>

StudentListServlet.java

public class StudentListServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
			StudentService service = new StudentServiceImpl();
			List<Student> list = service.findAll();
			//把结果存域
			request.getSession().setAttribute("list", list);
			//重定向方式,把结果存到session域需要
			response.sendRedirect("list.jsp");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);
	}

StudentListPageServlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			//1.获取需要显示的页码数
			int currentPage = Integer.parseInt(request.getParameter("currentPage"));
			//2.根据指定页数获取该页数据回来;
			StudentService service = new StudentServiceImpl();
			PageBean pageBean = service.findStudentByPage(currentPage);
			request.setAttribute("pageBean", pageBean);
			//3.跳转页面
			request.getRequestDispatcher("list_page.jsp").forward(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

2.查询显示页面list.jsp

html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
      function doDelete(sid){
    	  var flag = confirm("是否删除?");
    	  if(flag){
    		  location.href="DeleteServlet?sid="+sid;
    	  }
      }
</script>
<title>学生列表页面</title>
</head>
<body>
	<form action="SearchStudentServlet" method="post">
	    <table border="1" cellspacing="0">
	        <tr>
	            <td colspan="8">
			                按姓名查询:<input type="text" name="sname">
			                &nbsp; &nbsp; &nbsp;
			                按性别查询:<select name="gender" >
	                     <option value="">--请选择--
	                     <option value="男">男
	                     <option value="女">女
	                     </select>
	                       &nbsp; 
	              <input type="submit" value="查询"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
	              <a href="add.jsp">添加</a>
	            </td>
	        </tr>
	        <tr>
	            <td>编号</td>
	            <td>姓名</td>
	            <td>性别</td>
	            <td>电话</td>
	            <!-- <td>生日</td> -->
	            <td>爱好</td>
	            <td>简介</td>
	            <td>操作</td>
	        </tr>
	        <c:forEach items="${list}" var="stu">
		        <tr>
		            <td>${stu.sid}</td>
		            <td>${stu.sname}</td>
		            <td>${stu.gender}</td>
		            <td>${stu.phone}</td>
		            <%-- <td>${stu.birthday}</td> --%>
		            <td>${stu.hobby}</td>
		            <td>${stu.info}</td>
		            <td><a href="EditServlet?sid=${stu.sid}">更新</a>  <a href="#" onclick="doDelete(${stu.sid})">删除</a></td>
		        </tr>
	        </c:forEach>
	    </table>
	</form>
</body>
</html>

SearchStudentServlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
			//1.中文
			request.setCharacterEncoding("UTF-8");
			//2.获取前台数据
			String sname = request.getParameter("sname");
			String gender = request.getParameter("gender");
			
			//3.调用service
			StudentService service = new StudentServiceImpl();
			List<Student> list = service.SearchStudentList(sname, gender);
			System.out.println("list集合大小========"+list.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个基于JavaWeb的学生管理系统,采用了MVC设计模式MVC模式是一种软件设计模式,将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。在这个项目中,没有使用其他框架,而是采用了纯servlet+jsp来实现。 该系统的功能包括管理员、教师和学生三个角色。管理员可以管理学生信息,包括添加、删除和修改学生信息。教师可以查看学生信息,并进行一些教学管理操作。学生可以查看自己的信息,并进行选课等操作。 在这个系统中,主要的数据结构是学生的信息,包括姓名、性别、籍贯、QQ、邮箱等。这些信息可以作为学生的不同属性进行处理。 这个项目的具体实现可以参考以下步骤: 1. 创建一个JavaWeb项目,并配置好相关的环境。 2. 设计数据库表结构,包括学生表、教师表和管理员表,以及其他相关表。 3. 创建模型层(Model),包括学生、教师和管理员的实体类,以及与数据库交互的DAO类。 4. 创建视图层(View),包括学生信息展示页面、教师信息展示页面和管理员操作页面等。 5. 创建控制器层(Controller),处理用户的请求,调用相应的模型和视图进行处理。 6. 配置web.xml文件,将请求映射到相应的控制器。 7. 编写相应的servlet和jsp页面,实现具体的功能和界面展示。 8. 运行项目,测试各个功能是否正常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值