dwr3的一些介绍

DWR入门笔记

DWR : direct web remoting

它允许java server和 JavaScript尽可能简单的相互调用

从DWR2.0开始就需要使用commons-logging包

DWR2.0与DWR3.0差别很大

engine.execute(,,,,callback);

一对{}在JS中就表示一个对象,因此JSON——{username:"huangbiao",id:1}就表示一个对象

javabean:可重用的组件

关于map循环

for(var data in map){

 alert(data + "?" + map[data]);

}

 

初级入门

1、和lib文件夹在同一路径级别下添加dwr.xml和web.xml相关的配置信息

2、在JSP页面中尽量按照如下顺序引入,因为大家都是这么弄的,而且JS是顺序加载的,如果不按照这个顺序可能会引起其他问题(简单测试改换顺序是没有影响的),给编写代码中养成良好的习惯

<script type='text/javascript' src='dwr/interface/service.js'> </script>

<script type='text/javascript' src='dwr/engine.js'></script>

<script type='text/javascript' src='dwr/util.js'></script>

3、src='dwr/interface/service.js' 中的service就当作是服务器端需要处理的对象——前提是需要在dwr.xml文件中配置

4、dwr.xml配置信息如下

<allow>

 <create creator="new" javascript="service">

  <param name="class" value="hb.server.Test1"></param>

 </create>

</allow>

其中creator表示创建对象的方式是“new”一个新的对象,javascript="service"表示与页面对应的名称是service,因此在页面中需要与src='dwr/interface/service.js'对应,格式是固定的

里面的参数name="class"表示指明这个类的路径 value="hb.server.Test1"表示这个类的全路径

5、web.xml配置信息的描述

<servlet>

 <display-name>DWR Servlet</display-name>

 <servlet-name>dwr-invoker</servlet-name>

 <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

 <init-param>

  <param-name>debug</param-name>

  <param-value>true</param-value>

 </init-param>

</servlet>

<servlet-mapping>

 <servlet-name>dwr-invoker</servlet-name>

 <url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

 上述描述方式实际上就是一个servlet,当路径为/dwr/*时就执行这个servlet,因为在JSP页面中在加载js页面的时候就会执行这个方法,例如:

<script type='text/javascript' src='dwr/util.js'></script>,文件中的src='dwr/util.js'与配置的servlet匹配,这样就会触发这个servlet效果

6、这样就能够准确的定位到具体是那个类的哪个方法处理这个请求,然后是否有返回值都能够一目了然

7、如果想深入的了解DWR的解析方式或者对对象、字符串、数组的解析方式可以查看engin.js的方法实现

 

DWR深入理解

一、JAVA对象与javascript的交互过程

1、服务器端返回一个对象

dwr.xml配置信息如下:

<allow>

 <create creator="new" javascript="returnHTMLData">

  <param name="class" value="hb.server.returnHTMLData"></param>

 </create>

 <convert converter="bean" match="hb.object.Person"></convert>

</allow>

 

告诉服务器hb.object.Person这个类作为javabean对象来处理

服务器端的server代码处理

public class returnHTMLData {

 public Person returnPerson(){

  Person person = new Person();

  person.setId(1);

  person.setPassword("huangbiao");

  person.setUsername("1234");

  return person;

 }

}

 

JSP页面的js代码

function invoke(){

 returnHTMLData.returnPerson(function(data){

  alert(data.id);

  alert(data.password);

  alert(data.username);

 });

}

 2、JS向服务器端发送一个对象

<allow>

 <create creator="new" javascript="getHTMLData">

  <param name="class" value="hb.server.GetHTMLData"></param>

 </create>

 <convert converter="bean" match="hb.object.Person"></convert>

</allow>

 

服务器端的server代码处理

public class GetHTMLData {

 public void printPerson(Person person){

  System.out.println(person.getId());

  System.out.println(person.getPassword());

  System.out.println(person.getUsername());

 }

}

 

JSP页面的js代码

 

function invoke(){

//把JSON组织的代码当作是一个对象传递给server

 var dataJson = {id:2,password:"123456",username:"huangbiao"};

 getHTMLData.printPerson(dataJson);

}

 

二、调用服务器端返回的容器——List、Set、Map

1、List和Set是一类处理方式,对应的都是数组

配置信息如下

<allow>

 <create creator="new" javascript="returnHTMLCollection">

  <param name="class" value="hb.server.returnListData"></param>

 </create>

 <convert converter="bean" match="hb.object.Person"></convert>

</allow>

服务器对应的JAVA代码

public class returnListData {

 public Collection getCollection(){

  Collection<Person> list = new ArrayList<Person>();                    

  for(int i = 0; i < 3; i++){                                      

   Person person = new Person();                            

   person.setId(i);                                         

   person.setPassword("password" + i);                      

   person.setUsername("username" + i);                      

   list.add(person);                                        

  }                                                                

  return list;                                                     

 }                                                                        

}

JSP页面的js代码

function invoke(){

 returnHTMLCollection.getCollection(function(data){

  for(var i = 0; i < 3; i++){

   alert(data[i].id);

  }

 });

}

 

数据内容

  data = [                     

       {                       

          username:"user1",    

          password:"password2" 

       },                      

       {                       

          username:"user2",    

          password:" password2"

       }                       

   ]; 

 

2、使用Map对应的处理方式

配置信息

<allow>

 <create creator="new" javascript="returnMapData">

  <param name="class" value="hb.server.returnMapData"></param>

 </create>

 <convert converter="bean" match="hb.object.Person"></convert>

</allow>

服务器对应的JAVA代码

public class returnMapData {

 public Map getMapdata(){

  Map map = new HashMap<Integer, Person>();

  for(int i = 0; i < 3; i++){

   Person person = new Person();

   person.setId(i);

   person.setPassword("password" + i);

   person.setUsername("username" + i);   

   map.put(i, person);                                     

  }                                                               

  return map;                                                     

 }                                                                       

}                                                                               

JSP页面的js代码                                                     

function invoke(){                                                  

 /*                                                          

 returnMapData.getMapdata(function(data){                    

  for(var i = 0; i < 3; i++){                         

   alert(data[i].id);                          

  }                                                   

 });                                                         

 */                                                          

 returnMapData.getMapdata(function(data){                    

    for(var property in data){                        

     var bean = data[property];                            

     alert(bean.username);                                 

     alert(bean.password);

    }

 });

}

 

data = {                     

    "key1":{                 

        username:"user1",    

       password:"password2"  

    },                       

    "key2":{                 

       username:"user2",     

       password:" password2" 

    }                        

};

本项目聚焦于利用Tensorflow框架搭建完整的卷积神经网络(CNN)以实现文本分类任务。文本分类是自然语言处理的关键应用,目的是将文本自动归类到预定义的类别中。项目涵盖从数据预处理到模型训练、评估及应用的全流程。 README.md文件详细阐述了项目概览、安装步骤、运行指南和注意事项,包括环境搭建、代码运行说明以及项目目标和预期结果的介绍。 train.py是模型训练的核心脚本。在Tensorflow中,首先定义模型结构,涵盖CNN的卷积层、池化层和全连接层。接着,加载数据并将其转换为适合模型输入的格式,如词嵌入。之后,设置损失函数(如交叉熵)和优化器(如Adam),并配置训练循环,包括批次大小和训练步数等。训练过程中,模型通过调整权重来最小化损失函数。 text_cnn.py文件包含CNN模型的具体实现细节,涉及卷积层、池化层的构建以及与全连接层的结合,形成完整模型。此外,还可能包含模型初始化、编译(设定损失函数和评估指标)及模型保存功能。 eval.py是用于模型评估的脚本,主要在验证集或测试集上运行模型,计算性能指标,如准确率、精确率、召回率和F1分数,以评估模型在未见过的数据上的表现。 data_helpers.py负责数据预处理,包括分词、构建词汇表、将文本转换为词向量(如使用预训练的Word2Vec或GloVe向量),以及数据划分(训练集、验证集和测试集)。该文件还可能包含数据批处理功能,以提高模型训练效率。 data文件夹存储了用于训练和评估的影评数据集,包含正负面评论的标注数据。数据预处理对模型性能至关重要。本项目提供了一个完整的端到端示例,是深度学习文本分类初学者的优质学习资源。通过阅读代码,可掌握利用Tensorflow构建CNN处理文本数据的方法,以及模型管理和评估技巧。同时,项目展示了如何使用大型文本数据集进行训练,这对提升模型泛化能力极为重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值