当前位置:文档之家› 手把手教你创建axis_webservice

手把手教你创建axis_webservice

手把手教你创建axis_webservice
手把手教你创建axis_webservice

利用AXIS开发W ebservice(一) ——如何发布自己的webservice

先介绍下本人开发环境吧。JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜)+ Tomcat 5.0.28 + AXIS 1.4。AXIS 1.4包可以在https://www.doczj.com/doc/641398945.html,/axis/找到。假设所有的环境你已经搭好,并且AXIS包也已经下好了。OK,Here we go~

解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到%TOMCA T_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar 到%TOMCA T_HOME%\webapps\axis\WEB-INF\lib目录下。启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了。

PS:此处的%TOMCA T_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,J2EE 1.4库里就能找的到。

现在来说一下最关键的Webservice的发布。AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介绍。

1.即时发布JWS (Java Web Service) Files - Instant Deployment

即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是java web service的缩写)拷贝到%TOMCA T_HOME%\webapps\axis目录下即完成了所有的发布工作。AXIS的编译引擎会处理接下来的所有事情。下面是一段示例代码:

java 代码

public class HelloAXIS {

public String Hello(String name){

return "AXIS say hello to " + name;

}

}

把HelloAXIS.java 文件改成HelloAXIS.jws 然后拷贝到%TOMCA T_HOME%\webapps\axis目录下,启动Tomcat之后访问

http://localhost:8080/axis/HelloAXIS.jws 如果能看到Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。server端的发布已经完成了,接下来就是编写Client端测试代码了。

java 代码

package com.chnic.test;

import https://www.doczj.com/doc/641398945.html,.URL;

import https://www.doczj.com/doc/641398945.html,space.QName;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

public class Test {

public static void main(String[] args) throws Exception{

String targetEendPoint = "http://localhost:8080/axis/HelloAXIS.jws";

Service service = new Service();

Call call = (Call) service.createCall();

call.setOperationName(new QName(targetEendPoint, "Hello"));

call.setTargetEndpointAddress(new URL(targetEendPoint));

String result = (String) call.invoke(new Object[]{"Robert"});

System.out.println(result);

}

}

测试代码很简单,如果熟悉java反射机制的朋友不用两分钟就能看明白。运行后客户端控制台出现AXIS say hello Robert。测试成功。果然很简单吧。不过在这简单背后却是以牺牲灵活性为代价的。假如你现在手里只有.class 或者一个jar包,jws就不再能满足你的需求了,最要命的就是即时发布不支持带包的类,这点AXIS的用户手册上写的也很明白。

Important: JWS web services are intended for simple web services. Y ou cannot use packages in the pages, and as the code is compiled at run time you can not find out about errors until after deployment. Production quality web services should use Java classes with custom deployment.

2.定制发布Custom Deployment - Introducing WSDD

比起即时发布定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个WSDD(Web Service Deployment Descriptor)文件,这个东东类似与XML稍后会做出介绍。废话不多说,我们

来看代码:

java 代码

package com.chnic.webservice;

public class HelloWorld {

public HelloWorld(){

}

public String hello(String str){

return "Hello " + str;

}

public int add(int a, int b){

return a + b;

}

}

一个带包的很简单的类,在eclipse下编译后按照包名拷到%TOMCA T_HOME%\webapps\axis\WEB-INF\classes 目录下。以这个类为例,拷贝完之后这个HelloWorld.class的路径就是%TOMCA T_HOME%\webapps\axis\WEB-INF\classes\com\chnic\webservice。PS:如果嫌这样太麻烦,可以另外建一个Java Web工程用myeclipse的发布工具发布到Tomcat之后,整体一次性拷贝到websericve的工程中。

接下来就需要编写发布文件deploy.wsdd。到%TOMCA T_HOME%\webapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容:

xml 代码

xmlns:java="https://www.doczj.com/doc/641398945.html,/axis/wsdd/providers/java">

简单的介绍下各个节点的含义,"HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。这里一共有有4种类型,分别是:RPC, Document, Wrapped 和Message。有兴趣可以看下org.apache.axis.providers这个包和子包下面的类的API文档。之后的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的public方法,当然你也可以自己指定。

编写完配置发布文件之后,cmd打开windows的控制台,进入%TOMCA T_HOME%\webapps\axis\WEB-INF目录下键入如下命令

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

之后控制台返回Processing file deploy.wsdd 和Done processing 这两段话即说明发布成功。(此时会在同级目录生成一个server-config.wsdd文件)在这里的AdminClient是AXIS 提供的一个客户端管理工具。至于java.ext.dirs的含义可以去了解一下classloader和JVM类装载机制方面的知识,在这里就不多解释。还有一点要注意的是在发布的时候Tomcat服务必须处于启动状态,否则就会抛出一堆无法连接的异常信息。发布成功之后你可以通过访问http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。

客户端测试代码

String targetEendPoint = "http://localhost:8080/axis/services/HelloWorld";

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(targetEendPoint));

call.setOperationName(new QName(targetEendPoint, "hello"));

String result = (String) call.invoke(new Object[]{"Robert"});

System.out.println(result);

call.setOperationName(new QName(targetEendPoint, "add"));

Integer res = (Integer) call.invoke(new Object[]{new Integer(1), new Integer(2)});

System.out.println("The result is: " + res);

运行测试代码,控制台显示Hello Robert 和The result is: 3 这两句话,说明发布成功。仔细观察下发现其实除了那个targetEndpoint 之外,即时发布和定制发布的客户端调用代码基本上都是一样的。定制发布的URL可以在WSDL文件里找到。其实定制发布还有一些高级特性,这个就留到下一篇再说吧。

利用AXIS开发Webservice(二) ——WSDD的一些高级特性

1、取消发布一个webservice

开篇之前先把上篇的一个遗漏补充上,上篇只讲了怎么发布一个webservice,但是如何取消没有却没有提。其实取消一个已经发布的webservce也是非常简单的,我们就拿上篇的HelloWorld来做例子吧。

发布webservice的时候我们有一个deploy.wsdd文件,当然在取消发布的时候就会有一个undeploy.wsdd文件。这个文件的内容也很简单,xml的代码如下。

Xml代码

编写完这个xml文件之后,把它同样copy到%TOMCA T_HOM\webapps\axis\WEB-INF目录下,然后CMD打开控制台,在控制台输入一个我们很熟悉的命令

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd

运行之后得到如下结果说明取消发布成功

Processing file undeploy.wsdd

Done processing

2、WSDD的高级特性

说完取消发布之后就来说一下AXIS的一些高级特性,AXIS在编写deploy.wsdd这个文件时,每个节点下面会有这样一个子节点。

Xml代码

这个节点配置着你的service object也就是你webservice服务的那个object,在后面的value里可以有三个选项request, session, or application。熟悉Jsp、Servlet、或者EJB里的SessionBean的朋友应该能很快能明白这个三个配置选项的含义。

requst:这个选项会让AXIS为每一个SOAP的请求产生一个服务对象,可以想像如果这个webservice的对象足够复杂,而且SOAP的请求过多,这个选项是非常耗费服务器性能的。

session:如果选择了session,程序就会给每个调用这个webservice的客户端创造一个服务对象。

application:这个选项最彪悍,程序只会在内存里new出来一个服务对象,然后为所有webservice客户端服务。很显然这个选项不能储存客户端的一些个性化数据。所以在功能性上很多时候不能满足要求。

3、高级特性Handler

接下来说一下Axis的Handler和Chain机制,Handler和Chain是Axis引擎提供的一个很强大的工具。假如现在客户有这样一个需求,需要记录某一个webservice被调用的次数,这个时候如果在service object里去实现这个功能不仅麻烦,而且侵入了原有的程序也会对增加原有程序的不稳定性。有了Handler我们就能见easy的解决这个问题。我们先来编写handler 的代码。

Java代码

package com.chnic.handler;

import org.apache.axis.AxisFault;

import org.apache.axis.MessageContext;

import org.apache.axis.handlers.BasicHandler;

public class HelloWorldHandler extends BasicHandler{

private static final long serialV ersionUID = 1L;

public void invoke(MessageContext context) throws AxisFault {

String status = (String) this.getOption("status");

System.out.println("HelloWorldHandler's status is: " + status);

}

}

package com.chnic.handler;

import org.apache.axis.AxisFault;

import org.apache.axis.MessageContext;

import org.apache.axis.handlers.BasicHandler;

public class HelloWorldHandler extends BasicHandler{

private static final long serialV ersionUID = 1L;

public void invoke(MessageContext context) throws AxisFault {

String status = (String) this.getOption("status");

System.out.println("HelloWorldHandler's status is: " + status);

}

}

BasicHandler是一个抽象类,Axis提供了很多Handler的具体实现,Basic Handler只是其中最简单的一个。要实现一个自己的handler首先要从继承BasicHandler这个类开始并实现其中的invoke(MessageContext arg)这个方法。MessageContext可以看成是一个Axis的上下文,里面存储的是一些Axis和webservice的基本信息。想了解的朋友可以看一下Axis的API。编写完Handler代码之后我们连编写发布文件。

Xml代码

xmlns:java="https://www.doczj.com/doc/641398945.html,/axis/wsdd/providers/java">

发布代码中有这样的一句,细心的朋友一定会发现。

Xml代码

看完这句代码再对比一下Handler的实现代码中的一句,相信大多数人都能明白了。

Java代码

String status = (String) this.getOption("status");

String status = (String) this.getOption("status");Handler通过getOption(String)这个方法拿到了配置文件中我配置的属性值。而我们上述所做的所有工作对于原来的Webserivce来说都是透明的,不会对侵入原有的程序当中。一个Handler可以被多个service所使用,通过这个标签来引用到某一个service中,这里还要多提一句既然是一个requestFlow,这个当然可以加不只一个的Handler。接下来编写测试代码运行。在本地应用服务器上会打出如下语句:HelloWorldHandler's status is: session说明测试成功,而且handler 是配置在requestflow标签中所以这段代码会在service代码之前先执行。

4、高级特性Chain

介绍完了Handler再来介绍Chain。从Chain的字面意思就能猜到他实现的一连串Handler 的功能。假如某个service需要不止一个Handler,或者要根据Client的情况来选择需要那些Handler。特别是后一个需求,我们无法用一个或者几个Handler来解决,这个时候我们就需要来实现了。我们先再编写一个Handler,加上之前的那个Handler我们来组成一条锁链。

Java代码

package com.chnic.handler;

import org.apache.axis.AxisFault;

import org.apache.axis.MessageContext;

import org.apache.axis.handlers.BasicHandler;

public class MyHandler extends BasicHandler {

private static final long serialV ersionUID = 1L;

public void invoke(MessageContext context) throws AxisFault {

System.out.println("This is MyHandler..");

}

}

之后我们编写Chain的代码

Java代码

package com.chnic.chain;

import org.apache.axis.SimpleChain;

import com.chnic.handler.HelloWorldHandler;

import com.chnic.handler.MyHandler;

public class HelloWorldChain extends SimpleChain {

private static final long serialV ersionUID = 1L;

public HelloWorldChain(){

HelloWorldHandler hwh = new HelloWorldHandler();

MyHandler mh = new MyHandler();

this.addHandler(hwh);

this.addHandler(mh);

}

}

在Chain的构造函数中,把我要的两个Handler用addHandler()方法加载进去。之后我们来编写发布文件。元素有些许不同在这里有必要多句嘴。

元素中的子元素只允许是或者。后者也就是允许在“锁链”里再嵌套“锁链”,在这里就拿嵌套来举例,他同样有两种方式来实现。第一种是直接包含:

Xml代码

第二种是引用别的

Xml代码

因为我们这里的Handler并没有由BasicHandler来实现,而是由继承SimpleChain这个类来实现,严格意义上讲,SimpleChain也可以算是一个Handler,因为SimpleChain也是从BasicHandler继承而来,他同样实现了invoke()这个方法。下面回归正题,来看我们的发布代码。

Xml代码

xmlns:java="https://www.doczj.com/doc/641398945.html,/axis/wsdd/providers/java">

从新发布webservice之后,运行我们的测试代码。会发现在应用服务器的本地控制台上打出两句Handler要输出的语句,说明测试成功。而且控制台打出语句的顺序是和我们加载handler的顺序一样的。

除了之外,Axis还提供了与之相应的,用法和是requestflow 一样的,所不同的是一个在service执行之前一个是之后。可以加下面代码到发布文件中的元素下就可以实现responseflow的功能

Xml代码

最后简单提一下远程管理,也就是Remote Administration。要实现远程管理在发布文件的标签下加入下面一段语句就可以了。

Xml代码

不过远程管理会有安全方面的问题,所以不建议使用。

一些高级部分就先说到这里,还有一些比如RPC docuement Wrapped Message的区别和使,如何传递一个Javabean,还有一些配置方面的的问题就留到下节说吧。

利用AXIS开发W ebservice(三) ——如何传递javabean和你的对象

在第一篇介绍Axis的文章里,我们做了一个简单的webservice,我们client side传递了String 和int类型的数据给service object。Service处理之后返回处理结果给Client。对于大多数需求,那个demo显然已经足够应付了。但是如果client端需要传输一个对象给server,那么那个demo就显得力不从心了。Axis中提供了远程传输对象的方法,通过那些方法我们同样可以随心的传递自己的对象。

我们先从传递一个JavaBean开始,首先编写一个JavaBean。

Java代码

package com.chnic.bean;

public class OrderBean {

private String name;

private int age;

private String[] items;

private int[] price;

private boolean checked;

public OrderBean() {

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public boolean isChecked() {

return checked;

}

public void setChecked(boolean checked) {

this.checked = checked;

}

public String[] getItems() {

return items;

}

public void setItems(String[] items) {

this.items = items;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.doczj.com/doc/641398945.html, = name;

}

public int[] getPrice() {

return price;

}

public void setPrice(int[] price) {

this.price = price;

}

}

这个JavaBean的前4个属性都很清楚,要解释一下最后一个。因为这个JavaBean被传递到Service端处理之后要接着被传回,用来示例webservce传进和传出。这个变量用来区别传进和传出的差别。解释完我们来看下service

Java代码

package com.chnic.webservice;

import com.chnic.bean.OrderBean;

public class AnalyzeOrder {

public AnalyzeOrder(){

}

public OrderBean process(OrderBean order){

order.setChecked(true);

System.out.println("name: " + order.getName() + " age: " + order.getAge());

for(int i=0; i

System.out.println("Item " + (i+1) + order.getItems()[i] +

" and price is " + order.getPrice()[i]);

return order;

}

}

Service Object的代码很简单,就不解释了。惯例,我们来编写发布文件。

Xml代码

xmlns:java="https://www.doczj.com/doc/641398945.html,/axis/wsdd/providers/java">

languageSpecificType="java:com.chnic.bean.OrderBean"/>

唯一不同的就是多了这个节点。qname 表示XML 规范中定义的限定名称,他由名称空间URI、本地部分和前缀组成。除了本地部分其他都不是必须的,另外QName 是不可变的。xmlns后面的myNS是必须的。具体根据前面所指定的qname来决定。之后可以随意命名一个namespace。最后的languageSpecificType指定的是你传递的对象类型。第一个属性的本地部分和第二个节点你自定义的命名空间会组成一个新的QName,并将你要传输的对象mapping是上去。

发布这个webservice,编写测试代码

Java代码

String targetEendPoint = "http://localhost:8080/axis/services/CheckOrder";

OrderBean order = new OrderBean();

order.setName("Beckham");

order.setAge(32);

String [] items = new String[] { "Ipod", "ThinkPad" };

int [] price = new int [] { 999, 5000 };

order.setItems(items);

order.setPrice(price);

order.setChecked(false);

System.out.println(order.isChecked());

Service service = new Service();

Call call = (Call) service.createCall();

QName qn = new QName("urn:AnalyzeOrder", "Order" );

call.registerT ype Mapping(OrderBean.class, qn,

new org.apache.axis.encoding.ser.BeanSerializerFactory(OrderBean.class, qn),

new org.apache.axis.encoding.ser.BeanDeserializerFactory(OrderBean.class, qn));

call.setTargetEndpointAddress( new https://www.doczj.com/doc/641398945.html,.URL(targetEendPoint) );

call.setOperationName( new QName("CheckOrder", "process") );

call.addParameter( "arg1", qn, ParameterMode.IN );

call.setReturnClass(OrderBean.class);

OrderBean result = (OrderBean) call.invoke( new Object[] {order} );

System.out.println("Success...");

System.out.println(result.isChecked())

从控制台输出一些信息以便测试,里面大多代码都应该见过。new QName和之后的registerTypeMapping方法也是在实现我上面那段黑体字的内容。之后注册完参数和返回值类型运行。

会发现在tomcat控制台和本地控制台都会输出测试结果,值得注意的是checked这个属性在传入之前是false属性,传入之后我们改变了他的属性变为true。返回之后在本地控制台打印出来也为true。

事实上Axis除了可以传输JavaBean之外还可以传输一些自定义的类型。比如List、Map和时间日期类型。Axis也为他们提供了专门的SerializerFactory和DeserializerFactory。这些工厂类会产生串行化工具去序列化相应的对象。更多的Factory Object可以在org.apache.axis.encoding.ser下面找到。

对于自定义序列化,Axis也提供了相对性的配置节点。具体配置如下:

Xml代码

languageSpecificType="java:my.java.thingy"

serializer="my.java.Serializer"

deserializer="my.java.DeserializerFactory"

encodingStyle="https://www.doczj.com/doc/641398945.html,/soap/encoding/"/>

typeMapping的前三个属性和上面讲的beanMapping都一样。不一样的是后三个。serializer 指定的是串行化类,dserializer指定的是反串行化类。最后一个指定的编码方式。其实对于typeMapping来说beanMapping只不过是他的一个简化版而已。因为beanMapping的串行化和反串行化工厂类都是固定的,而编码方式也是固定的。

因为typemapping和beanMapping很相似,在这里就不再写demo了。有些人也许会问,既然能串行化对象那能不能“串行化”文件呢?

利用AXIS开发W ebservice(四) ——如何抛出自定义异常

上一篇介绍了如果在Server和Client端传递一个自己的对象。有些人也许会问传递异常行不行?答案是可以。只不过传递异常的配置要稍微复杂一些。空口无凭,我还是用点代码来说明。今天的例子稍微复杂点,用一下数据库(MySQL)。首先创建表和输入测试数据。

Sql代码

create table users(id integer primary key, name varchar(20) not null);

insert into users values(1, 'Lincoln'),(2, 'Michael'),(4, 'Mahone'),(6, 'Sara');

一个user表,4条记录。等会我们client段会发送一个SOAP request给server段,之后server 段返回客户要的数据,如果没有则抛出一个自定义异常。表建立完成之后来编写JavaBean。

Java代码

package com.chnic.bean;

public class UserBean implements java.io.Serializable{

private static final long serialV ersionUID = 1L;

private int id;

private String name;

public UserBean(){

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.doczj.com/doc/641398945.html, = name;

}

}

Bean有两个属性,Id和Name。client会根据ID来取要的Name。编写完Bean之后我们来

编写Customer Exception的代码。

Java代码

package com.chnic.exception;

import java.rmi.RemoteException;

public class NoSuchUserException extends RemoteException {

private String errorMessage = "No such user: ";

private int id;

private static final long serialV ersionUID = 1L;

public NoSuchUserException() {

}

public void printErrorMessage(){

System.out.println(errorMessage + id);

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

}

NoSuchUserException这个类会记录在数据库没有相应数据的ID的值,然后返回给Client。值得注意的是,因为这个是个远程异常。所以要继承RemoteException这个类。两个要transfer 的Bean完成之后。我们来编写Service Ojbect的代码。

Java代码

package com.chnic.webservice;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import https://www.doczj.com/doc/641398945.html,erBean;

import com.chnic.exception.NoSuchUserException;

import java.sql.DriverManager;

public class CheckUserInfo {

private String url = "jdbc:mysql://localhost:3306/test";

private String user = "root";

private String password = "root";

public CheckUserInfo(){

}

public Connection getConn(){

try {

Class.forName("com.mysql.jdbc.Driver");

return DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

public UserBean checkUser(int id) throws NoSuchUserException{

Connection conn = null;

try {

conn = this.getConn();

PreparedStatement statement =

conn.prepareStatement("select * from users where id = ?");

statement.setInt(1, id);

ResultSet rs = statement.executeQuery();

boolean flag = false;

UserBean user = null;

while(rs.next()){

flag = true;

user = new UserBean();

user.setId(id);

user.setName(rs.getString(2));

}

rs.close();

if(flag)

return user;

else{

NoSuchUserException userException = new NoSuchUserException();

userException.setId(id);

throw userException;

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

this.closeConn(conn);

}

return null;

}

public void closeConn(Connection conn){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

因为是Demo代码,代码写的比较粗糙,反正就是为了个演示。大家能看出来效果就好了。代码很简单,接收到一个id,然后在数据库里做匹配。如果找到匹配的了返回那个userbean,如果没找到就throw一个Exception出去。在这里多嘴一句。传递的Bean赋值的时候一定要用setXXX方法,不能用构造函数传递,否则传递过去之后属性值会丢失。你编写的那个Bean一定要严格遵循JavaBean规范。

之后我们来看WSDD发布文件。比起之前我们看到的WSDD文件,这次的稍微有点点复杂。

Xml代码

xmlns:java="https://www.doczj.com/doc/641398945.html,/axis/wsdd/providers/java">

http://faults.samples

qname="operNS:checkUser"

xmlns:operNS="getSingleUser"

returnQName="getUserReturn"

returnType="rtns:User"

xmlns:rtns="http://faults.samples" >

xmlns:tns="https://www.doczj.com/doc/641398945.html,/2001/XMLSchema"/>

qname="fns:fault"

xmlns:fns="http://faults.samples"

class="samples.faults.NoSuchEmployeeFault"

type="tns:NoSuchUserFault"

xmlns:tns="http://faults.samples"/>

xmlns:myns="urn:CustomerFault"

type="java:com.chnic.exception.NoSuchUserException"

serializer="org.apache.axis.encoding.ser.BeanSer ializerFactory"

deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

encodingStyle="https://www.doczj.com/doc/641398945.html,/soap/encoding/"/>

xmlns:myns="urn:CustomerBean"

type="java:https://www.doczj.com/doc/641398945.html,erBean"

serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

encodingStyle="https://www.doczj.com/doc/641398945.html,/soap/encoding/"/>

首先不同的是多了个命名空间也就是namespace节点,等会测试代码中会看到用途。除了namespace之外还有operation这个节点和里面的parameter和fault子节点。先来介绍operation 这个节点的属性。

name:操作名称或者方法名称,这个值会和你server发布的相关方法名匹配,所以要和方法名相同。

qname:针对这个operation的限定名。

xmlns:针对这个qname的命名空间也就是namespace。(不明白的可以看上一篇博文)returnQName:这个元素节点所对应的方法返回出来对象的Qname。

returnType:返回类型,注意和下面的typemapping的qname比较。

parameter节点是这个operation指代的方法的参数,fault节点代表要这个方法要抛出的异常。异常也需要被mapping。下面的typemapping做的也是这样的事情。这两个元素的节点的属性和operation都是类似,对以一下大概就知道什么意思了。在这里也不多解释了。现在来看测试代码。

Java代码

package com.chnic.test;

import java.rmi.RemoteException;

import https://www.doczj.com/doc/641398945.html,space.QName;

import javax.xml.rpc.Call;

import javax.xml.rpc.Service;

import javax.xml.rpc.ServiceException;

import javax.xml.rpc.ServiceFactory;

import javax.xml.rpc.encoding.TypeMapping;

import javax.xml.rpc.encoding.TypeMappingRegistry;

import org.apache.axis.encoding.ser.BeanDeserializerFactory;

import org.apache.axis.encoding.ser.BeanSerializerFactory;

import https://www.doczj.com/doc/641398945.html,erBean;

import com.chnic.exception.NoSuchUserException;

public class TestException {

public static void main(String[] args){

String uri = "http://faults.samples";

String serviceName = "EmployeeInfoService";

ServiceFactory serviceFactory;

String url = "http://localhost:8080/axis/services/AxisExceptionTest";

try {

serviceFactory = ServiceFactory.newInstance();

QName serQ = new QName(uri, serviceName);

Service service = serviceFactory.createService(serQ);

EXCEL之手把手教你如何做合同明细表

EXCEL之手把手教你如何做合同明细表摘要:EXCEL 合同明细表目录链接 目录 1. EXCEL合同台账的管理作用 2. 合同台账框架 2.1 目录表 2.2 单个合同明细表 2.3 空模板 2.4 下拉箭头清单 3. 合同台账中使用的EXCEL的功能及作用 4. 操作流程 4.1空模板页面和下拉菜单制作 4.2新建合同文档 4.3 合同执行阶段数据录入 4.4 合同执行完毕

以下为正文: 1. EXCEL合同台账的管理作用 1.1 统一企业的EXCEL合同台账格式,方便录入各项合同数据;1.2 建立合同目录清单,分类罗列,执行状态一目了然; 1.3 动态登记合同执行过程中的每一个数据,促进合同执行和合同数据高度统一; 1.4 合同执行完毕后,打印作为合同封面留底,便于查看或审核书面合同执行情况; 1.5 本文只针对企业的采购合同做管理台账,如有需要,可根据此模板制作企业的销售合同台账。 2. 合同台账框架 2.1 目录表 2.1.1 作用:合同的清单,并可实现分类呈现和汇总; 2.1.2 格式如下:

2.2 单个合同明细表: 2.2.1 作用:合同的清单,记录合同的各项静态信息,在执行过程中,记录每一条合同的动态信息,; 2.2.2 格式如下:

2.3 空模板: 2.3.1 作用:新增合同时,以此合同为空白模板复制建档; 2.3.2 格式如下:

2.4 下拉箭头清单 2.4.1 作用:作为部门、费用类别、合同类别下拉清单设置用途; 2.4.2 格式如下:

3. 合同台账中使用的EXCEL的功能及作用 3.1 超链接:用于文档页面间转换,便于目录和单个合同股明细来回的切换; 3.2 移动或复制:用于文档复制,新建合同清单,复制空模板,建立一个新的模板格式的页面: 3.3 定义名称:设置下拉菜单的清单时,可以跨页面使用; 3.4 if函数:用于判断合同执行的状态; 3.5 查找替换:用于设置跨页面取数公式时,替换公式中的一部分数据。 4. 操作流程

手把手教你结构设计(入门到熟练)

手把手教你结构设计(入门到熟练) 1.结构设计的过程(了解) 本文是送给刚接触结构设计及希望从事结构设计的新手的,其目的是使新手们对结构设计的过程以及结构设计所包括的内容有一个大致的了解,请前辈们不要见笑了,新人们有什么问题也可以在贴中提出来,大家共同讨论,共同进步。 1,看懂建筑图 结构设计,就是对建筑物的结构构造进行设计,首先当然要有建筑施工图,还要能真正看懂建筑施工图,了解建筑师的设计意图以及建筑各部分的功能及做法,建筑物是一个复杂物体,所涉及的面也很广,所以在看建筑图的同时,作为一个结构师,需要和建筑,水电,暖通空调,勘察等各专业进行咨询了解各专业的各项指标。在看懂建筑图后,作为一个结构师,这个时候心里应该对整个结构的选型及基本框架有了一个大致的思路了. 2,建模(以框架结构为例)(关键) 当结构师对整个建筑有了一定的了解后,可以考虑建模了,建模就是利用软件,把心中对建筑物的构思在电脑上再现出来,然后再利用软件的计算功能进行适当的调整,使之符合现行规范以及满足各方面的需要.现在进行结构设计的软件很多,常用的有PKPM,广厦,TBSA等,大致都差不多。这里不对软件的具体操作做过多的描述,有兴趣的可以看看,每个软件的操作说明书(好厚好厚的,买起来会破产)。每个软件都差不多,首先要建轴网,这个简单,反正建筑已经把轴网定好了,输进去就行了,然后就是定柱截面及布置柱子。柱截面的大小的确定需要一定的经验,作为新手,刚开始无法确定也没什么,随便定一个,慢慢再调整也行。柱子布置也需要结构师对整个建筑的受力合理性有一定的结构理念,柱子布置的合理性对整个建筑的安全与否以及造价的高低起决定性作用...不过建筑师在建筑图中基本已经布好了柱网,作为结构师只需要对布好的柱网进行研究其是否合理.适当的时候需要建议建筑更改柱网.当布好了柱网以后就是梁截面以及主次梁的布置.梁截面相对容易确定一点,主梁按1/8~1/12跨度考虑,次梁可以相对取大一点主次梁的高度要有一定的差别,这个规范上都有要求。而主次梁的布置就是一门学问,这也是一个涉及安全及造价的一个大的方面.总的原则的要求传力明确,次梁传到主梁,主梁传到柱.力求使各部分受力均匀。还有,根据建筑物各部分功能的不同,考虑梁布置及梁高的确定(比如住宅,在房中间做一道梁,本来层就只有3米,一道梁去掉几十公分,那业主不骂人才怪...)。梁布完后,基本上板也就被划分出来了,当然悬挑板什么的现在还没有,需要以后再加上...,梁板柱布置完后就要输入基本的参数啦,比如混凝土强度啊,每一标准层的层高啊,板厚啊,保护层啊,这个每个软件设置的都不同,但输入原则是严格按规范执行.当整个三维线框构架完成,就需要加入荷载及设置各种参数了,比如板厚啊,板的受力方式啊,悬挑板的位置及荷载啊什么的,这时候模形也可以讲基本完成了,生成三维线框看看效果吧,可以很形象的表现出原来在结构师脑中那个虚构的框架. 2.计算 计算过程就是软件对结构师所建模型进行导荷及配筋的过程,在计算的时候我们需要根据实际情况调整软件的各种参数,以符合实际情况及安全保证,如果先前所建模型不满足要求,就可以通过计算出的各种图形看出,结构师可以通过对计算出的受力图,内力图,弯矩图等等对电算结果进行分析,找出模型中的不足并加以调整,反复至电算结果满足要求为止,这时模型也就完全的确定了.然后再根据电算结果生成施工图,导出到CAD中修改就行了,通常电算的只是上部结构,也就是梁板柱的施工图,基础通常需要手算,手工画图,现在通常采用平面法出图了,也大大简化了图纸有利于施工. 3.绘图 当然,软件导出的图纸是不能够指导施工的,需要结构师根据现行制图标准进行修改,这就看每个人的绘图功底了,施工图是工程师的语言,要想让别人了解自己的设计,就需要更为详细的说明,出图前结构师要确定,别人根据施工图能够完整的将整个建筑物再现于实际中,这是个复杂的过程,需要仔细再仔细,认真再认真。结构师在绘图时还需要针对电算的配筋及截面大小进一步的确定,适当加强薄弱环节,使施工图更符合实际情况,毕竟模型不能完完全全与实际相符.最后还需要根据现行各种规范对施工图的每一个细节进行核对,宗旨就是完全符合规范,结构设计本就是一个规范化的事情.我们的设计依据就是那几十本规范,如果施工图中有不符合规范要求的地方,那发生事故,设计者要负完全责任的......总的来讲,结构施工图包括设计总说明,基础平面布置及基础大样图,如果是桩基础就还有桩位图,柱网布置及柱平面法大样图,每层的梁平法配筋图,每层板配筋图,层面梁板的配筋图,楼梯大样图等,其中根据建筑复杂程度,有几个到几十个结点大样图. 4.校对审核出图 当然,一个人做如此复杂的事情往往还是会出错,也对安全不利,所以结构师在完成施工图后,需要一个校对人对整个施工图进行仔细的校对工作,校对通常比较仔细资格也比较老,水平也比较高,设计中的问题多是校对发现的,校对出了问题后返回设计者修改。修改完毕交总工审

手把手教你画产品PROE

第一章;消失面 前言]:构建消失面的方法有很多种,总结说来有以下几种;拆面法这是很通用的一种方法,还有象冰大的曲面折弯法,雪大的实体偏置法等等,原理都很简单,就是在原来的面上再相切剥离一个面出来。上面几种论坛有很多教程了,今天我再介绍一种,也很通用;拓展思路,不局限于一种方法,其实每种方法,都有每种方法的优势和弱点,利用EVALGRAPH函数方法来构建消渐面,什么意思呢?也就是充分利用GRAPH这个图形变量。 [内容]:下面通过一个构建实例,来说明我的思路。为了方便,我们就拿SNOWING版大的椭圆球渐消为例。实际上我也就是拿这个例子再深入点探讨,以帮助大家拓展思路,这个方法的通用性也是很强的。 1、首先我们接着SNOWING版大的OFFSET后往下看,重点在于这个V型曲线的求取。我的方法是采取先求交线再做边界曲面的办法,这样我们可以准确的控制,渐消的分离面是从小到大按照图形变量来控制的。 2、下面我们重点再于求得这个变化的渐消线。当然我的方法也很简单,就是能过VSS和GRAPH 变量来控制。 首先我们做出如下图的图形变量,至于GRAPH的用法,新手可参阅本坛中的相关教程。(点击进入基础教程)

控制图形GRAPH曲线已经完成,下面我们做VSS可变扫描,其实我想求的就是这个直线到轨迹点的偏距按照图形要求去变化的轨迹。

3、下面就很简单了,我们求得的扫描面与OFFSET的斜面相交求得一个交线,这个就是渐变的渐失线。

4、最后就是收尾工作了,我们将通过这个交线与消失面的起始线做BOUNDRY边界曲面即可。然后控制其起始线为相切属性,在这里我们只能做到相切G1连续,在CA TIA中的Fill命令,可以控制这个边界达到G2曲率连续。

怎么制作个人简历表格

怎么制作个人简历表格 篇一:手把手教您如何用word做个人简历 手把手教您用word修改、制作一个完整的个人简历 如果您自己不会设计模板,您可以自己到网上下载一个模板,但是一般情况下这个模板都不会太令人满意,也许因为内容太少,也许因为封面页不够清新。无论怎样,您只需要选择一个您喜欢的样式就好,然后本文章会教您如何根据这个样式将个人简历变成世界上独一无二的简历。如果您自己心中已经设想了一个漂亮的模板,但是对于某些word的技巧尚不能熟练掌握,那么这篇文章也可以帮助您。 现在,我以车辆工程专业为例,模拟一个学生制作个人简历的过程。 一、下载模板 注意问题:根据自己的专业性质选择适合的模板,一般都不能太花哨,此时您无需在意简历里面的内容是否与你想要填写的一致,也无需在意添加照片的位置是否刚好是一寸,也无需在意模板的封面页是不是太丑。 假如您心中的模板(以下称其为黑简历)应该包括以下内容: 但是您下载的中意的模板(以下称其为蓝简历)却是这样的: 所以您需要修改的内容包括:1、将蓝简历中基本信息对应的表格进行调整,并且加入放照片的框框 2、将蓝简历中后面每一个表格的标题更改成您希望的名称

注意:更改表格行列数、添加文字不难,但是添加之后表格会跳行,会出现表格之间间距不同导致不美观的问题,所以您必须合理安排每个表格的大小以及表格内文字的多少,使同一个表格尽量在一页里面,必要时交换两个表格的位置。二、删添模板内容 1、先不管放照片的地方。因为黑简历中个人信息有10项,所以我们先将蓝简历的基本信息表格制作成5行4列的样式,也就是删除后四行。 蓝简历变为: ()按住玫红框框里的标志,改变表格长宽,使其保持原来的长度,否则后面的表格会往上移,不美观。 现在再解决照片的问题,首先要添加列,但是如果您现在右击表格→插入→列(在右侧),您会发现表格变得很乱,并且添加的不是一列而是两列,原因是该表格最顶端还有一行(上图黑框区域所圈),这一行在您看来是为了美观,但它却有四列,且与下面没有对齐,导致添加列会出现异常,所以,建议删除该行,以后再添加。删除该行后再添加列,基本信息表格变为: 点击表格工具→合并单元格 现在存放照片的框框已经有了,但问题是照片不是刚好能放进去,如果您先添加图片再来调整框框的大小,您会发现这样行不通,因为图片无法任意移动。解决办法是:添加一个一寸大小的矩形形状,再将照片填充进去,最后根据装有照片的矩形的大小,来调整框框的大小,具体步骤:

手把手教你学FPGA 设计思想篇

泽屹电子 手把手教你学FPGA 设计思想篇 阿东团队编著

手把手教你学FPGA 设计思想篇

目录 写在前面...................................................................................................................................... - 4 - 1 什么是设计思想.................................................................................................................... - 6 - 2 概述........................................................................................................................................ - 6 - 3 代码简单化............................................................................................................................ - 6 - 4 注释层次化............................................................................................................................ - 7 - 5 交互界面清晰化.................................................................................................................... - 7 - 6 模块划分最优化.................................................................................................................... - 7 - 7 代码工具化............................................................................................................................ - 8 - 8 方案精细化............................................................................................................................ - 8 - 9 资源合理化............................................................................................................................ - 9 - 10 时序流水化.......................................................................................................................... - 9 - 11 资源优化方法.................................................................................................................... - 10 - 12 代码自检............................................................................................................................ - 10 - 13 通用电路BB化.................................................................................................................. - 10 -

(完整版)SketchUp草图大师最全教程

SketchUp?草图大师 1、设计相关软件分类与分析 目前在设计行业普遍应用的CAD软件很多,主要有以下几种类型: 第一种是AUTOCAD,及以其为平台编写的众多的专业软件。这种类型的特点是依赖于AUTOCAD本身的能力,而AUTOCAD由于其历史很长,为了照顾大量老用户的工作习惯,很难对其内核进行彻底的改造,只能进行缝缝补补的改进。因此,AUTOCAD固有的建模能力弱的特点和坐标系统不灵活的问题,越来越成为设计师与计算机进行实时交流的瓶颈。即使是专门编写的专业软件也大都着重于平、立、剖面图纸的绘制,对设计师在构思阶段灵活建模的需要基本难以满足。 第二种是3DSMAX、MAYA、SOFTIMAGE等等具备多种建模能力及渲染能力的软件。这种类型软件的特点是虽然自身相对完善,但是其目标是“无所不能”和“尽量逼真”,因此其重点实际上并没有放到设计的过程上。即使是3DSVIZ 这种号称是为设计师服务的软件,其实也是3DSMAX的简化版本而已,本质上都没有对设计过程进行重视。 第三种是LIGHTSCAPE、MENTALRAY等等纯粹的渲染器,其重点是如何把其它软件建好的模型渲染得更加接近现实,当然就更不是关注设计过程的软件了。 第四种是RIHNO这类软件,不具备逼真级别的渲染能力或者渲染能力很弱,其主要重点就是建模,尤其是复杂的模型。但是由于其面向的目标是工业产品造型设计,所以很不适合建筑设计师、室内设计师使用。 目前在建筑设计、室内设计领域急需一种直接面向设计过程的专业软件。什么是设计过程呢?目前多数设计师无法直接在电脑里进行构思并及时与业主交流,只好以手绘草图为主,因为几乎所有软件的建模速度都跟不上设计师的思路。目前比较流行的工作模式是:设计师构思—勾画草图—向制作人员交待—建模人员建模—渲染人员渲染—设计师提出修改意见—修改—修改—最终出图,由于设计师能够直接控制的环节太少,必然会影响工作的准确性和效率。在这种情况下,我们欣喜地发现了直接面向设计过程的SKETCHUP。 2、软件公司简介 AtlastSoftware公司是美国著名的建筑设计软件开发商,公司最新推出的SketchUp建筑草图设计工具是一套令人耳目一新的设计工具,它给建筑师带来边构思边表现的体验,产品打破建筑师设计思想表现的束缚,快速形成建筑草图,创作建筑方案。SketchUp被建筑师称为最优秀的建筑草图工具,是建筑创作上的一大革命。 SketchUp是相当简便易学的强大工具,一些不熟悉电脑的建筑师可以很快的掌握它,它融合了铅笔画的优美与自然笔触,可以迅速地建构、显示、编辑三维建筑模型,同时可以导出透视图、DWG或DXF格式的2D向量文件等尺寸正确的平面图形。这是一套注重设计摸索过程的软件,世界上所有具规模的AEC(建筑工程)企业或大学几乎都已采用。建筑师在方案创作中使用CAD繁重的工作量可以被SketchUp的简洁、灵活与功能强大所代替,她带给建筑师的是一个专业的草图绘制工具,让建筑师更直接更方便的与业主和甲方交流,这些特性同样也适用于装潢设计师和户型设计师。 SketchUp是一套直接面向设计方案创作过程而不只是面向渲染成品或施工图纸的设计工具,其创作过程不仅能够充分表达设计师的思想而且完全满足与客户即时交流的需要,与设计师用手工绘制构思草图的过程很相似,同时其成品导入其它着色、后期、渲染软件可以继续形成照片级的商业效果图。是目前市面上为数不多的直接面向设计过程的设计工具,它使得设计师可以直接在电脑上进行十分直观的构思,随着构思的不断清晰,细节不断增加,最终形成的模型可以直接交给其它具备高级渲染能力的软件进行最终渲染。这样,设计师可以最大限度地减少机械重复劳动和控制设计成果的准确性。 3、软件特色 1、直接面向设计过程,使得设计师可以直接在电脑上进行十分直观的构思,随着构思的不断清晰,细节不断增加。这样,设计师可以最大限度地控制设计成果的准确性。 2、界面简洁,易学易用,命令极少,完全避免了像其它设计软件的复杂性。 3、直接针对建筑设计和室内设计,尤其是建筑设计,设计过程的任何阶段都可以作为直观的三维成品,甚至可以模拟手绘草图的效果,完全解决了及时与业主交流的问题。 4、在软件内可以为表面赋予材质、贴图,并且有2D、3D配景形成的图面效果类似于钢笔淡彩,使得设计过程的交流完全可行。 5、可以惊人方便地生成任何方向的剖面并可以形成可供演示的剖面动画。 6、准确定位的阴影。可以设定建筑所在的城市、时间,并可以实时分析阴影,形成阴影的演示动画。 4、受众分析 1、建筑和室内设计师。主要针对方案设计师,尤其对不熟悉电脑的设计师、不懂英文的设计师、对做照片级效果图制作师没有兴趣的设计师有更加重要的意义。

手把手教你设计最佳的移动支付流程新

左边是是由Moby设计的响应式移动支付流程,他减少了不必要的信息只保留了必要的信息。成功的把整个支付流程聚合到了一个页面。 右边是kayjeweler把一个简单的体验变得非常繁琐。总共有三页,展示了很多不必要的信息,例如“晚上电话”和“手机号码”两个没有用的信息,把地址栏分成了三栏(而不是只有一个邮政编码栏),还需要用户重复输入email地址。 2、允许以访客身份结账 提供访客身份支付在媒介中应该是一个标准的做法(尽管24%的电子商务网站不会这样做),尤其在移动端。统计数据显示,如果用户必须去建立一个账户并确认,他们可能不会完成订单,这有时 候还是非常令人震惊的。据报道,一个商家删除了“注册”按钮后,看到了销售额3亿美元的飞跃。

伯顿开始对结帐过程对冲赌注,为用户提供三个选项:“登录”,“创建帐户”或“访客结帐。” 3、利用移动用户界面元素 Fandango有一个流畅的手机支付体验。其中很大一个原因在于它善于利用媒介的优势,更多使用触控设备,用户使用起来比打字更容易。

Fandango的桌面端UI和移动端UI Fandango的桌面版UI(左边),提供给用户使用一个典型的下拉菜单选择数量。在移动UI( 右边),则提供他们使用的的增量选择器(也有输入选项),更快速的选择数量。 4、消除干扰,而不是内容 一旦用户到达了支付的页面,他们显然已经有意愿购买这个产品了。这个时候,该网站已切换从一个销售人员转变成一个订单执行中心。由此,支付的页面应当去掉影响用户注意力的多余信息。 当你在亚马逊购物时会注意到封闭的支付策略,页面去除了标准的页头,包括可能推动用户去其他地方的菜单链接和搜索栏,支付页面在移动端可以做的更加简单。 用户一旦来到 dillard支付页面,, 他们唯一的逃生舱就是左上角的logo。

手把手教你绘制施工工艺计划流程图

手把手教你绘制施工工艺流程图 在标书编制或者施工方案编写工作中,我们常常会需要绘制施工工艺流程图。假如使用比较经典的流程图绘制工具,比如Visio,可能会觉得比较苦恼,而且也不容易与Word文档一起排版。这时你可能会采纳Word自带的流程图绘图工具来绘制流程图。然而,Word的早期版本,即使是Word2000在流程图的绘制,尤其是修改方面差不多上特不苦恼的。我们常常需要在线条的对准等细节问题上耗费大量的时刻。在网上看到专门多网友上传的流程图不是专门规范,要紧反应在以下几方面: ●不符合工艺的实际流程。 ●逻辑关系混乱,不是逻辑关系不全确实是逻辑关系错误。 ●专门多网友绘制流程图使用的是文本框加箭头的方式绘制,在排 版上不美观,文本框大小不一,不整齐。 那么有没有更好的方法使画出来的工艺流程图既美观又快捷呢?有,在Office XP以上的版本在流程图的绘制方面引入了Visio的专

门多绘图工具,比如连接符。这时的流程图的绘制比往常方便了许多,也容易了许多。那个地点,就详细介绍一下使用Word2003绘制流程图的方法。 1、首先在“绘图”工具栏上,单击“自选图形”,指向“流程图”,再单击所需的形状。 注:流程图中的各种形状要紧程序编程流程图的形状,多数形状关于我们工程上的工艺流程图用处不是专门大,概括起来,可用的就四种,分不是“过程”、“决策”、“终止”、“预备”四种。 2、单击要绘制流程图的位置。现在你会发觉,在页面上出现了如下图所示的虚框。这是什么?往常的版本看起来没这东东啊。是,这是

Word2003新增功能之一的绘图画布。 绘图画布是在创建图形对象(例如自选图形和文本框)时产生的。它是一个区域,可在该区域上绘制多个形状。因为形状包含在绘图画布内,因此它们可作为一个单元移动和调整大小。明白吧,那个绘图画布可关心您排列并移动多个图形,当图形对象包括几个图形时那个功能会专门有关心。还记得往常要在Word中排列、移动一组图形的苦恼吗?有了绘图画布,这些苦恼就不再困扰你了。 绘图画布还在图形和文档的其他部分之间提供一条类似框架的边界。在默认情况下,绘图画布没有背景或边框,然而如同处理图形对象一样,能够对绘图画布应用格式。 3、在绘图画布上插入你选择的那个图形。就像如此,插入一个凌形。

我是如何做手把手教你绩效面谈

绩效面谈如何不再难谈 刘命题 通过绩效面谈,只做考评而不将结果反馈给被评估者,考评就失去了它的激励、奖惩和培训功能,反馈的主要方式就是绩效面谈。让被评估者了解自身绩效,强化优势,改进不足,同时将企业的期望、目标和价值观一起传递,形成价值创造的传导和放大机制,促进企业的持久发展。 绩效面谈为何难谈 但事实上,绩效面谈往往成了主管和员工都颇为头疼的一件事。由于绩效面谈主要是上级考评谈论下级在绩效上的缺陷,而面谈结果又与随后的绩效奖金、等级评定有联系,一旦要面对面地探讨如此敏感和令人尴尬的问题,给双方带来的可能是紧张乃至人际冲突!正因为如此,绩效面谈常常是比较难谈的,难谈主要体现在以下几个方面: 一、面谈容易起争执,双方都想回避 绩效面谈中经常出现情况是双方容易起争执,一个重要原因是许多企业的考核标准,本身就定的比较模糊。有一些企业更是一张考核表考核所有的员工,没有根据工作的具体特点有针对性的考核。评判标准的弹性较大,这样往往导致上下级对考评标准和结果认知上存在偏差,公说公有理,婆说婆有理,甚至可能形成对峙和僵局。面谈不仅解决不了问题,反而对今后双方的工作带来麻烦,面谈还不如不谈,那样反而相安无事。这是双方都想回避面谈的原因。 二、员工抵制面谈,主管感觉很费劲 许多员工往往对面谈采取排斥态度和抵触情绪,认为绩效考核是走形式,没有用处,是为了制造人员之间的差距,变相扣工资,而且许多员工在面谈时害怕因吐露实情而遭到上级的报复和惩罚。因此,面谈过程中经常出现的情况是:要麽员工对绩效考核发牢骚,夸大自己的优势,弱化自己的不足。要麽是保持沉默,难以吐真言,主管说什麽就是什麽。这样虽经过面谈,主管对下属的问题和想法还是不了解,主管也感觉面谈费劲。 三、面谈成了批斗会、和稀泥,员工不满意 面谈时一些主管喜欢扮演审判官的角色,倾向于批评下属的不足,绩效面谈往往演变成了批评会、批斗会,绩效面谈成了员工的鬼门关,员工慑于主管的权威,口服心不服。再者面谈时主管往往包办谈话,下属只是听众的角色,很少有发表意见的机会。这样造成员工对面谈发憷。 另外就是主管的老好人倾向,主管往往怕得罪人,打分非常宽松,

手把手教你天线设计——用MATLAB仿真天线方向图

手把手教你天线设计—— 用MATLAB仿真天线方向图 吴正琳 天线是一种变换器,它把传输线上传播的导行波,变换成在无界媒介(通常是自由空间)中传播的电磁波,或者进行相反的变换。在无线电设备中用来发射或接收电磁波的部件。无线电通信、广播、电视、雷达、导航、电子对抗、遥感、射电天文等工程系统,凡是利用电磁波来传递信息的,都依靠天线来进行工作。此外,在用电磁波传送能量方面,非信号的能量辐射也需要天线。一般天线都具有可逆性,即同一副天线既可用作发射天线,也可用作接收天线。同一天线作为发射或接收的基本特性参数是相同的。这就是天线的互易定理。天线的基本单元就是单元天线。 1、单元天线 对称振子是一种经典的、迄今为止使用最广泛的天线,单个半波对称振子可简单地单独立地使用或用作为抛物面天线的馈源,也可采用多个半波对称振子组成天线阵。两臂长度相等的振子叫做对称振子。每臂长度为四分之一波长、全长为二分之一波长的振子,称半波对称振子。 对称振子是一种经典的、迄今为止使用最广泛的天线,单个半波对称振子可简单地单独立地使用或用作为抛物面天线的馈源,也可采用多个半波对称振子组成天线阵。两臂长度相等的振子叫做对称振子。每臂长度为四分之一波长、全长为二分之一波长的振子,称半波对称振子。

1.1用MATLAB画半波振子天线方向图 主要是说明一下以下几点: 1、在Matlab中的极坐标画图的方法: polar(theta,rho,LineSpec); theta:极坐标坐标系0-2*pi rho:满足极坐标的方程 LineSpec:画出线的颜色 2、在方向图的过程中如果rho不用abs(f),在polar中只能画出正值。也就是说这时的方向图只剩下一半。 3、半波振子天线方向图归一化方程: Matlab程序: clear all lam=1000;%波长 k=2*pi./lam;

知识:手把手教你计算光电参数,设计高光效产品

知识:手把手教你计算光电参数,设计高光效产品 作为一个光学设计师,在工作中经常遇到关于光电参数计算的问题,以前100lm/W灯管就是好产品,但随着LED的发展,要求也水涨船高,现在很多工程案例为了节能,光效从120涨到150、甚至180lm/W,让人非常头疼。 下面结合实例,谈一谈怎么设计一款光电满足要求的灯具。 标称值一般指产品稳定后的测试数据。 你首先必须知道灯具测试的标准,大部分灯具可以直接通过积分球完成光电测试,依据IESLM79提供的方法,需要待灯具稳定后来测试,至于一些参数虚标的产品可以无视。

图1.IES LM79中对灯具稳定的要求 为什么一定是稳定后的数据,大部分LED产品从瞬态到稳态都有一个衰减,而这些衰减很大,不能够忽视。 通过测试这些衰减大小,可以等到一个相对的热衰减系数,可以参看红字部分。 表2市场上8-9W球泡灯的测试参数 LED灯珠选型与测试 设计的时候,首先是LED选型,LED规格书好多页,让你眼花缭乱。主要有额定功率、光通量、电压、色温、显色指数、色容差等等。如果继续深究下去,支架有ppa、pct、emc 几种,芯片尺寸有好多种,荧光粉、硅胶、金线、支架金属都有很大的猫腻,这些对光源寿命都有着很大影响。 对LED而言,最重要的就是额定电流下光通量,比如现在最常用2835颗粒,额定60mA 的光通量24-26lm。那是不是我将100pcs该LED焊在灯条上,60mA测试时光通量就是240-260lm?

答案是否定的,以下是一些误差的来源,最后测试报告一定是以自己仪器测试为准,所以就需要弄清楚这些系数。 表3 一些误差汇总 然而这些系数有时候推算比较麻烦,也少不了很多一对一测试。所以我的思路是,直接将厂商的标准LED灯珠焊在灯板上,用大积分球测试,直流供电,测试多个电流下的数据。 如果你设计一款常规的产品,对光效没有要求,额定电流下测试就可以了。但如果你需要更高光效的产品,那些方法就不适用了,要么选择更亮的灯珠,要么就是降低电流使用,更多的时候两者需要结合来使用。 表4 一款颗粒的测试数据 LED灯珠数量计算 做好以上一些工作后了,你还缺少两个重要的参数,一个是灯具电源转换效率,另外一个就是灯具的光学效率,可以通过如下公式计算,有时候面对全新的灯具无从入手,可以根据经验进行一些估算。

手把手教你设计限制性股票和股票期权方案

手把手教你设计限制性股票和股票期权方案2018-08-08 11:38 限制性股票和股票期权是国内上市公司应用最广泛的两种股权激励方式,也是有明确政策规范的两种股权激励方式,本文将讲述如何设计限制性股票和股票期权方案。 一、基本原则 由于非上市公司并无股票,因此上市公司和非上市公司在方案的设计和应用层面会有如下不同之处: 二、政策要求 上市公司在设计限制性股票和股票期权计划的时候,会有明确的政策规范,最主要的规范如下表:

上表中,虽然对限制性股票和股票期权的授予价和行权价有明确规定,但并不绝对,只要给出证监会充分合理解释也能获批。例如,2017年苏泊尔限制性股票激励案例,股票来源是通过二级市场回购,公告草案前一日收盘价是37.07元/股,但是公司授予价格是1元/股,远远低于规定的价格,公司在公告中披露,该定价目的为考虑激励对象整体薪酬水平的竞争力。 非上市公司在方案设计中,可以不受上述政策约束,根据公司实际情况自行设计。

三、方案设计 股权激励方案设计需遵守四步法原则,方能保证方案的切实有效,四步分别是激励分析、激励基础、激励保障和激励实施。 1)激励分析 对公司的人员情况、业务发展和资本现状进行分析。而对于限制性股票和股票期权两种方案,大致可以总结出以下几种情况: ?人员较稳定,能力较确定的,可采取限制性股票的方式;人员还有待观察的,但又确实十分重要的,可采取股票期权的方式; ?初创公司一般倾向于股票期权;上市公司一般倾向于限制性股票; ?未来企业估值明显提升的、或者上市公司股价肯定上涨的,采用股票期权的较多; 股价平缓甚至略微不稳定导致可能下降的,采用限制性股票的较多。 当然,限制性股票和股票期权各有特色,企业到底采取哪种方式还有很多影响因素,需要全盘考虑才能更加周详。 2)激励基础 激励基础是一些基本的股权激励规则,包括选人机制、分配机制、发放机制、定价机制和收益机制。

手把手教你做年报

年报操作指引 2017年度市场主体年报工作开始啦! 具体时间:江苏省2017年度市场主体年报工作于2018年1月1日开始,6月30日结束。2017年12月31日前设立登记的市场主体,应当报送2017年度年报。 具体影响:企业未按时年报和公示信息隐瞒真实情况、弄虚作假,将被工商(市场监管)部门列入经营异常名录(满三年将被列入严重违法企业名单),并向社会公示影响其信用,在政府采购、工程招投标、国有土地出让、授予荣誉称号、银行贷款、企业招工、催收货款、办理房产抵押登记等工作中予以限制或禁入,并在各部门业务中联动受限,会因“一处违规”,而“处处受限”。 企业年报具体步骤(个体户步骤类似) 第一步:建议使用火狐浏览器,否则即使能进入年报填写,最终不一定能提交。

首先进入“常州市工商行政管理局官网主页”(https://www.doczj.com/doc/641398945.html,/),点击“国家企业信用公示系统(江苏)”(如下图所示红圈处),再点击“年报入口”进入国家企业信用信息公示系统(江苏)主页(https://www.doczj.com/doc/641398945.html,/index.html)(如下图所示红圈处),点击“企业信息填报”,如下图所示红圈处,进入登录界面。

第二步:市场主体有两种方式登录公示系统进行年报。一种方式为“工商联络员”登录,另一种方式为电子营业执照登录。采取“工商联络员”登录方式的,如已注册过“工商联络员”,输入“统一社会信用代码/注册号”和“工商联络员身份证号”,凭手机验证码登录填报。未注册过“工商联络员”的企业,需指定一名负责本单位年报公示工作的工商联络员,先在公示系统按照页面提示进行“联络员注册”,注册成功后,回到登录页面进行登录。需输入统一社会信用代码、联络员身份证号码、验证码登录。验证码通过点击“获取验证码”按钮,发往注册的联络员手机号码获得,目前一个手机号24小时之内只能获取5个验证码;已通过登记机关领取电子营业执照的可以通过“电子营业执照”方式登录,输入PIN码和验证码即可。 已注册过“工商联络员”的市场主体若要更换原先注册的“工商联络员”的,必须在登录公示系统之前完成“联络员变更”,新任“工商联络员”需取得原“工商联络员”的注册信息(姓名、证件号码、手机号码等),经系统完成准确性和匹配性判断,校验后方能变更。

手把手教您设计一堂微课

手把手教您设计一堂微课 转载2016-09-19 ~嘿,老师们,微课制作今天教您 微课成为当下流行的授课方式,它时间短、制作简单,容量小、易搜索、易传播的特点,以及适合学习者自主学习、探究学习的优点备受老师和学生的青睐。的作用,启示,解惑”同时,它也打破了传统课堂讲课的方式,在五分钟内达到“让优质的教育资源得到充分的利用与整合,我们的学生学习也更加轻松快乐高效。 短短五很多老师在制作微课的过程中呢,会遇到各种各样的困难和疑惑,但是,分钟的微课有时怎么都做不精彩,吸引不了学生的注意。 将所有微接续本周翻转课堂专题,小编特意给老师们推出四步搞定微课,今天,! 课的小技巧全都罗列出来,大家一目了然,简单又快捷 ! 轻轻松松搞定四步制作微课 青花瓷我很忙周杰伦- 1选题有重点微课的选题是微课制作最关键的一环,良好的选题可以事半功倍的进行讲解、录制,不好的选题同样可以使得微课变得平凡乃至平庸。 1、选择教学中的重点难点 一节微课一般讲授一个知识点,对于这个知识点的选择,关乎知识结构的设计,对于教学中的重点难点用来制作微课,是一个较好的选择,较为符合微课制作的初衷:教学资源分享,为学生(教师)解惑,启发教学。 2、要适合用多媒体表达 微课作为一种媒体,内容的设计要适合使用多媒体特性,对于不适合使用多媒体因为也许使用黑板教学或进行活动实践制作的结果也许是徒劳的,表达的内容,的教学效果更佳。 同时也会使教学过程平庸无奇,令观看者失去学习欲望。因而微课选题要适合使用多媒体表达,适合加入丰富的图形图像、多姿的动画、声色兼有的视频。 2总有一款微课适合您 1、讲授类 适用于教师运用口头语言向学生传授知识。这是最常见、最主要的一种微课类型。 2、问答类 适用于教师按一定的教学要求向学生提出问题,要求学生回答,并通过问答的形

绩效管理的学习心得3篇

绩效管理的学习心得 3 篇 一个高绩效的中层,要善于根据公司的经营目标来制定符合公司要求的、切合本部门实际的发展目标,做到长计划、短安排,并且善于总结、勤于反省。下面是带来的绩效管理的学习心得,希望可以帮到大家。 篇一:绩效管理的学习心得 从政府机关调到企业工作后,接触最多的一个词是“绩效”。的确,绩效是人力资源管理最根本的内容,也是企业经营效果的主要决定因素。只有每个人、每项工作,每个过程的绩效得到充分提高,企业的效益才能得到最大程度的体现。因此,推行绩效管理,是员工自身能力的体现,也是企业发展的要求。 27 日,单位举办了为期一天的“企业绩效管理”培训班,特邀 工业心理学博士陈方教授主讲绩效管理有关内容。据书记介绍,陈方博士主攻人力资源研究, 具有八年以上广东大型外资、合资企业人力资源高级职位工作经历,曾经担任中美合资企业总经理三年,近五年专业企业管理咨询和员工培训工作经历,为多个行业的多家知名企业提供企

业员工职业素养和管理人员管理技能提升培训服务近百场,在企业人力资源管理方面具有深厚的理论造诣和实战积累,省公司及多个分公司都曾邀请他讲课。 为期一天的培训,陈博士分两个部分八个方面对绩效管理的概念、意义与内涵、员工在绩效管理中的角色与任务以及如何提升职业化素养、增强工作绩效等内容进行了讲解与案例分析。陈博士的讲课是在架构了一个完整的知识体系的基础上,充分从企业经营管理中出现的问题分析出发,将企业经营管理的知识点通过对企业存在问题的分析和解决办法体现出来,以自己在企业经营管理实践中遇到的典型案例作为培训教学的主线。 通过学习培训,我对绩效和绩效管理的目的,内容和方法有了基本的了解和掌握,明白了什么是绩效以及绩效对每一个组织和员工的重要性。通过绩效考核,员工可以更好地发现自身的优势与劣势,了解自己的发展程度,更好地扬长避短,改进不足。每一个组织都需要关心绩效,每一个员工和管理者都需要绩效管理,通过绩效考核和绩效管理,使企业可以合理地定位员工,员工也可以更合理地找准自己的角色与定位,明确自身的任务所在。影响个人绩效的主要因素有态度、技能和知识。一个人对待工作的态度直接决定着他在工作中的积极性与主观能动性;技能的高低决定着工作质量的好坏和工作效率的高低;知识的丰富程度决定着工作中的创造与发展。因此,只有端正工作态度,提高工作技能,丰富理论和业务知识,才能充分展示自己的才能,更全面地提

手把手教你做PCR引物的设计 来自小木虫

PCR引物设计的黄金法则 1. 引物最好在模板cDNA的保守区内设计。 DNA序列的保守区是通过物种间相似序列的比较确定的。在NCBI上搜索不同物种的同一基因,通过序列分析软件(比如DNAman)比对(Alignment),各基因相同的序列就是该基因的保守区。 2.引物长度一般在15~30碱基之间。 引物长度(primer length)常用的是18-27 bp,但不应大于38,因为过长会导致其延伸温度大于74℃,不适于Taq DNA 聚合酶进行反应。 3.引物GC含量在40%~60%之间,Tm值最好接近72℃。 GC含量(composition)过高或过低都不利于引发反应。上下游引物的GC含量不能相差太大。另外,上下游引物的Tm值(melting temperature)是寡核苷酸的解链温度,即在一定盐浓度条件下,50%寡核苷酸双链解链的温度。有效启动温度,一般高于Tm值5~10℃。若按公式Tm= 4(G+C)+2(A+T)估计引物的Tm值,则有效引物的Tm为55~80℃,其Tm值最好接近72℃以使复性条件最佳。 4.引物3′端要避开密码子的第3位。 如扩增编码区域,引物3′端不要终止于密码子的第3位,因密码子的第3位易发生简并,会影响扩增的特异性与效率。

5.引物3′端不能选择A,最好选择T。 引物3′端错配时,不同碱基引发效率存在着很大的差异,当末位的碱基为A时,即使在错配的情况下,也能有引发链的合成,而当末位链为T时,错配的引发效率大大降低,G、C错配的引发效率介于A、T之间,所以3′端最好选择T。 6. 碱基要随机分布。 引物序列在模板内应当没有相似性较高,尤其是3’端相似性较高的序列,否则容易导致错误引发(False priming)。降低引物与模板相似性的一种方法是,引物中四种碱基的分布最好是随机的,不要有聚嘌呤或聚嘧啶的存在。尤其3′端不应超过3个连续的G或C,因这样会使引物在GC富集序列区错误引发。 7. 引物自身及引物之间不应存在互补序列。 引物自身不应存在互补序列,否则引物自身会折叠成发夹结构(Hairpin)使引物本身复性。这种二级结构会因空间位阻而影响引物与模板的复性结合。引物自身不能有连续4个碱基的互补。 两引物之间也不应具有互补性,尤其应避免3′ 端的互补重叠以防止引物二聚体(Dimer与Cross dimer)的形成。引物之间不能有连续4个碱基的互补。 引物二聚体及发夹结构如果不可避免的话,应尽量使其△G值不要过

手把手教你做淘宝宝贝描述表格

呵呵,经验畅谈居的同志真给力啊!刚刚申精不到十分钟,就加精了! 我们作为淘宝卖家,特别是一些鞋帽服装类的卖家,由于经营产品的特殊性,经常要在自家宝贝描述当中为宝贝的实际尺寸列举出具体的数据,以方便各位买家朋友对更好的挑选到自己适合自己的尺码。 根据我的观察,在淘宝店铺当中进行数据列举,主要有两种形式。我们先来看看几张在淘宝店铺当中找到的几个具有代表性的数据列举形式。 第一种形式,是纯文字列举。如图1所示。 图1 这种形式应该是最原始的一种尺码数据列举方式,在这里,我们只需要在编辑宝贝描述时,直接用文字键入,方便易行。这种方式也是很多小卖家正在使用的方式。 第二种形式,图片列举。如图2所示。 图2 这种形式就是先用一些辅助软件,制作表格,并在表格当中填充数据,其次将这个表格处理成图片,然后把这个图片上传到自己的图片空间当中,最后在编辑宝贝描述时,直接将这个图片从空间当中插入就行了。这种形式虽然麻烦一点,但从表现形式上看,这种方式显得很专业,至少在版面上很美观。并且

利用这种方式,还可以根据自己的需要,创造性的设计出很精美的表格,从而能更好的美化自己的店铺。如图3所示。 图3 当然,这里的创意是无限的,所制作的表格图片的样式也是无限的。这正是所谓只有想不到,没有做不到! 但回过头来,我们再来审视一下这两种形式。 第一种形式简单方便,如果数据发生变化,我们可以随时进行修改,而不会增加任何操作,但这种形式对于我们店铺形象的推广没有多大的益处,毕竟不太美观。 第二种形式专业美观,不仅列举出了数据,还可以用丰富的表现形式来为自己店铺的形象增色不少,但这种形式可操作性不强,因为一旦我们的宝贝尺码数据发生变化,我们只能重新制作表格,生成图片,上传图片,最后编辑修改。如果店铺当中的宝贝数量多的话,那这种表格的制作任务就会令人望而生畏。这也是为什么有那么多的小卖家宁愿选择文字列举形式的一个非常重要的原因,毕竟店小,没有那么多的人手来处理这种事情,只有大卖家才会富余的人手来进行这种表格的处理。 那能不能把这两种数据列举方式的优点统一起来,让数据可以随时修改,并最大程度上以专业的形式呈现在我们面前,使鱼和熊掌两者兼得呢? 我个人总是坚信,只要我们敢想,就一定可以做到。经过我的试验,我发现这种两者兼得的方式其实是存在的! 在我家店铺当中目前正在使用经过我改良之后的数据列举方式,效果如图4和图5所示:

相关主题
文本预览
相关文档 最新文档