1.MVC简介

MVC是Model-View-Controller的简称,即模型-视图-控制器。MVC是一种设计模式,它把应用程序分成三个核心模块:模型,视图,控制器,它们各自处理自己的任务。

  • 模型(体现在下图中的POJO和数据库)是应用程序的主体部分,表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由于应用于模型的代码只需要写一次就可以被多个视图重用,所以提高了代码的可重用性。
  • 视图是用户看到并与之交互的界面,可以向用户显示相关的数据,也可以接收用户的输入,但是不进行任何实际的业务处理。
  • 控制器接收请求,获取请求参数,调用DAO方法,决定用哪个模型组件去处理请求,然后决定调用哪个视图来显示模型处理返回的数据。

MVC模式处理过程逻辑放在servlet中,显示交给jsp。客户端发请求到服务器,服务器调用servlet,servlet作为一个控制器,接收请求,根据请求的相关逻辑情况去调用java类的方法,由java类完成业务逻辑跟访问数据库的操作,然后servlet根据pojo的返回结果,转向不同的jsp页面, jsp完成显示的功能。

2.MVC案例之查询

MySql数据库中的数据内容为:

例如,现有需求需要实现在网页点击超链接,可以在页面显示参加考试的学生的所有信息(学生的考试信息存储在数据库中)。设计思路如下图所示,首先点击网页的超链接listAllExamStudent,发送get请求到servlet,由服务器调用servlet的doGet方法,在doGet()方法中需要做到:①.调用ExamStudentDao的getAll()方法返回学生的List对象;②.把1得到的List放入request中;③.请求的转发到student.jsp;

实现代码:

点击网页的超链接listAllExamStudent,发送get请求到servlet。searchTest.jsp

  <body>
<a href="listAllStudent">listAllStudents</a>
</body>

listAllStudentServlet.java

package com.javaWebMVCTest;

import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class listAllStudentServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
studentDao studentdao=new studentDao();
//调用ExamStudentDao的getAll()方法返回学生的List对象;
List<student> students=studentdao.getAll();
//把1得到的List放入request中
request.setAttribute("students", students);
//请求的转发到student.jsp
request.getRequestDispatcher("/jspTest/students.jsp").forward(request,response);
}
}

在web.xml中进行配置:

<servlet>
<servlet-name>listAllStudentServlet</servlet-name>
<servlet-class>com.javaWebMVCTest.listAllStudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>listAllStudentServlet</servlet-name>
<url-pattern>/listAllStudent</url-pattern>
</servlet-mapping>
<url-pattern>/listAllStudent</url-pattern>映射的地址为searchTest.jsp中超链接<a href="listAllStudent">的链接地址。
student.java
package com.javaWebMVCTest;

public class student {
private Integer flow_id;
private int Type;
private String id_card;
private String exam_card;
private String student_name;
private String Location;
private int Grade; public Integer getFlow_id() {
return flow_id;
}
public void setFlow_id(Integer flow_id) {
this.flow_id = flow_id;
}
public int getType() {
return Type;
}
public void setType(int type) {
Type = type;
}
public String getId_card() {
return id_card;
}
public void setId_card(String id_card) {
this.id_card = id_card;
}
public String getExam_card() {
return exam_card;
}
public void setExam_card(String exam_card) {
this.exam_card = exam_card;
}
public String getStudent_name() {
return student_name;
}
public void setStudent_name(String student_name) {
this.student_name = student_name;
}
public String getLocation() {
return Location;
}
public void setLocation(String location) {
Location = location;
}
public int getGrade() {
return Grade;
}
public void setGrade(int grade) {
Grade = grade;
}
public student(Integer flow_id, int type, String id_card, String exam_card, String student_name, String location,
int grade) {
super();
this.flow_id = flow_id;
Type = type;
this.id_card = id_card;
this.exam_card = exam_card;
this.student_name = student_name;
Location = location;
Grade = grade;
}
public student(){}
}

连接数据库及查询的操作:studentDao.java

package com.javaWebMVCTest;

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 com.javaWebMVCTest.student; public class studentDao { public List<student> getAll(){
List<student> stus=new ArrayList<>();
Connection connection=null;
PreparedStatement preparedstament=null;
ResultSet resultset=null; try{
String driverClass="com.mysql.jdbc.Driver";
Class.forName(driverClass);
System.out.println("数据库驱动加载成功!");
connection=DriverManager.getConnection("jdbc:mysql:"+"//localhost:3303/students?autoReconnect=true&failOverReadOnly=false","root","0404");
System.out.println("数据库连接成功!");
String sql="SELECT flow_id,Type,id_card,exam_card,student_name,Location,Grade FROM students";
preparedstament=connection.prepareStatement(sql);
resultset=preparedstament.executeQuery();
while (resultset.next()){
int flow_id=resultset.getInt(1);
int Type=resultset.getInt(2);
String id_card=resultset.getString(3);
String exam_card=resultset.getString(4);
String student_name=resultset.getString(5);
String Location=resultset.getString(6);
int Grade=resultset.getInt(7); student students=new student(flow_id,Type,id_card,exam_card,student_name,Location,Grade);
stus.add(students);
}
}catch(Exception e){
e.printStackTrace();
}
try{
if (connection!=null){
connection.close();
}
}catch(SQLException e){
e.printStackTrace();
}
try{
if (preparedstament!=null){
preparedstament.close();
}
}catch(SQLException e){
e.printStackTrace();
}
try{
if (resultset!=null){
resultset.close();
}
}catch(SQLException e){
e.printStackTrace();
}
return stus;
}
}

显示信息的跳转页面:students.jsp

  <body>
<%
List<student> stus=(List<student>)request.getAttribute("students");
%>
<table>
<tr>
<th>flow_id</th>
<th>Type</th>
<th>id_card</th>
<th>exam_card</th>
<th>student_name</th>
<th>Location</th>
<th>Grade</th>
</tr>
<%
for(student stu:stus){
%> <tr>
<td><%=stu.getFlow_id() %></td>
<td><%=stu.getType() %></td>
<td><%=stu.getId_card() %></td>
<td><%=stu.getExam_card() %></td>
<td><%=stu.getStudent_name() %></td>
<td><%=stu.getLocation() %></td>
<td><%=stu.getGrade() %></td>
</tr>
<%
}
%>
</table>
</body>

运行后显示:

wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

javaweb之MVC设计模式的更多相关文章

  1. JavaWeb笔记——MVC设计模式和JavaWeb经典三层架

    1 MVC设计模式 MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(C ...

  2. IT兄弟连 JavaWeb教程 MVC设计模式

    MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它强制性地把应用程序的数据展示.数据处理和流程控制分开.MVC把应用程序分成3个核心模块:模型.视 ...

  3. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

  4. MVC设计模式JavaWeb实现

    JSP开发模式 jsp开发模式的发展 1.模式1:(适合小型项目的技术的开发)     a.第一版本号.纯jsp(封装数据.处理数据,显示数据)     b.第二版本号,Jsp+JavaBean.   ...

  5. javaweb三大框架和MVC设计模式

    javaweb三大框架和MVC设计模式 转载,原文请见https://blog.csdn.net/sunpeng19960715/article/details/50890705 一.MVC设计模式 ...

  6. 转载 javaweb三大框架和MVC设计模式 (自己加拉些内容)

    javaweb三大框架和MVC设计模式 一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基 ...

  7. MVC设计模式与JavaWEB三层架构

    一.MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controlle ...

  8. Javaweb MVC设计模式

    Javaweb MVC设计模式 一.Java EE开发流程 二.MVC设计模式 什么是MVC? MVC是Model-View-Controller的简称,即模型-视图-控制器. MVC是一种设计模式, ...

  9. 浅谈javaweb三大框架和MVC设计模式

    一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(Vie ...

随机推荐

  1. kali linux之拒绝服务攻击工具

    hping3 几乎可以定制发送任何TCP/IP数据包,用于测试FW,端口扫描,性能测试 -c - 计数包计数  -i - interval wait(uX表示X微秒,例如-i u1000)       ...

  2. for循环枚举法,全排列+dfs,补充浮点数注意事项

    其实这个题目我一直没想好应该叫什么,就是在做蓝桥杯的时候会遇到很多的题,给你一等式,abcdef...分别是1-9(||12||15)不重复问你有几种方案? 我之前一直都是用的for循环在做,听说这叫 ...

  3. Linux下的信号量

    首先,什么是信号量? 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识.信号量在此过程中负责操作的互 ...

  4. 事件委托,元素节点操作,todolist计划列表实例

    一. 事件委托 事件委托就是利用冒泡的原理,把事件加到父级上,来代替子集执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能:其次可以让新加入的子元素也可以拥有相同的操作. 比如有20个&l ...

  5. 可持久化数据结构QwQ(持续更新中)

    可持久化留下的迹象 我们俯身欣赏 ——<膜你抄>By Menci&24OI Micardi最近在学可持久化的东西,可持久化线段树.可持久化并查集.可持久化01Trie......等 ...

  6. vue-cli起的webpack项目 用localhost可以访问,但是切换到ip就不可以访问

    我用的是vux起的一个项目(移动端,基于vue的),因为是移动端的,需要在手机上测试,发现用http://localhost:8081/访问的挺好的,但是换到ip就访问不了,期初我以为是代理的原因,将 ...

  7. linux的sed(增删改查)使用方法

    sed的增删改查的基本操作 参考:https://www.cnblogs.com/0zcl/p/6855740.html 01:增(a) 2个sed命令,分别是:(这些操作都是在内存中进行的,所以不会 ...

  8. java--浅谈线程

    一.线程基础: 1.CPU核心数和线程数的关系 线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数,及程数=cpu个数(2) * 核数(2)=4: 使用了超线程技术后---> ...

  9. touch插件

    第一种: <script> (function($) { var options, Events, Touch; options = { x: 20, y: 20 }; Events = ...

  10. python 使用缓存加快运算

    from functools import lru_cache import time from functools import wraps def clock(func): @wraps(func ...