Applet与Servlet之间的通信与交互
Applet的优势在于可以操作客户端的资源,一般要操作客户端的资源---如上传文件,调用客户端的应用程序,调用客户端的打印机实现本地打印等,一般都是用Applet程序实现的,并将其嵌入到网页中,通过Applet将本地资源转换成流,然后连接后台服务器的SERVLET,并达到与之交互,将客户端的资源上传到服务器中.如我最近在项目中遇到的的一个问题:需要将客户端的桌面上的文件上传到服务器上的特定文件中.
[b]Applet小程序[/b]
import java.applet.Applet;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.filechooser.FileSystemView;
public class DesktopReadJpg extends Applet{
/**
* 初始化Applet
*/
public void init()
{
FileSystemView fsv = FileSystemView.getFileSystemView();
File vFile = fsv.getHomeDirectory();
String path = vFile.getPath();
String picUrl = getParameter("PICURL");
try{
//URL url1 = new URL("http://localhost:8080/vmis/appletServlet");
URL url1 = new URL(picUrl);
HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
conn.setRequestMethod("POST");
conn.setAllowUserInteraction(true);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(true);
conn.setRequestProperty("Content-Type", "application/octet-stream");
File jpgFile = new File(path+"\\ZP.JPG");
if(jpgFile.isFile()){
// 建立文件的输入流
FileInputStream fileInputStream = null;
fileInputStream = new FileInputStream(jpgFile);
BufferedInputStream bis=new BufferedInputStream(fileInputStream);
OutputStream os = conn.getOutputStream();
BufferedOutputStream bos=new BufferedOutputStream(os);
int len =0;
byte[] bty=new byte[4096];
while((len=bis.read(bty,0,4096))!=-1){
bos.write(bty, 0, len);
bos.flush();
}
bos.close();
bis.close();
System.out.println(conn.getContentType() + ": "
+ conn.getResponseCode());
}
}catch(Exception e){
e.printStackTrace();
}
}
}
其中System.out.println(conn.getContentType() + ": "+
conn.getResponseCode());,这句必须加上才能够连接上服务器上的Servlet完成上传工作
[b]与之交互的Servlet程序:[/b]
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.maslong.pub.Constants;
public class AppletServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
InputStream in = request.getInputStream();
//System.out.print(request.getParameter("username"));
File f = new File(Constants.PHOTODIR+"Head.JPG");
FileOutputStream fos = new FileOutputStream(f);
byte[] b = new byte[1024 * 1024];
int bytes, sumBytes = 0;
while (true) {
bytes = in.read(b);
if (bytes <= 0)
break;
sumBytes += bytes;
fos.write(b, 0, bytes);
}
fos.close();
in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
doGet(request, response);
}
}
Applet的优势在于可以操作客户端的资源,一般要操作客户端的资源---如上传文件,调用客户端的应用程序,调用客户端的打印机实现本地打印等,一般都是用Applet程序实现的,并将其嵌入到网页中,通过Applet将本地资源转换成流,然后连接后台服务器的SERVLET,并达到与之交互,将客户端的资源上传到服务器中.如我最近在项目中遇到的的一个问题:需要将客户端的桌面上的文件上传到服务器上的特定文件中.
[b]Applet小程序[/b]
import java.applet.Applet;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.filechooser.FileSystemView;
public class DesktopReadJpg extends Applet{
/**
* 初始化Applet
*/
public void init()
{
FileSystemView fsv = FileSystemView.getFileSystemView();
File vFile = fsv.getHomeDirectory();
String path = vFile.getPath();
String picUrl = getParameter("PICURL");
try{
//URL url1 = new URL("http://localhost:8080/vmis/appletServlet");
URL url1 = new URL(picUrl);
HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
conn.setRequestMethod("POST");
conn.setAllowUserInteraction(true);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(true);
conn.setRequestProperty("Content-Type", "application/octet-stream");
File jpgFile = new File(path+"\\ZP.JPG");
if(jpgFile.isFile()){
// 建立文件的输入流
FileInputStream fileInputStream = null;
fileInputStream = new FileInputStream(jpgFile);
BufferedInputStream bis=new BufferedInputStream(fileInputStream);
OutputStream os = conn.getOutputStream();
BufferedOutputStream bos=new BufferedOutputStream(os);
int len =0;
byte[] bty=new byte[4096];
while((len=bis.read(bty,0,4096))!=-1){
bos.write(bty, 0, len);
bos.flush();
}
bos.close();
bis.close();
System.out.println(conn.getContentType() + ": "
+ conn.getResponseCode());
}
}catch(Exception e){
e.printStackTrace();
}
}
}
其中System.out.println(conn.getContentType() + ": "+
conn.getResponseCode());,这句必须加上才能够连接上服务器上的Servlet完成上传工作
[b]与之交互的Servlet程序:[/b]
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.maslong.pub.Constants;
public class AppletServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
InputStream in = request.getInputStream();
//System.out.print(request.getParameter("username"));
File f = new File(Constants.PHOTODIR+"Head.JPG");
FileOutputStream fos = new FileOutputStream(f);
byte[] b = new byte[1024 * 1024];
int bytes, sumBytes = 0;
while (true) {
bytes = in.read(b);
if (bytes <= 0)
break;
sumBytes += bytes;
fos.write(b, 0, bytes);
}
fos.close();
in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
doGet(request, response);
}
}