Java Web MVC模式个人学习理解
来源:互联网 发布:ie11调试器看不到js 编辑:程序博客网 时间:2024/06/05 15:08
由于接了一个小项目,于是边做边学了一段时间的Java Web。在很长一段时间里都不能理解Java Web的运行模式,Servlet究竟是做什么?JSP与servlet的关系是什么?知道学到了MVC,项目开始基本运作的时候,才自认为理解了Java web的运作流程,下面将我的理解与大家分享一下。
MVC指的是M:Model、V:View、C:Controller这三个部分。这三部分分别对应Java web中三个不同的重要组成部分。Model即模型,代表后台的业务逻辑和数据对象,通常由JavaBean和POJO组成。其作用是进行后台相关业务逻辑(如数据库的操作等)的操作和作为数据的载体。下面给出几个简单的Model模型:
public class pojo{private int Year;private float Count; public int getYear() {return Year;}public void setYear(int year) {Year = year;}public float getnCount() {return Count;}public void setnCount(float Count) {this.Count= Count;}这是一个pojo,用来存储数据库中的数据,方便数据操作。
public class BaseDAO implements DAO {public BaseDAO() {// TODO Auto-generated constructor stub}@Overridepublic Connection getConnetion() throws DAOException {// TODO Auto-generated method stubDataSource dataSource = DataSourceCache.getInstance().getDataSource();try{return dataSource.getConnection();}catch(Exception e){throw new DAOException();}}protected void closeDBObjects(ResultSet resultSet,Statement statement,Connection connection){if(resultSet != null){try{resultSet.close();}catch(Exception e){}}if(statement != null){try{statement.close();}catch(Exception e){}}if(connection != null){try{connection.close();}catch(Exception e){}}}}这是一段DAO的代码,DAO即数据DATA Access Object,是一种面向数据库对象接口。Java开发者可以直接使用它进行数据库的访问。DAO也属于Model,用于进行数据库的操作。
View指的是视图,Java web的视图可想而知,就是JSP页面。我们知道,过去我们编写JSP页面需要通过servlet来编写,相当的费事。现在编写JSP页面可直接在html中插入JSP脚本或el表达式来实现,JSP页面在部署到服务器后,用户第一次访问会将JSP解释成servlet来运行。不过对于JSP页面没有太多深入的话题,到此为止。
最后一个Controller指控制器,也就是Servlet。之前一直不知道Servlet充当着控制器的角色。当一个Servlet部署了的UrlPattern后,用户请求的url中的Uri是包含在UrlPattern中(我只能如此来描述了,至于用词的对错没有细心考证),那么请求将会先进入部署了包含这个Uri的UrlPattern的Servlet,在这个Servlet中对这个请求进行操作(操作自定义,一般是将请求forward到不同的页面)。那么这个Servlet充当的就是控制器的角色。也许这么说不太清楚,下面给个Servlet的部分代码(自己项目的,代码写得比较渣勿吐槽 = =):
import java.io.IOException;import java.io.Writer;import java.util.ArrayList;import java.util.List;import javax.servlet.RequestDispatcher;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.jasper.tagplugins.jstl.core.Redirect;/** * Servlet implementation class crmServlet */@WebServlet(name = "crmServlet", urlPatterns = {"/CRMDataSave","/CRMDataGet","/CRMChartDataGet"}) /*部署的url,在web.xml中也可以部署<span style="font-family: Arial, Helvetica, sans-serif;">我们请求的url后跟/CRMDataSave、/CRMDataGet、/CRMChartDataGet</span><span style="font-family: Arial, Helvetica, sans-serif;">都会进入这个控制器 */</span><pre code_snippet_id="404981" snippet_file_name="blog_20140624_5_2238105" name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;">public class crmServlet extends HttpServlet {</span>
<span style="white-space:pre"></span>private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ <span style="white-space:pre"></span>public crmServlet() { <span style="white-space:pre"></span>super(); <span style="white-space:pre"></span>// TODO Auto-generated constructor stub <span style="white-space:pre"></span>}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubprocess(request, response); <span style="white-space:pre"></span>//get和post请求都执行process函数}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubprocess(request, response);}protected void process(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {String szUri = request.getRequestURI();<span style="white-space:pre"></span>//获取uriint iLastIndex = szUri.lastIndexOf("/");String szAction = szUri.substring(iLastIndex+1);if(szAction.isEmpty()){String disPatchUrl = "/index.jsp";RequestDispatcher rd = request.getRequestDispatcher(disPatchUrl);rd.forward(request, response);}else if(szAction.equals("CRMChartDataGet"))<span style="white-space:pre"></span>//判断不同的Uri执行不同的操作{List<crmDataObject> dataObjList = new ArrayList<crmDataObject>();crmDataObject dataObj = new crmDataObject();int Year = Integer.parseInt(request.getParameter("year"));crmDataGetAction dataGet = new crmDataGetAction();String responseText = "";//List<String> responseTextList = new ArrayList<String>();dataObjList = dataGet.getData(Year);for(int i = 0;i<dataObjList.size();i++){dataObj = dataObjList.get(i);//responseText += Float.toString(dataObj.getnAnnualCount())+",";//responseText += Float.toString(dataObj.getnFirstSeason())+",";//responseText += Float.toString(dataObj.getnSecondSeason())+",";//responseText += Float.toString(dataObj.getnThirdSeason())+",";//responseText += Float.toString(dataObj.getnForthSeason())+",";responseText += Float.toString(dataObj.getnJanuary())+",";responseText += Float.toString(dataObj.getnFebruary())+",";responseText += Float.toString(dataObj.getnMarch())+",";responseText += Float.toString(dataObj.getnApril())+",";responseText += Float.toString(dataObj.getnMay())+",";responseText += Float.toString(dataObj.getnJune())+",";responseText += Float.toString(dataObj.getnJuly())+",";responseText += Float.toString(dataObj.getnAugust())+",";responseText += Float.toString(dataObj.getnSeptember())+",";responseText += Float.toString(dataObj.getnOctober())+",";responseText += Float.toString(dataObj.getnNovember())+",";responseText += Float.toString(dataObj.getnDecember());}StringBuffer sb = new StringBuffer();sb.append(responseText);response.setContentType("text/plain; charset=UTF-8");response.setHeader("Cache-Control","no-cache");Writer writer = response.getWriter();writer.write(sb.toString());writer.flush();writer.close();}
}
}
在理解了MVC后,就对Java web的运作流程也就有了大体的了解。但是这个模式对小项目还可以,在面对企业级的应用时,就得需要使用到ssh框架,不然程序的健壮性完全不行。这些都是后话了,MVC 的介绍暂时说道这里。这些都是个人的学习理解,如有不对的地方欢迎评论指正!
- Java Web MVC模式个人学习理解
- 理解Java-WEB开发中的MVC开发模式
- 工厂模式学习个人理解
- 工厂模式个人理解--JAVA
- MVC设计模式学习理解
- Java学习中MVC模式的一些理解
- java,web学习之MVC模式的搭建。
- java Web MVC模式简介
- Java web中的mvc模式
- java web mvc开发模式
- Web下mvc模式的理解
- web项目中的mvc模式理解
- java Web 个人学习记录
- MFC与MVC模式关系的个人理解
- MVC之个人理解
- MVC的个人理解
- MVC的个人理解
- MVC个人理解
- Android事件传递机制
- web.xml中load-on-startup的作用
- 深入理解Magento – 第三章 – 布局,块和模板
- 深入理解Magento – 第二章 – Magento请求分发与控制器
- 360电视盒子项目暂时搁浅
- Java Web MVC模式个人学习理解
- 深入理解Magento – 第一章 – Magento强大的配置系统
- windows 7 x64 安装Cython/numpy
- 20道 java基础题笔试题
- leetcode: Single Number
- mergetSort(2012-09-23周日 于504)--QQ空间日志迁移
- 用left join 代替not in
- magento开启模板路径提示
- UTF-8和GBK编码