模板引擎之 NVelocity 学习

在一般处理程序中,如果我们要用Context.Response.Write(string) 来输出页面,如果不用到模板引擎,直接写HTML代码,则会显得非常的繁琐和不便,而是用了模板引擎,则事半功倍,

下面就介绍NVelocity  其工作步骤 : 编写模板 --》提供数据 --》渲染成HTML 利用Context.Response.Write(string) 来输出,

下面是简单的代码演示

在一般处理程序中 ,一个简单的登录功能,

 public class Login2 : IHttpHandler
    {
        //采用NVelocity 模板引擎 longin 可改变为 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string userName = context.Request["username"];
            string passWord = context.Request["password"];

            #region Nvelocity  的用法 传入普通的值
            if (string.IsNullOrEmpty(userName) && string.IsNullOrEmpty(passWord))
            {
                VelocityEngine vltEngine = new VelocityEngine();
                vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
                vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/aa"));//模板文件所在的文件夹
                vltEngine.Init();

                VelocityContext vltContext = new VelocityContext();
                vltContext.Put("username", "");//设置参数,在模板中可以通过$data来引用
                vltContext.Put("password", "");
                vltContext.Put("msg", "");
                Template vltTemplate = vltEngine.GetTemplate("login.htm");
                System.IO.StringWriter vltWriter = new System.IO.StringWriter();
                vltTemplate.Merge(vltContext, vltWriter);

                string html = vltWriter.GetStringBuilder().ToString();
                context.Response.Write(html);

            }
            else
            {
                if (userName != "admin" || passWord != "123")
                {
                    VelocityEngine vltEngine = new VelocityEngine();
                    vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
                    vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/aa"));//模板文件所在的文件夹
                    vltEngine.Init();

                    VelocityContext vltContext = new VelocityContext();
                    vltContext.Put("username", userName);//设置参数,在模板中可以通过$data来引用
                    vltContext.Put("password", passWord);
                    vltContext.Put("msg", "err");
                    Template vltTemplate = vltEngine.GetTemplate("login.htm");
                    System.IO.StringWriter vltWriter = new System.IO.StringWriter();
                    vltTemplate.Merge(vltContext, vltWriter);
                    string html = vltWriter.GetStringBuilder().ToString();
                    context.Response.Write(html);
                }
                else
                {
                    VelocityEngine vltEngine = new VelocityEngine();
                    vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
                    vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/aa"));//模板文件所在的文件夹
                    vltEngine.Init();

                    VelocityContext vltContext = new VelocityContext();
                    vltContext.Put("username", userName);//设置参数,在模板中可以通过$data来引用
                    vltContext.Put("password", passWord);
                    vltContext.Put("msg", "right");
                    Template vltTemplate = vltEngine.GetTemplate("login.htm");
                    System.IO.StringWriter vltWriter = new System.IO.StringWriter();
                    vltTemplate.Merge(vltContext, vltWriter);
                    string html = vltWriter.GetStringBuilder().ToString();
                    context.Response.Write(html);
                }

            }
            #endregion

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
在程序集中 aa 文件夹下有 Login.htm 文件  用 $ 符标记传入的变量

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <strong><font color='red'>登录</font></strong>
        <form action='/Login2.ashx'>
        <input type='text' name='username' value='$username'/>
        <input type='password' name='password' value='$password' />
        <input type='submit' value='登录'/>
    </form>
    <p>$msg</p>

</body>
</html>


当然  NVelocity 中也可传入 对象  

如下

 public class Login2 : IHttpHandler
    {
        //采用NVelocity 模板引擎 longin 可改变为 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            #region Nvelocity 可以传输对象到页面模板
            Person per = new Person();
            per.Name = "zhang";
            per.Age = "30";
            per.Father = new Person() { Name = "lili", Age = "23" };

            VelocityEngine vltEngine = new VelocityEngine();
            vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
            vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/aa"));//模板文件所在的文件夹
            vltEngine.Init();

            VelocityContext vltContext = new VelocityContext();
            vltContext.Put("p", per);//设置参数,在模板中可以通过$data来引用

            Template vltTemplate = vltEngine.GetTemplate("test.htm");
            System.IO.StringWriter vltWriter = new System.IO.StringWriter();
            vltTemplate.Merge(vltContext, vltWriter);

            string html = vltWriter.GetStringBuilder().ToString();
            context.Response.Write(html); 
            #endregion

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

其对应的html 页面为

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
   姓名是:$p.Name   年龄是 :$p.Age  父亲是:$p.Father.Name
   <!-- $dic.zhangcheng-->	
</body>
</html>


NVelocity  如果对象有一个字符串索引器,则还可以“$data.索引器值”的方式通过索引器获取值

见代码

 public class Login2 : IHttpHandler
    {
        //采用NVelocity 模板引擎 longin 可改变为 
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string userName = context.Request["username"];
            string passWord = context.Request["password"];

            #endregion

            #region “$data.索引器值  如键值对 可以用,还有就是datarow 可以用
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic["tom"] = "qinghua";
            dic["zhangcheng"] = "nanada";

            VelocityEngine vltEngine = new VelocityEngine();
            vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
            vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/aa"));//模板文件所在的文件夹
            vltEngine.Init();

            VelocityContext vltContext = new VelocityContext();
            vltContext.Put("dic", dic);//设置参数,在模板中可以通过$data来引用

            Template vltTemplate = vltEngine.GetTemplate("test.htm");
            System.IO.StringWriter vltWriter = new System.IO.StringWriter();
            vltTemplate.Merge(vltContext, vltWriter);

            string html = vltWriter.GetStringBuilder().ToString();
            context.Response.Write(html);
            #endregion


        }

html  代码如上

通过 Nvelociyt 还可以在模板中使用  循环,判断  ,看对应的HTML 代码

<!--#parse("head.htm")-->
#include("head.htm")
<!--<ul>
    #foreach($p in  $persons)
    <li>$p.Name</li>
    #end
</ul>-->

<ul>
    #foreach($p in  $persons)
        #if($p.Age == "30")
         <li>$p.Name</li>
        #end
    #end
</ul>

</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 支持向量机非线性回归通用MATLAB程序解析 #### 一、概述 本文将详细介绍一个基于MATLAB的支持向量机(SVM)非线性回归的通用程序。该程序采用支持向量机方法来实现数据的非线性回归,并通过不同的核函数设置来适应不同类型的数据分布。此外,该程序还提供了数据预处理的方法,使得用户能够更加方便地应用此程序解决实际问题。 #### 二、核心功能与原理 ##### 1. 支持向量机(SVM) 支持向量机是一种监督学习模型,主要用于分类和回归分析。对于非线性回归任务,SVM通过引入核技巧(kernel trick)将原始低维空间中的非线性问题转换为高维空间中的线性问题,从而实现有效的非线性建模。 ##### 2. 核函数 核函数的选择直接影响到模型的性能。本程序内置了三种常用的核函数: - **线性核函数**:`K(x, y) = x'y` - **多项式核函数**:`K(x, y) = (x'y + 1)^d` - **径向基函数(RBF)**:`K(x, y) = exp(-γ|x - y|^2)` 其中RBF核函数被广泛应用于非线性问题中,因为它可以处理非常复杂的非线性关系。本程序默认使用的是RBF核函数,参数`D`用于控制高斯核函数的宽度。 ##### 3. 数据预处理 虽然程序本身没有直接涉及数据预处理的过程,但在实际应用中,对数据进行适当的预处理是非常重要的。常见的预处理步骤包括归一化、缺失值处理等。 ##### 4. 模型参数 - **Epsilon**: ε-insensitive loss function的ε值,控制回归带宽。 - **C**: 松弛变量的惩罚系数,控制模型复杂度与过拟合的风险之间的平衡。 #### 三、程序实现细节 ##### 1. 函数输入与输出 - **输入**: - `X`: 输入特征矩阵,维度为(n, l),其中n是特征数量,l是样本数量。 - `Y`: 目标值向量,长度为l。 - `Epsilon`: 回归带宽。 - `C`: 松弛变量的惩罚系数。 - `D`: RBF核函数的参数。 - **输出**: - `Alpha1`: 正的拉格朗日乘子向量。 - `Alpha2`: 负的拉格朗日乘子向量。 - `Alpha`: 拉格朗日乘子向量。 - `Flag`: 标记向量,表示每个样本的类型。 - `B`: 偏置项。 ##### 2. 核心代码解析 程序首先计算所有样本间的核矩阵`K`,然后构建二次规划问题并求解得到拉格朗日乘子向量。根据拉格朗日乘子的值确定支持向量,并计算偏置项`B`。 - **核矩阵计算**:采用RBF核函数,通过`exp(-(sum((xi-xj).^2)/D))`计算任意两个样本之间的相似度。 - **二次规划**:构建目标函数和约束条件,使用`quadprog`函数求解最小化问题。 - **支持向量识别**:根据拉格朗日乘子的大小判断每个样本是否为支持向量,并据此计算偏置项`B`。 #### 四、程序扩展与优化 - **多核函数支持**:可以通过增加更多的核函数选项,提高程序的灵活性。 - **自动调参**:实现参数自动选择的功能,例如通过交叉验证选择最优的`Epsilon`和`C`值。 - **并行计算**:利用MATLAB的并行计算工具箱加速计算过程,特别是当样本量很大时。 #### 五、应用场景 该程序适用于需要进行非线性回归预测的场景,如经济预测、天气预报等领域。通过调整核函数和参数,可以有效应对各种类型的非线性问题。 ### 总结 本程序提供了一个支持向量机非线性回归的完整实现框架,通过灵活的核函数设置和参数调整,能够有效地处理非线性问题。对于需要进行回归预测的应用场景,这是一个非常实用且强大的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师影响力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值