重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜) + Tomcat 5.0.28 + AXIS 1.4。 AXIS 1.4包可以在 找到。 假设所有的环境你已经搭好,并且AXIS包也已经下好了。OK, Here we go~
成都创新互联专业为企业提供长宁网站建设、长宁做网站、长宁网站设计、长宁网站制作等企业网站建设、网页设计与制作、长宁企业网站模板建站服务,十余年长宁做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到 %TOMCAT_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar到% TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。启动tomcat,访问 如果访问成功,恭喜你!基本的配置你已经做完了。
PS:此处的%TOMCAT_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的缩写)拷贝到%TOMCAT_HOME%\webapps\axis目录下即完成了所有的发布工作。AXIS的编译引擎会处理接下来的所有事情。下面是一段示例代码:
java 代码
1. public class HelloAXIS {
2.
3. public String Hello(String name){
4. return "AXIS say hello to " + name;
5. }
6. }
把 HelloAXIS.java 文件改成 HelloAXIS.jws 然后拷贝到%TOMCAT_HOME%\webapps\axis目录下,启动Tomcat之后访问 如果能看到 Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。server端的发布已经完成了,接下来就是编写Client端测试代码了。
java 代码
1. package com.chnic.test;
2.
3. import java.net.URL;
4.
5. import javax.xml.namespace.QName;
6.
7. import org.apache.axis.client.Call;
8. import org.apache.axis.client.Service;
9.
10. public class Test {
11.
12. public static void main(String[] args) throws Exception{
13. String targetEendPoint = "" ;
14. Service service = new Service();
15. Call call = (Call) service.createCall();
16. call.setOperationName( new QName(targetEendPoint, "Hello" ));
17. call.setTargetEndpointAddress( new URL(targetEendPoint));
18. String result = (String) call.invoke( new Object[]);
19. System.out.println(result);
20. }
21. }
测试代码很简单,如果熟悉java反射机制的朋友不用两分钟就能看明白。运行后客户端控制台出现 AXIS say hello Robert。测试成功。果然很简单吧。不过在这简单背后却是以牺牲灵活性为代价的。假如你现在手里只有.class 或者一个jar包,jws就不再能满足你的需求了,最要命的就是即时发布不支持带包的类,这点AXIS的用户手册上写的也很明白。
Important: JWS web services are intended for simple web services. You 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 代码
1. package com.chnic.webservice;
2.
3. public class HelloWorld {
4.
5. public HelloWorld(){
6.
7. }
8.
9. public String hello(String str){
10. return "Hello " + str;
11. }
12.
13. public int add( int a, int b){
14. return a + b;
15. }
16.
17. }
一个带包的很简单的类,在eclipse下编译后按照包名拷到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目录下。以这个类为例,拷贝完之后这个HelloWorld.class的路径就是 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes\com\chnic\webservice。PS: 如果嫌这样太麻烦,可以另外建一个Java Web工程用myeclipse的发布工具发布到Tomcat之后,整体一次性拷贝到websericve的工程中。
接下来就需要编写发布文件deploy.wsdd。到%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容:
xml 代码
1. deployment xmlns =
2. xmlns:java = ""
3.
4. service name = "HelloWorld" provider = "java:RPC"
5. parameter name = "className" value = "com.chnic.webservice.HelloWorld" /
6. parameter name = "allowedMethods" value = "*" /
7. / service
8. / deployment
简单的介绍下各个节点的含义,"HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。这里一共有有4种类型,分别是:RPC, Document, Wrapped 和 Message。有兴趣可以看下 org.apache.axis.providers这个包和子包下面的类的API文档。之后的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的public方法,当然你也可以自己指定。
编写完配置发布文件之后,cmd打开windows的控制台,进入%TOMCAT_HOME%\webapps\axis\WEB-INF目录下键入如下命令
1. 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服务必须处于启动状态,否则就会抛出一堆无法连接的异常信息。发布成功之后你可以通过访问 来查看你所有的定制发布的服务。
客户端测试代码
1. String targetEendPoint = "" ;
2. Service service = new Service();
3. Call call = (Call) service.createCall();
4. call.setTargetEndpointAddress( new URL(targetEendPoint));
5.
6. call.setOperationName( new QName(targetEendPoint, "hello" ));
7. String result = (String) call.invoke( new Object[]);
8. System.out.println(result);
9.
10. call.setOperationName( new QName(targetEendPoint, "add" ));
11. Integer res = (Integer) call.invoke( new Object[]);
12. System.out.println( "The result is: " + res);
运行测试代码,控制台显示 Hello Robert 和 The result is: 3 这两句话,说明发布成功。仔细观察下发现其实除了那个targetEndpoint 之外,即时发布和定制发布的客户端调用代码基本上都是一样的。定制发布的URL可以在WSDL文件里找到。
common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件
下面先介绍上传文件到服务器(多文件上传):
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.*;
public class upload extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GB2312";
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
try {
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节,这里设为2m
fu.setSizeMax(2*1024*1024);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath("c://windows//temp");
//开始读取上传信息
List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
//正则匹配,过滤路径取文件名
String regExp=".+////(.+)$";
//过滤掉的文件类型
String[] errorType={".exe",".com",".cgi",".asp"};
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem)iter.next();
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if((name==null||name.equals("")) size==0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result){
for (int temp=0;tempERRORTYPE.LENGTH;TEMP++){
if (m.group(1).endsWith(errorType[temp])){
throw new IOException(name+": wrong type");
}
}
try{
//保存上传的文件到指定的目录
//在下文中上传文件至数据库时,将对这里改写
item.write(new File("d://" + m.group(1)));
out.print(name+" "+size+"");
}
catch(Exception e){
out.println(e);
}
}
else
{
throw new IOException("fail to upload");
}
}
}
}
catch (IOException e){
out.println(e);
}
catch (FileUploadException e){
out.println(e);
}
}
}
现在介绍上传文件到服务器,下面只写出相关代码:
以sql2000为例,表结构如下:
字段名:name filecode
类型: varchar image
数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");
代码如下:
。。。。。。
try{
这段代码如果不去掉,将一同写入到服务器中
//item.write(new File("d://" + m.group(1)));
int byteread=0;
//读取输入流,也就是上传的文件内容
InputStream inStream=item.getInputStream();
pstmt.setString(1,m.group(1));
pstmt.setBinaryStream(2,inStream,(int)size);
pstmt.executeUpdate();
inStream.close();
out.println(name+" "+size+" ");
}
。。。。。。
这样就实现了上传文件至数据库
先放好jspsmartupload包
%@ page contentType="text/html;charset=GB2312" %
%@ page language="java" import="com.jspsmart.upload.*"%
HTML
head
title文件上传处理页面/title
/head
BODY
p align="center"jspSmartUpload组件应用之员工档案/p
HR
%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始化
su.initialize(pageContext);
// 设定允许上传的文件(通过扩展名限制),仅允许jpg,bmp,gif文件。
su.setAllowedFilesList("jpg,bmp,gif");
// 上传文件
su.upload();
// 将上传文件全部保存到指定目录
su.save("/upload");
%
p align="center"
table CELLSPACING="0" CELLPADDING="3" BORDER="1" WIDTH="474"
tr
td width="150"div align="left"psmallfont face="Verdana"姓名: /font/small/td
td width="324"smallfont face="Verdana"
%=su.getRequest().getParameter("username")%
br/font/small/td
/tr
tr
tdsmallfont face="Verdana"照片: /font/small/td
tdsmallimage src="%="upload/"+su.getFiLes().getFile(0).getFileName()%"/td
/tr
tr
tdsmallfont face="Verdana"年龄: /font/small/td
tdsmallfont face="Verdana"%=su.getRequest().getParameter("age")%/font/small/td
/tr
tr
tdsmallfont face="Verdana"工作单位: /font/small/td
tdsmallfont face="Verdana"%=su.getRequest().getParameter("department")%/font/small/td
/tr
tr
td colspan="2" width="474"div align="center"centerpsmallfont face="Verdana"
input TYPE="Submit" value="提交" /font/small/td
/tr
/table
/p
/BODY
/HTML
利用SVN这个软件,百度就能下载,安装完后根据公司的SVN地址就可以访问提交的代码等文件并导入到本地,自己写的代码也可以提交上去。
而且eclipse、Myeclipse也可以安装SVN插件,直接在软件内检出和提交代码。
绝大部分公司都是用的SVN软件来管理、同步代码。
1、网站源码的管理后台是和源码一起的,(除非这个源码本身没有自带管理后台),默认的管理后台地址一般为:域名/admin/ 这样访问。默认账户密码基本为:admin,root等。具体点要问源码开发商,如果是网上下载的免费源码,请仔细阅读说明,基本都有详细解答的。
2、如果源码本身没有管理后台的,需要重新开发,前台页面=展示,后台页面=管理前台页面展示、权限等。
3、开发源码可以找网站开发商,或者去任务网发布任务,或者买书自学。根据网站源码的超文本类型(asp、php、java、.net。。。等等)。
4、源码所属于类型可以直接看后缀,如图(如果没有更改默认后缀的话):
为了解决目前浏览器不支持获取本地文件全路径。java项目上传服务器为了解决目前浏览器不支持获取本地文件全路径。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,广泛应用。