个人网站web模板-如何在J2EE平台上开发基于Velocity模板的Web应用

软件项目培训及课程设计指导——如何使用MyEclipse开发工具开发基于Velocity模板的Web应用

1、在MyEclipse开发工具中新建一个名为WebVelocity的Web项目

在名为WebVelocity的J2EE Web应用项目的lib目录下添加Velocity模板所需的JAR包文件velocity-1.6.1-dep.jar,最终运行结果截图如右图所示。

由于Velocity模板的系统库在不断更新和升级,读者可以从Velocity官网下载Velocity的系统运行时包文件和技术参考文档等系统库和资料,然后解压系统库的运行时包文件。 请参阅右侧显示的下载页面。

2.在Web项目中添加一个文件名为userLogin.jsp的JSP页面

在userLogin.jsp的JSP页面中添加Web表单来实现应用系统的用户登录功能,并向应用系统后台的Servlet组件发送Web请求。 userLogin.jsp的JSP页面的内容标签,请参见以下示例所示的内容——名为userLogin.jsp的JSP页面的内容。




      
      			My JSP 'userLogin.jsp' starting page
      
      
            
                  请输入用户名称:
请输入用户密码:

userLogin.jsp 的 JSP 页面在 Web 浏览器中的执行结果如下面的示例图所示,其中包含一个用于收集用户登录信息的 Web 表单。

3. 在Web项目中添加另一个Servlet组件

Servlet类名为UserLoginServlet,包名为com.px1987.webvelocity.servlet,它继承自org.apache.velocity.servlet.VelocityServlet类,URL-Pattern为/userloginservlet。 Servlet类的代码内容请参见下面的代码示例中UserLoginServlet类的代码示例。

在新版本的Velocity模板系统库中,VelocityServlet类被升级并替换为VelocityViewServlet(org.apache.velocity.tools.view.VelocityViewServlet)类。 读者在开发时只需将VelocityServlet类改为VelocityViewServlet类即可。

(1)编写Servlet类的程序代码——UserLoginServlet类代码示例

package com.px1987.webvelocity.servlet;
import java.io.*;
import java.util.Properties;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.*;
import org.apache.velocity.servlet.VelocityServlet;
public class UserLoginServlet extends VelocityServlet{
      protected Properties loadConfiguration(ServletConfig config ) throws
      IOException,FileNotFoundException{
            String propsFile = config.getInitParameter("properties");
            if ( propsFile != null ){
                  String realPath = getServletContext().getRealPath(propsFile);
                  if ( realPath != null ) {
                 			 propsFile = realPath;
                  }
            }
            Properties onePropertiesObject = new Properties();
            onePropertiesObject.load( new FileInputStream(propsFile) );
            String propertiesFilePath = onePropertiesObject.getProperty("file.resource.loader.path");
            if (propertiesFilePath!= null){
                  propertiesFilePath = getServletContext().getRealPath(path);
                  onePropertiesObject.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path );
            }
            /** 设置模板的资源位置 */
            propertiesFilePath = onePropertiesObject.getProperty("runtime.log");
            if (propertiesFilePath!= null){
                  propertiesFilePath = getServletContext().getRealPath(path);
                  onePropertiesObject.setProperty("runtime.log", propertiesFilePath);
            }
            return onePropertiesObject;
        }
        public Template handleRequest(HttpServletRequest request,
            HttpServletResponse response, Context context )
            throws ServletException, IOException{
                  String userName =request.getParameter("userName");
                  String userPassword= request.getParameter("userPassword");
                  context.put("userName", userName);
                  context.put("userPassword", userPassword);
                  Template outTemplate = null;
                  try {
                 			 outTemplate =getTemplate("WebVelocityApp.html");
                  }
                  catch( ParseErrorException e ){
                        request.setAttribute("errorText","不能对模板进行解析" );
                        error(request,response,e);
                  }
                  catch( ResourceNotFoundException e ){
                        request.setAttribute("errorText","没有找到模板文件" );
                        error(request,response,e);
                  }
                  catch( Exception e ){
                        request.setAttribute("errorText","出现了其它方面的错误" );
                        error(request,response,e);
                  }
            return outTemplate;
      }
      /** 异常处理也都交到error方法处理,可以覆盖基类中的error的处理办法,从而实现对异常的封装和包裹。*/
      protected void error( HttpServletRequest request, HttpServletResponse response,
      Exception cause ) throws ServletException, IOException{
          String errorText = (String) request.getAttribute("errorText");
          StringBuffer oneStringBuffer = new StringBuffer();
          oneStringBuffer.append("");
          oneStringBuffer.append("");
          oneStringBuffer.append("错误信息显示页面");
          oneStringBuffer.append(""+ errorText+"
错误出现的位置:
"); StringWriter oneStringWriter = new StringWriter(); cause.printStackTrace(new PrintWriter(oneStringWriter)); oneStringBuffer.append(oneStringWriter.toString()); oneStringBuffer.append(""); response.setContentType("text/html;charset=gb2312"); PrintWriter webOutPutStream=response.getWriter(); webOutPutStream.print(oneStringBuffer.toString()); } }

(2)在Web项目的部署描述文件web.xml中部署并定义Servlet类

在部署Servlet类时,还需要为其提供一个名为properties的初始化参数,其值为Velocity模板的属性配置文件velocity.properties的路径信息(在程序UserLoginServlet类中动态获取)。 以下代码示例是用于在 web.xml 文件中部署 UserLoginServlet 类的代码的一部分。


      UserLoginServlet 
     com.px1987.webvelocity.servlet.UserLoginServlet
      
            properties
            /velocityConf/velocity.properties
      


      UserLoginServlet
      /userloginservlet

4.在Web项目的velocityConf目录下添加Velocity的属性配置文件

在此Web项目中,添加属性配置文件所在的文件目录。 目录名称为velocityConf,在velocityConf目录下添加一个名为velocity.properties的文件。设置该文件的内容请参见下面代码示例——Velocity Template的velocity.properties属性配置文件示例引擎(模板引擎)

file.resource.loader.path = /
runtime.log = /velocity.log

该文件是Velocity模板引擎的初始化参数文件。 Web应用系统的开发人员可以在其中设置相关的工作参数。 这些工作参数主要是Velocity模板引擎配置、编码、缓存、日志等工作参数的定义。

当然,Velocity模板引擎中预设了一些默认配置属性,以防止开发人员错误配置项目。 通过配置velocity.properties文件,Web应用系统的开发人员可以自定义vm文件的加载形式、指定编码等。

当然个人网站web模板,你也可以使用默认值而不配置velocity.properties文件。 以下代码示例是velocity.properties 文件的更具代表性的配置示例。

模板的网站_个人网站web模板_模板网站建站

## 设置Velocity模版引擎的模板文件加载器,webapp从应用根目录加载
      resource.loader = webapp
      webapp.resource.loader.class =
      org.apache.velocity.tools.view.servlet.WebappLoader
## 定义Velocity模版引擎的模板文件路径为Web应用系统的根目录文件夹
			webapp.resource.loader.path = /
## 设置Velocity模版引擎的编码方式
      input.encoding = UTF-8
      output.encoding = UTF-8

读者还可以根据Web应用项目的需要,将“input.encoding”和“output.encoding”设置为英文编码格式,例如GBK或GB2312。

5. 在Web项目中添加另一个webVelocityApp.html模板文件

Velocity模板文件可以是文本格式的文件,该模板文件不仅可以是*.vm模板文件,还可以是HTML或XML等标准格式的文本文件。 因此个人网站web模板,模板文件的文件扩展名可以为*.vm、*.html、*.xml等类型。 模板文件中通常包含以下内容:

1)静态部分原样合并

2) 将被要合并的数据替换的占位符

3) 脚本语言的指示器和指令

因此,在Web项目中添加一个新的HTML页面文件,该文件是一个名为webVelocityApp.html的模板文件,并在该模板文件中添加如下代码示例所示的HTML标签内容——webVelocityApp.html模板文件中的HTML标签内容读者注意宋代标注的词句。

模板网站建站_模板的网站_个人网站web模板



      
            
            一个简单的VelocityWeb应用页面
      
      
             

下面为Servlet处理后的结果

用户名称用户密码
$userName$userPassword

由于里面的模板文件是一个完整的HTML文件,因此任何网页设计工具或文本编辑器都可以用来创建和编辑HTML页面文件; 访问模板文件中上下文对象中存储的属性:

例如,$userName 指令可用于引用保存到上面上下文对象的属性。 注意:在 Velocity 模板文件中,变量的定义以“#34;”字符开头,“#34;”则以“#34;”开头。 字符用作 Velocity 模板文件中的标识符。

由于Velocity模板引擎系统使用简单而强大的模板语言VTL来渲染网页,因此可以保证在Dreamwaver等网页可视化编辑器中正常显示; 另外,模板文件可以是任意文件扩展名,可以使用*.vm、*.html或*.xml(本例使用*.html文件扩展名),这样就可以直接看到预览的效果Web 浏览器中的网页。

6. 执行Web应用程序并测试Velocity模板的功能功效

读者可以直接在浏览器中输入以下URL地址字符串,直接浏览用户登录页面: 请求8080/WebVelocity/userLogin.jsp的URL地址后,会出现如下图所示的实现用户登录功能的页面。

读者在上图所示的Web表单框中输入用户名和密码,然后点击“提交”按钮,Web表单页面就会向Web应用系统后台的Servlet组件提交Web请求,最后会出现下图所示的执行结果状态——为了验证Velocity模板引擎应用的正确性,本示例在响应页面中获取用户的登录账号、密码等信息,然后显示在页面对比是否正确获取相关数据。

模板网站建站_个人网站web模板_模板的网站

从执行结果和网页浏览器中最终响应输出信息来看,本示例的功能是正确的,Velocity模板引擎的应用也是合理正确的。

当然,在实际的Web应用系统的业务处理逻辑中,用户的敏感登录信息不会简单直接地显示出来,而是通过在系统后台访问数学数据库系统中的数据库表中的数据、比较用户提交的登录信息是否合法有效。

此外,webVelocityApp.html 页面是静态 HTML 页面,而不是动态服务器端 JSP 页面。 如果本Web示例中不使用Velocity模板引擎系统,则很难在静态HTML页面中获取服务器返回的业务处理。 结果的参数。

因此,网页的响应速度将大大增强,使得采用Velocity模板技术的网页可以是非JSP类型的网页——达到“内容动态静态”的应用效果。

如何在Web应用系统的表示层开发中应用Velocity模板技术

利用XML+XSLT技术分离Web应用表示层数据和样式的示例

如何应用“XML+XSLT”技术分离Web表现层数据和样式

如何正确应用Web MVC架构模式来分离表现层和模型层的耦合关系

如何应用CSS+Div分离Web表示层的数据处理逻辑和解释逻辑