65.9K
CodeProject 正在变化。 阅读更多。
Home

J2EE 与 ASP.NET MVC 实现对比,谁是最佳?第一部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.27/5 (18投票s)

2011年3月18日

CPOL

7分钟阅读

viewsIcon

151929

downloadIcon

242

本文将对比 J2EE 和 ASP.NET 中的 MVC 实现。

J2EE 与 ASP.NET MVC 实现对比,谁是最佳?第一部分
 

目录

那么,日程安排是什么?
本文不适合初学者
不使用框架的整体对比
对比的示例
模型 – J2EE 中的 Javabean 和 ASP.NET 中的 .NET 类
控制器 – J2EE 中的 Servlet 和 ASP.NET 中的 HttpHandler
映射 XML 文件 – J2EE 中的 Web.xml 和 ASP.NET 中的 Web.config
视图 – J2EE 中的 Servlet 和 ASP.NET 中的 HttpHandler
总结最终对比表
源代码
下一步:使用框架进行对比
ASP.NET MVC 面试题和答案



那么,日程安排是什么?

不久前,我与一位 Java 朋友讨论了 asp.net MVC 教程。讨论最终演变成了一场争论,试图证明哪种技术在实现 MVC 方面更好。出于各种原因,我试图证明微软技术是最好的,但是……嗯,啊哈,哦哦。

事实上,这两种技术都有自己做事的方式。所以,我最终写了这篇对比文章,讨论了 J2EE 中 MVC 的实现方式与 ASP.NET 相比的差异。

为了进行充分的对比,我将文章分为两部分。第一部分,我们将对比不使用框架和工具的 MVC 实现。
第二部分,我将对比使用 j2EE struts 和 ASP.NET MVC visual studio 模板的 MVC 实现。

您可以在 questpond.com 上观看我们关于 Model view controller、front controller、intercepting filter、factory patterns 等各种主题的 Java 和 J2EE 设计模式视频。千万不要错过我的 .NET 设计模式视频,其中涵盖了包括 MVC、MVP 和 MVVM 在内的 24 种模式。
 

images 1

 

本文不适合初学者

这篇文章绝对不适合初学者。如果您正在寻找 MVC 基础知识的文章,您可以在 ASP.NET 使用 HttpHandler 实现 MVC 中查看我使用核心 Http Handler 实现 MVC 的文章。


不使用框架的整体对比

因此,正如我们所知,在 MVC 中,第一次请求到达控制器,然后控制器将视图与模型绑定,并将结果发送给最终用户。
模型、视图和控制器构成了 MVC 的三个核心支柱。从 30,000 英尺的高度来看(这个数字让每个架构师都感到满意……),以下是这三个模块在每种技术中的实现方式:

 

  J2ee ASP.NET
模型 带 setter 和 getter 的简单 Java bean 类。 带业务逻辑、setter 和 getter 的简单 .NET 类。
控制器 (Controller) 控制器使用 HttpServlet 类实现。 控制器使用 HttpHandler 类实现。
视图 简单的 JSP 页面。 简单的 ASPX 页面。
 


下面是事物实际外观的简单图示。


image 2
 

对比的示例

为了进行 proper 对比,我们采用了一个通用示例。在这个示例中,我们将执行以下操作:

• 当用户访问网站时,他看到的第一页是 Index 页面。因此,如果是 ASP.NET,他将看到 index.aspx 页面;如果是 j2EE,他将看到 index.jsp 页面。

• Index 页面是一个简单的页面,它接受用户名和密码,并将登录命令发送给控制器。

• 一旦控制器收到登录命令,它就会创建模型对象,并检查用户是否正确。

• 如果用户正确,它会将用户发送到欢迎视图页面,否则会将用户重定向到错误视图页面。
 

image 3


模型 – J2EE 中的 Javabean 和 ASP.NET 中的 .NET 类

让我们从 MVC 最简单的部分开始,即模型。

对于上面的示例,我们将创建一个名为“User”的简单类,该类将有两个属性:“Username”和“Password”。客户端(目前是控制器)可以设置这两个属性,并调用“IValid”函数来检查用户是否有效。

在 J2EE 中,模型就是 Java bean 类;在 .NET 中,它是一个带 setter 和 getter 的简单类。以下是其示例代码。
 

J2EE 使用 Javabean 实现的模型 ASP.NET 使用 .NET 类实现的模型
public class UserBean 
{
public UserBean() 
{
          this.username="user";
          this.password="pass";
}

public String getPassword() 
{ 
          return password;
}

public void setPassword(String password) 
{
           this.password = password;
}

public String getUsername() 
{
          return username;
}

public void setUsername(String 
username) {
          this.username = username;
}


public boolean IsValid
(String username,String password)
{
return this.username.equals(username)
 && this.password.equals(password);
}
}

public class User
{
public string UserName
{
set
{
_strUserName = value;
}
get
{
return _strUserName;
}
}

          public string Password
          {
             set
             {
            	_strPassword = value;
             }
             get
             {
                 return _strPassword;
              }
           }
           public bool IsValid()
          {
      if (_strUserName == "user" 
&& _strPassword == "pass")
             {
                   return true;
             }
              else
             {
                   return false;
             }
         }
   }


控制器 – J2EE 中的 Servlet 和 ASP.NET 中的 HttpHandler

下一个重要部分是控制器。控制器构成了 MVC 的核心。

要在 J2EE 中创建控制器,我们需要创建一个继承自 ‘HttpServlet’ 类的类。控制器的逻辑编写在 “processrequest” 方法中。您可以使用 ‘HttpServletRequest’ 类和 ‘HttpServletResponse’ 类访问请求和响应对象。

要在 ASP.NET 中创建控制器,我们需要实现 “IHttpHandler” 类并重写 “processrequest” 方法来编写控制器逻辑。以下是两种技术中控制器实现的简单代码。要访问请求和响应对象,我们需要在 ASP.NET 中使用 context 类,而在 J2EE 中,它作为函数的一部分可用,并带有不同的对象,如以下代码片段所示。
 

J2EE 使用 Servlet 实现的控制器 ASP.NET 使用 HttpHandler 实现的控制器
public class LoginServlet extends 
HttpServlet 

{

protected void 
processRequest(HttpServletRequest 
request, HttpServletResponse response)

throws ServletException, IOException 
{
// In this will go the code for 
// connecting the model to the view.
}
}
public class LoginHandler : 
IHttpHandler,IRequiresSessionState 
{
public void ProcessRequest(HttpContext
 context)
{
// In this will go the code for 
// connecting the model to the view.

}
}


在控制器中,我们可以使用以下代码在两种技术中从请求和响应中获取数据。
 

J2EE 从 JSP 表单获取数据 从 .aspx 页面获取数据
String username = 
(String)request.getParameter("username")
;
String password = 
(String)request.getParameter("password")
;
UserBean model = new UserBean();

User obj = new User();
obj.UserName = 
context.Request.Form["txtUser"].ToString(
);
obj.Password = 
context.Request.Form["txtPassword"].ToString( );


然后,我们调用模型的 “isValid” 函数,并根据用户是否有效重定向到欢迎页面或主页。要在 J2EE 中重定向,我们使用 “RequestDispatcher” 类;要在 ASP.Net 中重定向,我们使用 “response.redirect” 函数。

J2EE 检查用户是否有效并重定向 ASP.NET 检查用户是否有效并重定向。
boolean isValidUser = model.isValid();
if(isValidUser)
{
request.setAttribute("welcome","Welcom
e"+username);
}
else 
nextJsp ="Error.jsp";
RequestDispatcher dispatch = 
request.getRequestDispatcher(nextJsp);
dispatch.forward(request,response);
if (obj.IsValid())
{

context.Session["Welcome"] = "welcome " + 
obj.UserName;


 

context.Response.Redirect("Welcome.aspx");
}
else
{

context.Response.Redirect("Error.aspx");

}


映射 XML 文件 – J2EE 中的 Web.xml 和 ASP.NET 中的 Web.config

既然我们已经创建了控制器,我们就需要将操作或 URL 模式映射到控制器。换句话说,当有人发送“Login”之类的操作或 URL 模式时,我们需要确保它会调用适当的控制器。

在两种技术中,模式/操作到控制器的映射是通过使用配置文件 XML 文件完成的。在 J2EE 中,此配置文件称为“Web.xml”文件;在 ASP.NET 中,它称为“Web.config”。

在 J2EE 的 web.xml 中,我们首先需要映射哪个 URL 模式映射到哪个 servlet。例如,您可以在下面的 web.xml 代码片段中看到,我们将 Login 模式映射到了 LoginServlet servlet 名称。

<servlet-mapping>

<servlet-name>
LoginServlet
</servlet-name>

<url-pattern>
/Login
</url-pattern>

</servlet-mapping>


一旦模式与 servlet 名称匹配,我们就可以像下面的代码片段一样,将 servlet 名称与 servlet/控制器类进行映射。

<servlet-name>
LoginServlet
</servlet-name>
<servlet-class>
com.questpond.controller.LoginServlet
</servlet-class>


在 ASP.NET 中,控制器或处理程序通过 web.config 文件与 URL 模式进行映射。以下是一个简单的 web.config 文件 XML 代码片段,它显示了如何将 Login URL 模式映射到 httphandler ‘Loginhandler’。

<httpHandlers>
<add verb="POST" path="Login" type="MVCAspWithoutFramework.LoginHandler"/>
</httpHandlers>

以下是两种技术中整体配置文件如下所示。
 

J2EE Web.XML ASP.NET Web.config
    <servlet-name>LoginServlet</servlet-
name>
       <servlet-
class>com.questpond.controller.LoginServlet    
</servlet-class>
      </servlet>
      <servlet-mapping>
            <servlet-
name>LoginServlet</servlet-name>
           <url-pattern>/Login</url-pattern>
      </servlet-mapping>
<httpHandlers>
         <add verb="POST" path="Login"
type="MVCAspWithoutFramework.LoginHan
dler"/>

        </httpHandlers>


视图 – J2EE 中的 Servlet 和 ASP.NET 中的 HttpHandler

下一个重要部分是视图。视图就是一个简单的页面,其中包含具有 URL 模式的 action 的 form 标签。
您可以看到 index.jsp 和 index.aspx 如何具有指向 Login URL 模式的操作。然后在 web.xml 和 web.config 文件中,此 URL 模式被映射到相应的控制器。
 

J2EE 视图 index.jsp ASP.NET 视图 index.aspx
<form action="Login" method="post">
              Username<input type="text"
name="username" value="" />
             <br/>
             Password<input type="password"
name="password" value="" />
            <br/>
            <input type="submit"
 value="Submit" />

       </form>
<form id="form1" runat="server"
action="Login" method=post>
      <div>

<asp:TextBox ID="txtUser"
runat="server"></asp:TextBox>
<asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server"
Text="Button" />

     </div>
     </form>


总结最终对比表
 

  J2EE ASP.NET
模型 带 setter 和 getter 的简单 Java bean 类。 带业务逻辑、setter 和 getter 的简单 .NET 类。
控制器 (Controller) 控制器使用 HttpServlet 类实现。 控制器使用 HttpHandler 类实现。
视图 简单的 JSP 页面。 简单的 ASPX 页面。
 


源代码

获取 ASP.NET MVC 和 J2EE MVC(无框架)的 源代码


下一步:使用框架进行对比

本文对比了两种技术在不使用框架时的 MVC 实现。在下一篇文章中,我们将看到在使用框架时 MVC 有何不同。Struts 是 J2EE 中最流行的 MVC 框架,而 Microsoft VS MVC 模板是 Microsoft 中实现 MVC 最常用的方式。

让我们看看谁赢,谁更好……。

ASP.NET 面试题及答案

如需进一步阅读,请观看以下面试准备视频和循序渐进的视频系列。

© . All rights reserved.