`
spark998
  • 浏览: 39294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AbstractWizardFormController 实例

阅读更多
由于工作需要,需要经多个表单在最后一部进行操作,觉得spring的AbstractWizardFormController最适合在这里使用,我自己做的一个完整的小例子。以下是全部的代码:
1)配置文件:web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.3" 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_3.xsd">

<servlet>
  <servlet-name>heheapp</servlet-name>
  <servlet-class>
   org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>heheapp</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<taglib>
  <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
  <taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</web-app>


2)heheapp-servlet.xml
这个名字是由web.xml中的<servlet-name>属性来的,spring中是这样默认的。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="registerController" class="com.kang.test.RegisterController">
  <property name="successView"><value>success</value> </property>
  <property name="cancelView"><value>main</value> </property>
  <property name="commandClass"><value>com.kang.test.RegisterInfor</value></property>
  <property name="pages">
    <list>
   <value>main</value>
   <value>register1</value>
   <value>register2</value>
   <value>register3</value>
    </list>
     </property>
</bean>
<!--InternalResourceViewResolver-->
<bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix">
   <value>/</value>
  </property>
  <property name="suffix">
   <value>.jsp</value>
  </property>
</bean>

<!--SimpleUrlHandlerMapping-->
<bean id="urlMapping"
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <props>
    <prop key="/hehe.htm">registerController</prop>
   </props>
  </property>
</bean>
</beans>
在这个配置文件里,所有的舰艇都来自web.xml文件,这里进一步进行监听,凡是以/hehe.htm作为提交目的的都将被registerController进行处理。

3)RegisterController

package com.kang.test;

import org.apache.log4j.Logger;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractWizardFormController;

public class RegisterController extends AbstractWizardFormController {
/**
  * Logger for this class
  */
private static final Logger logger = Logger.getLogger(RegisterController.class);

private String successView;
private String cancelView;
    public RegisterController(){
    
     logger.info("--------RegisterController init----start--");
     //setPages(new String[] {"main.jsp", "register1.jsp", "register2.jsp", "register3.jsp"});
     //this.successView="success.jsp";
     //this.cancelView="main.jsp";    
     logger.info("--------RegisterController init----end----");
    
    }
public String getSuccessView() {
  logger.info("--------RegisterController getSuccessView()------");
  return successView;
}

public void setSuccessView(String successView) {
  this.successView = successView;
}

public String getCancelView() {
  logger.info("--------RegisterController getCancelView()------");
  return cancelView;
}

public void setCancelView(String cancelView) {
  this.cancelView = cancelView;
}

public  ModelAndView processFinish(HttpServletRequest req, HttpServletResponse res, Object command, BindException errs) throws Exception {
  logger.info("-----processFinish-----start-----");
  RegisterInfor registerInfor = (RegisterInfor) command;
  logger.info("-----processFinish-----registerInfor:"+registerInfor);
  logger.info("-----processFinish-----end-----");
  return new ModelAndView(this.getSuccessView(), "registerInfor", registerInfor);
}

public ModelAndView processCancel(HttpServletRequest req, HttpServletResponse res, Object command, BindException errs) throws Exception {
  logger.info("-----processCancel-----");
  return new ModelAndView(this.getCancelView());
}
}


4)RegisterInfor 是一个普通的bean,负责存贮整个流程中需要提交的信息,他在多个步骤中使用。

package com.kang.test;

import java.io.UnsupportedEncodingException;

import org.apache.log4j.Logger;

public class RegisterInfor {
/**
  * Logger for this class
  */
private static final Logger logger = Logger.getLogger(RegisterInfor.class);

private String name;

private int age;

private char sex;

private String adress;

private String phone;

private String email;

private String favor;
   
public RegisterInfor(){
  logger.info("--------RegisterInfor init------");
 
}
public String getAdress() {
  logger.info("--------getAdress()------");
  return adress;
}

public void setAdress(String adress) {
  logger.info("--------setAdress------adress:"+adress);
  this.adress = StringUtil.changeStringCharSet(adress, "ISO-8859-1", "GBK");
  logger.info("--------adress:"+this.adress); 
}

public int getAge() {
  logger.info("-------getAge-------");
  return age;
}

public void setAge(int age) {
  logger.info("-------setAge-------age:"+age);
  this.age = age;
}

public String getEmail() {
  logger.info("-------getEmail-------");
  return email;
}

public void setEmail(String email) {
  logger.info("-------setEmail-------email:"+email);
  this.email = email;
}

public String getFavor() {
  logger.info("-------getFavor-------");
  return this.favor;
}

public void setFavor(String favor) {
 
  this.favor=StringUtil.changeStringCharSet(favor, "ISO-8859-1", "GBK");
  logger.info("-------setFavor-------favor:"+this.favor);
 
}

public String getName() {
  logger.info("-------getName-------");
  return this.name;
}

public void setName(String name) {
 
  this.name = StringUtil.changeStringCharSet(name, "ISO-8859-1", "GBK");
  logger.info("-------setName-------name:"+this.name);
}

public String getPhone() {
  logger.info("--------getPhone------");
  return phone;
}

public void setPhone(String phone) {
  logger.info("-------setPhone-------phone:"+phone);
  this.phone = phone;
}

public char getSex() {
  logger.info("-------getSex-------");
  return sex;
}

public void setSex(char sex) {
  logger.info("-------setSex-------sex:"+sex);
  this.sex = sex;
}
}

5)mian.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>


<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
 
  <body>
  
<FORM action="hehe.htm" method="post" name="dsada">
<TABLE>
  <TBODY>
   <TR>
    <TD>
     注册信息,请认真填写!
    <input type="submit" value="下一步"  name="_target1" align="center"/>

    </TD>
   </TR>
  </TBODY>
</TABLE>
</FORM>
<br>
  </body>
</html>


6)register1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>


<html>
  <head>
    <title>My JSP 'second.jsp' starting page</title>

  </head>
 
  <body>
   <table>
   <TR>
      <TD>
       User infor:
      </TD>
     </TR>
     <TR>
      <TD>姓名:
       <c:out value="${registerInfor.name}" />
      </TD>
     </TR>
     <TR>
      <TD>年龄:
       <c:out value="${registerInfor.age}" />
      </TD>
     </TR>
     <TR>
      <TD>
      地址:
       <c:out value="${registerInfor.adress}" />
      </TD>
     </TR>
     <TR>
      <TD>email:
       <c:out value="${registerInfor.email}" />
      </TD>
     </TR>  
      <TR>
      <TD>电话:
       <c:out value="${registerInfor.phone}" />
      </TD>
     </TR>  
      <TR>
      <TD>喜好:
       <c:out value="${registerInfor.favor}" />
      </TD>
     </TR>  
     
    
  
  
   </table>
  </body>
</html>


7)register2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>


<html>
<head>
  <title>My JSP '2.jsp' starting page</title>

</head>

<body>
  <FORM action="hehe.htm" method="post" name="dsadas">
   <TABLE>
    <TBODY>
     <TR>
      <TD>
       地址:
       <INPUT name="adress" type="text" />
      </TD>
     </TR>
     <TR>
      <TD>
       电话:
       <INPUT name="phone" type="text" />
      </TD>
     </TR>
     <TR>
      <TD>
       电子邮件:
       <INPUT name="email" type="text" />
      </TD>
     </TR>
     <TR>
      <TD align="center">
       <INPUT type="submit" value="上一步" name="_target1" />
       <INPUT type="submit" value="下一步" name="_target3" />
       <INPUT type="submit" value="取消" name="_cancel" />
      </TD>
     </TR>
    </TBODY>
   </TABLE>
  </FORM>
</body>
</html>





8)register3.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>


<html>
<head>
  <title>My JSP '3.jsp' starting page</title>

</head>

<body>
  <FORM action="hehe.htm" method="post" name="dsadas">
   <TABLE>
    <TBODY>
     <TR>
      <TD>
       喜好:
       <br>
       <TEXTAREA cols="40" rows="8" name="favor"
        style="background-color:D7F8AB"></TEXTAREA>
      </TD>
     </TR>
     <TR>
      <TD align="center">
       <INPUT type="submit" value="上一步" name="_target2" />
       <INPUT type="submit" value="完成" name="_finish" />
       <INPUT type="submit" value="取消" name="_cancel" />
      </TD>
     </TR>
    </TBODY>
   </TABLE>
  </FORM>

</body>
</html>


9)success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>


<html>
  <head>
    <title>My JSP 'second.jsp' starting page</title>

  </head>
 
  <body>
   <table>
   <TR>
      <TD>
       User infor:
      </TD>
     </TR>
     <TR>
      <TD>姓名:
       <c:out value="${registerInfor.name}" />
      </TD>
     </TR>
     <TR>
      <TD>年龄:
       <c:out value="${registerInfor.age}" />
      </TD>
     </TR>
     <TR>
      <TD>
      地址:
       <c:out value="${registerInfor.adress}" />
      </TD>
     </TR>
     <TR>
      <TD>email:
       <c:out value="${registerInfor.email}" />
      </TD>
     </TR>  
      <TR>
      <TD>电话:
       <c:out value="${registerInfor.phone}" />
      </TD>
     </TR>  
      <TR>
      <TD>喜好:
       <c:out value="${registerInfor.favor}" />
      </TD>
     </TR>  
     
    
  
  
   </table>
  </body>
</html>

10)还有个字符处理的方法:

package com.kang.test;

import java.io.UnsupportedEncodingException;

public class StringUtil {

public static String changeStringCharSet(String str,String oldCharSet,String toCharSet){
  String temp="";
  try {
   temp = new String(str.getBytes(oldCharSet),toCharSet);
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return temp;
}
}


全部的代码,发布以下就可以运行!呵呵!
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring表单向导控制器(实现数据缓存)

    当在网页填写表单信息过多的时候,一般会采用向导式的分页填写...该例子前端是easyui+Jsp实现,后台是采用了spirng @SessionAttributes(替代新版本spring不支持AbstractWizardFormController)这个注解实现表单控制器

    Spring MVC 向导控制器完整的例子

    这是一个简单完整的Spring MVC向导控制器(AbstractWizardFormController)的例子,包含所需的类包,可以运行,也是我重新熟悉Spring 的第二例子,明天再上传Spring 的例外个例子,如有问题,我们可以互相学习下.

    SPRING API 2.0.CHM

    AbstractWizardFormController AbstractXmlApplicationContext AbstractXsltView AcceptHeaderLocaleResolver ActionRequestWrapper ActionServletAwareProcessor ActionSupport AdaptableJobFactory ...

    开源框架 Spring Gossip

    PropertiesMethodNameResolver ParameterizableViewController AbstractCommandController AbstractFormController SimpleFormController AbstractWizardFormController ...

    node-v0.8.10-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    【课程设计】实现的金融风控贷款违约预测python源码.zip

    【课程设计】实现的金融风控贷款违约预测python源码.zip

    node-v0.10.27-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    课设毕设基于SSM的高校二手交易平台-LW+PPT+源码可运行.zip

    课设毕设基于SSM的高校二手交易平台--LW+PPT+源码可运行

    c++,冒险游戏,可供学习

    冒险游戏,可供学习

    node-v0.11.7-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.8.6-sunos-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于C语言的天气客户端的实现.zip

    基于C语言的天气客户端的实现.zip

    internet_download_manager_6.42.3.zip

    internet_download_manager_6.42.3

    第一版商业计划书(1).doc

    第一版商业计划书(1).doc

    node-v0.8.28-linux-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.11.5-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Unity Terrain Adjust

    核心特性:地形调整的灵活性 地形高度与坡度调整: 利用Terrain Adjust,设计师可以根据需要轻松调整地形的高度和坡度,创造出更加自然和真实的环境。 光滑边缘处理: 工具提供了边缘平滑功能,确保地形调整后的过渡自然,避免了突兀的高低变化。 自定义画笔设置: 可调整画笔大小、衰减、间距等参数,让设计师能够精确控制地形的每一个细节。 应用场景:多样化的地形创作 道路与岩石融合: 利用Terrain Adjust,可以将道路和岩石自然地混合到地形中,为游戏世界增添更多细节。 坡道创建: 工具还支持创建坡道,为游戏中的车辆或其他移动元素提供更加丰富的地形变化。 技术细节:轻量级与高效 编辑器专用: 作为编辑器的专用工具,Terrain Adjust不会对项目造成混乱,保持了工作环境的整洁。 Collider需求: 为了使用Terrain Adjust,目标对象需要有Collider组件,以确保地形调整的准确性。 Terrain Adjust工具以其轻量级设计和强大的地形调整功能,成为了Unity环境设计师的得力助手。它不仅提高了工作效率,还为创造更加丰富和真实的游戏世界提供了可能。

    nodejs-x64-0.10.12.tgz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    nodejs-x64-0.11.4.tgz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v0.12.17-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics