关于实施MVC框架结构的WEB项目的一些见解

来源:互联网 发布:java好书知乎 编辑:程序博客网 时间:2024/05/17 09:22
一、实施JavaWEB项目需要掌握的
    Java从语言角度来讲不是很难,但是从整体设计角度来讲属于完全面向对象的高级框架。如果要设计一个良好的框架结构,单单只掌握Java语言远远不够。在一个框架应用中语言只是其中的一个调价,想要发挥好语言的优势,还要有良好的环境条件才能。这就涉及到一个设计模式,还有和设计模式相关的一些知识。
  Java是一种存面向对象的语言,所以要把Java应用的好,对面向对象一定要有良好的理解。对Java语言本身的特点和技巧更应理解。
在主要的应用中,数据库相关的环节应用很多,所以对数据库应该有一定了解。不能单单只了解一种数据库,因为在很多实际开发中会提出很多数据库解决方案,所以只有在了解多种数据库的情况下才能有一个比较方案,不能只从价格上入手,要根据项目的实际需求来做出最好的性价比,这样才算一个合格的数据库解决方案。
在很多应用中应用服务器有很重要的地位,所以对应用服务器的了解是必须的。包括配置,应用、和实施。而且最好也要了解多种应用服务器,然后根据项目需求比较选择应用。
在服务器和设计模式结构中会应用到自定义文件,而且在应用高级设计时也会定义自用的标签,现在流行的是用XML去定义配置,所以XML语言应该有一定掌握。
Java主要应用在网络上,所以对网络的协议应该有一定了解掌握。
在设计WEB项目的应用中,网页的脚本语言起着不能忽视的作用,所以如果设计WEB项目的应用中,对HTML和JavaScript都应有一定的了解。
综上所述:一个好的Java应用实施应该掌握如下:
Java语言、面向对象思想、设计模式、框架结构、数据库、应用服务器、XML语言、网络协议、网页脚本语言。
二、工具的选择
在实际开发中,开发工具的直接影响着开发进程,使用工具如果过于复杂,在项目开发前要费很多时间学习;如果工具过于简单,开发时限制性又太大。所以要根据实际开发的难度和强度来做决定,而且要根据项目开发人员的实际情况。
现在常用的Java项目开发环境有:JBuilder、VisualAge for Java、Forte for Java, Visual Café、Eclipse、NetBeans IDE、JCreator +J2SDK、EditPlus 2+ J2SDK。
最好是熟知这些软件的优点和缺点,以便根据实际情况选择应用。
三、Java语言
Java语言体系比较庞大,语法和C相似。应用角度讲有JSP、Applet、Servlet、Application四部分。在大多WEB项目中主要应用到JSP、Servlet、Application这三部分,在WEB项目开发中Application主要的应用就是JavaBean。
Applet是运行在客户端的程序,在图形显示方面很出色,它是需要预选下载到客户端的程序,在有些开发中,有一些设计需要运行在客户端,这时就要应用Applet,比如网易的聊天室。
Servlet是运行在服务器端的程序,处理数据接收的能力很出色,是一个多线程的设计。在服务器端的功能十分强大。
JSP是从Servlet上分离出来的一小部分,简化了开发,加强了界面设计。JSP定位在交互网页的开发。运用Java语法,但功能较Servlet弱了很多,并且高级开发中只充当用户界面部分。
Application是Java应用程序,Java可以象C++等语言一样开发出应用软件,但是运行起来很慢。在WEB项目和一些开发中主要应用JavaBean就是Application的一部分,逻辑运算能力很前,能极大的发挥Java语言。而且可以运用Java的继承、多态、重载的特性,也可以实现封装。
高级的WEB项目会应用到以上的所有技术,协作开发会提高开发的效率和系统的性能。
四、面向对象思想
Java语言是完全面向对象语言,所以在项目设计时应用会有很大的帮助,在设计时应尽量舍弃面向过程的设计方式。
在分析项目业务关系的时候,应用一些ER图会用很大的帮助,这样能尽快找出业务逻辑主要面对的对象,然后对每个对象进行行为划分。最后设计实现的目的是对象之间的通信。
《Thinking in java》中有很经典的一个比喻,把一个灯泡比喻成一个对象,然后把行为都封装到该对象
中,在这个例子中,类型/类的名称是Light,可向Light对象发出的请求包括包括打开(on)、关闭(off)
、变得更明亮(brighten)或者变得更暗淡(dim)。通过简单地声明一个名字(lt),我们为Light对象创
建了一个“句柄”。然后用new关键字实例化Light的一个对象。为了向对象发送一条消息,我们列出句柄名
(lt),再用一个句点符号(.)把它同消息名称(on)连接起来。从中可以看出,使用一些预先定义好的类时,
我们在程序里采用的代码是非常简单和直观的。
五、设计模式
  设计模式在Java项目实施过程更是重中之重。主要在与两层的设计模式、三层的设计模式和N层的设计模式。直接决定着项目的应用、部署和实际开发设计。
六、框架结构
在普通的WEB项目中很多采用两层的开发结构。JSP+Servlet或JSP+JavaBean。当对开发要求高的项目中使用很多的还是MVC的三层开发结构。能分有效的分离逻辑开发,使开发人员能专注于各自的开发中。同时也能时整个开发结构流程更清晰,但是需要比较高的开发配合度。
MVC的完全开发难度较复杂,而且需要设计所有的控制流程,但不一定属于国际化开发,所以为了简化开发,提高结构清晰性,我们可以引用开发的框架,现在比较流行的MVC开发框架就是Struct。能大大提高开发进度,提高项目的结构性,但是学习Struct也需要一定的时间,而且需要XML的配合。
Struct主要集中在Controller的设计,把Servlet分成FromBean和ActionServlet两个部分。同时增加了Servlet处理的API,包括Action、ActionForm、ActionMapping类等。
每一个FormBean 都必须继承ActionForm类,FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中,需要说明的一点就是多个HTTP request可以共用一个FormBean,便于维护和重用。
FormBean的产生是为了提供数据给ActionBean,在ActionBean中可以取得FormBean中封装的数据,经相应的逻辑处理后,调用业务方法完成相应业务要求。
Struct的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。
主要原理图如下:
  Struct框架可以应用在大、中、小型项目中。能大大的提高MVC模型的开质量和效率。
七、数据库
对于数据库应该了解他的性能和一些基本的操作常识,还有该数据库的特点。
而针对与Java语言WEB项目的数据库开发则主要是对JDBC的应用,还有数据库连接池的应用。
八、应用服务器
同数据库一样,应该了解该服务器的性能,特点和一些常识。
在应用方面,应用服务器主要是针对于配置和部署,对目录的配置,调试;对配置文件属性的修改;对访问权限和并发性的控制;Java类的部署等。
还有对于服务器的整合配置,JSP典型的有apache+tomcat的整合配置。
如果熟悉XML语言的话,对服务器文件的配置,还有Java类的部署有巨大的帮助。
九、XML语言
  从上边所说可以看出XML语言对于WEB项目开发很有帮助,而且有时有关键的作用。
十、网络协议
  WEB项目开发中应该对应用的协议有一定的掌握,这样才能良好的应用语言相对应的知识或类库。
十一、网页脚本语言
为了提高WEB项目的整体性能,提高人机交互的友好界面,网页的脚本语言是很有用处的,有的时候可以解决很大的难题或提高程序的性能和应用性。
网页脚本语言的执行都是在客户端执行的,速度很很快,并且大多的操作与服务器没有交互运算,所以在一些应用中非常理想。
十二、实例
一个MVC模式的数据传递的过程,从JSP页面输入一个字符,然后提交给Servlet,由Servlet调用JavaBean处理后,然后再把页面定向到另一个JSP页面,现在用session和request两个方法实现。
JSP页录入页为Login.htm,显示页分别为RequestTest.jsp和SessionTest.jsp;
Servlet为TestServlet.class,JavaBean为TestBean.class,包为com.xinkaidigital.jwing。
代码如下:
Login.htm
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<FORM METHOD="post" ACTION="servlet/com.xinkaidigital.jwing.TestServlet">
<INPUT TYPE="text" NAME="testStr">
<INPUT TYPE="submit">
</FORM>
</body>
</html>
 
TestServlet.class
package com.xinkaidigital.jwing;
 
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class TestServlet extends HttpServlet {
 
       // define charset
static final private String CONTENT_TYPE = "text/html; charset=GBK";
       public void init(ServletConfig config) throws ServletException {
              super.init(config);
       }
       public void destroy() {
              //TODO Method stub generated by Lomboz
       }
       protected void doGet(
              HttpServletRequest request,
              HttpServletResponse response)
              throws ServletException, IOException {
              response.setContentType(CONTENT_TYPE);
       }
       protected void doPost(
              HttpServletRequest request,
              HttpServletResponse response)
              throws ServletException, IOException {
              // define charset
              response.setContentType(CONTENT_TYPE);
              // instance new object
              TestBean testbean = new TestBean ();
              // instance session object
             HttpSession session = request.getSession();
             // request data
             String testStr = request.getParameter("testStr"); 
             // use MyTest JavaBean
             testbean.setTestStr (testStr);
             // define targetURL
              String targetURL = "/RequestTest.jsp";
              // add session object
              session.setAttribute("sessionbean",testbean);
              // add request object
              request.setAttribute("requestbean",testbean);
              // use dispatch to go to JSP page
              this.dispatch(targetURL, request, response);
       }
       public void dispatch(String targetURI,HttpServletRequest request,HttpServletResponse response)
              throws java.io.IOException, ServletException
       {
              RequestDispatcher dispatch = getServletContext().getRequestDispatcher(targetURI);
        dispatch.forward(request, response);
       }
}
 
TestBean.class
package com.xinkaidigital.jwing;
 
public class TestBean {
       private String testStr = null;
      
       public TestBean () {
              super();
       }
      
       void setTestStr(String testStr) {
              this.testStr = testStr;
       }
       public String getTestStr () {
              return testStr;
       }
}
 
RequestTest.jsp
<%@ page language="java" pageEncoding="GB2312" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title> requestbean JSP</title>
</head>
<body bgcolor="#FFFFFF">
<jsp:useBean id="requestbean" scope="request" class="com.xinkaidigital.jwing.TestBean"/>
<%=requestbean.getTestStr()%>
<HR>
<CENTER><a href="/test/SessionTest.jsp">SessionTest.jsp</a></CENTER>
<HR>
<CENTER><a href="/test/Login.html">Index</a></CENTER>
</body>
</html>
 
SessionTest.jsp
 
<%@ page language="java" pageEncoding="GB2312" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title> sessionbean JSP</title>
</head>
<body bgcolor="#FFFFFF">
<jsp:useBean id="sessionbean" scope="session" class="com.xinkaidigital.jwing.TestBean"/>
<%= sessionbean.getTestStr()%>
<HR>
<CENTER><a href="RequestTest.jsp">RequestTest.jsp</a></CENTER>
<HR>
<CENTER><a href="Login.html">Index</a></CENTER>
</body>
</html>
 
一个视图Bean的例子,把页面需要显示的内容封装到JavaBean里,然后在JSP页面调用JavaBean进行显示。
Bean为TestView.class,进行显示数据,JSP页为
代码如下:
ViewTest.jsp
<%@ page language="java" pageEncoding="GB2312" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>ViewBean JSP</title>
</head>
<body bgcolor="#FFFFFF">
<jsp:useBean id="testview" scope="page" class="com.xinkaidigital.jwing.TestView"/>
<HR>
<%testview.setView();%>
<%=testview.getView()%>
<HR>
<CENTER><a href="RequestTest.jsp">RequestTest.jsp</a></CENTER>
<HR>
<CENTER><a href="SessionTest.jsp">SessionTest.jsp</a></CENTER>
<HR>
<CENTER><a href="Login.html">Index</a></CENTER>
</body>
</html>
 
TestView.class
package com.xinkaidigital.jwing;
 
public class TestView {
       // define StringBuffer variable
StringBuffer list = null;
      
       public void setView() {
              list = new StringBuffer();
              list.append("<table width=/"100%/" border=/"0/" cellpadding=/"0/"");
              list.append("cellspacing=/"0/" bgcolor=/"217DDE/">");
              list.append("<tr>");
              list.append("<td>");
              list.append("This is a test ViewBean1");
              list.append("</td>");
              list.append("</tr>");
              list.append("<tr>");
              list.append("<td>");
              list.append("This is a test ViewBean2");
              list.append("</td>");
              list.append("</tr>");
              list.append("<tr>");
              list.append("<td>");
              list.append("This is a test ViewBean3");
              list.append("</td>");
              list.append("</tr>");
              list.append("</table>");
       }
      
       public String getView() {
              return list.toString();
       }    
}
 
原创粉丝点击