深入淺出Java mvc_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在DRP中終于接觸到了MVC,感觸是確實(shí)這樣的架構(gòu)系統(tǒng)靈活性不少,現(xiàn)在感觸最深的就是使用tomcat作為服務(wù)器發(fā)布比IIS好多了,起碼發(fā)布很簡(jiǎn)單,使用起來(lái)方便。
首先來(lái)簡(jiǎn)單的學(xué)習(xí)一下MVC的基礎(chǔ)知識(shí),MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫(xiě),一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯和數(shù)據(jù)顯式分離的方法組織代碼,將業(yè)務(wù)邏輯被聚集到一個(gè)部件里面,在界面和用戶圍繞數(shù)據(jù)的交互能被改進(jìn)和個(gè)性化定制的同時(shí)而不需要重新編寫(xiě)業(yè)務(wù)邏輯。
概覽

MVC被獨(dú)特的發(fā)展起來(lái)用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中,MVC是分層的思想的體現(xiàn),但是區(qū)別于三層設(shè)計(jì)模式(區(qū)別以后再和大家分享)。

MVC是一個(gè)框架模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。最典型的MVC就是JSP + servlet + javabean的模式。
實(shí)例解析
UML圖:大家熟悉MVC的調(diào)用流程邏輯

第一:JSP:由頁(yè)面指令和HTML組成的查詢界面query_condention.jsp,也就是咱們現(xiàn)在的html頁(yè)和asp頁(yè)面類(lèi)似。
<html>
<head>
<title>學(xué)生信息</title>
</head>
<body>
<form action="SearchStudentServlet" method="post">
出生日期:<input type="text" name="beginDate">至<input type="text" name="endDate">
<input type="submit" value="查詢學(xué)生">
</form>
</body>
</html>
第二:控制層 SearchStudentServlet用來(lái)接受客戶的請(qǐng)求,來(lái)處理流程,調(diào)用Model(StudentManager.java),轉(zhuǎn)發(fā)到要請(qǐng)求的后臺(tái)服務(wù)器的student_list.jsp頁(yè)面
import java.text.*;
import java.util.*;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import com.bjpowernode.exam.model.*;
import com.bjpowernode.exam.manager.*;
public class SearchStudentServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String sBeginDate = request.getParameter("beginDate");
String sEndDate = request.getParameter("endDate");
Date beginDate = new Date();
Date endDate = new Date();
try {
beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);
endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);
}catch(Exception e) {
e.printStackTrace();
}
StudentManager studentManager = new StudentManagerImpl();
List<Student> studentList = studentManager.findStudentList(beginDate, endDate);
//將學(xué)生列表設(shè)置到requet范圍中
//request.setAttribute("student_list", studentList);
//轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)是在服務(wù)器端轉(zhuǎn)發(fā)的,客戶端是不知道的
//request.getRequestDispatcher("/student_list.jsp").forward(request, response);
//將studentList放到session中
HttpSession session = request.getSession();
session.setAttribute("student_list", studentList);
//重定向,不會(huì)共享request
//以下寫(xiě)法錯(cuò)誤,該 "/"代表了8080端口
//response.sendRedirect("/student_list.jsp");
response.sendRedirect(request.getContextPath() + "/student_list.jsp");
}
}
第三:student_list.jsp頁(yè)面接收數(shù)據(jù)形成html,返回到瀏覽器,渲染在界面上
<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="com.bjpowernode.exam.model.*"%>
<%@ page import="com.bjpowernode.exam.manager.*"%>
<html>
<head>
<title>學(xué)生信息</title>
<style type="text/css">
/*表格寬度為1px,實(shí)線,黑色*/
table{
border:1px solid black;
border-collapse:collapse;
}
td {
border:1px solid black;
border-collapse:collapse;
}
</style>
</head>
<body>
<table border="1">
<tr>
<td>學(xué)生代碼</td>
<td>姓名</td>
<td>性別</td>
<td>出生日期</td>
<td>聯(lián)系電話</td>
<td>家庭住址</td>
<td>班級(jí)名稱(chēng)</td>
<td>年齡</td>
</tr>
<%
//List<Student> studentList = (List)request.getAttribute("student_list");
List<Student> studentList = (List)session.getAttribute("student_list");
for (Iterator<Student> iter=studentList.iterator(); iter.hasNext();) {
Student student = iter.next();
%>
<tr>
<td><%=student.getStudentId()%></td>
<td><%=student.getStudentName()%></td>
<td><%=student.getSex()%></td>
<td><%=new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthday())%></td>
<td><%=student.getContactTel()%></td>
<td><%=student.getAddress()%></td>
<td><%=student.getClasses().getClassesName()%></td>
<%
long b = 1000L*60L*60L*24L*365L;
long a = System.currentTimeMillis() - student.getBirthday().getTime();
%>
<td><%=a/b%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
在View的student_list.jsp頁(yè)面中是大量的html和java代碼的混合,在查詢條件界面query_condention.jsp主要是html,因?yàn)椴簧婕昂笈_(tái)數(shù)據(jù)的交互.
第四:xml配置Servlet:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>SearchStudentServlet</servlet-name>
<servlet-class>SearchStudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SearchStudentServlet</servlet-name>
<url-pattern>/SearchStudentServlet</url-pattern>
</servlet-mapping>
</web-app>
第五:顯示查詢結(jié)果

總結(jié)
以上query_condention.jsp(輸入查詢條件)、SearchStudentServlet.java(請(qǐng)求控制Control分)+student_list.jsp(界面顯示)的組合相當(dāng)于三層中的U層,都與界面的顯示相關(guān),而StudentManager.java才是進(jìn)入業(yè)務(wù)處理相當(dāng)于三層的B層。故,我們可以簡(jiǎn)單理解成,MVC就是java基于U層的又一個(gè)細(xì)化,將界面顯示和請(qǐng)求處理做了進(jìn)一步細(xì)化分工。
MVC被獨(dú)特的發(fā)展起來(lái)用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中,MVC是分層的思想的體現(xiàn),但是區(qū)別于三層設(shè)計(jì)模式(區(qū)別以后再和大家分享)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Java實(shí)現(xiàn)回調(diào)監(jiān)聽(tīng)工具類(lèi)
這篇文章主要為大家詳細(xì)介紹了如何基于Java實(shí)現(xiàn)一個(gè)回調(diào)監(jiān)聽(tīng)工具類(lèi),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
Spring?Cloud?Alibaba實(shí)現(xiàn)服務(wù)的無(wú)損下線功能(案例講解)
這篇文章主要介紹了Spring?Cloud?Alibaba實(shí)現(xiàn)服務(wù)的無(wú)損下線功能?,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
java swing實(shí)現(xiàn)的掃雷游戲及改進(jìn)版完整示例
這篇文章主要介紹了java swing實(shí)現(xiàn)的掃雷游戲及改進(jìn)版,結(jié)合完整實(shí)例形式對(duì)比分析了java使用swing框架實(shí)現(xiàn)掃雷游戲功能與相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
java通過(guò)isAccessAllowed方法實(shí)現(xiàn)訪問(wèn)控制
在Web應(yīng)用開(kāi)發(fā)中,使用Apache Shiro框架的isAccessAllowed方法可以有效管理用戶的訪問(wèn)權(quán)限,本文詳細(xì)解析了該方法的實(shí)現(xiàn)過(guò)程,包括用戶身份驗(yàn)證、權(quán)限判斷和安全性分析,下面就一起來(lái)了解一下2024-09-09
SpringBoot集成MyBatis的分頁(yè)插件PageHelper實(shí)例代碼
這篇文章主要介紹了SpringBoot集成MyBatis的分頁(yè)插件PageHelper的相關(guān)操作,需要的朋友可以參考下2017-08-08
Mybatis中的resultType和resultMap使用
這篇文章主要介紹了Mybatis中的resultType和resultMap使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
java基礎(chǔ)之String知識(shí)總結(jié)
今天帶大家來(lái)回顧一下Java基礎(chǔ),文中詳細(xì)總結(jié)了String的相關(guān)知識(shí),對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05

