Java Web下访问外部jar,实例后的Object类型转化的问题
来源:互联网 发布:mac 抓取网页数据 编辑:程序博客网 时间:2024/05/22 12:43
为了把问题说清楚,假设了如下的实验环境、测试过程和问题。
内有两个类,一个为抽象父类A,一个为子类B,代码如下。
2.在Eclipse中存在一个Dynamic Web Project,工程名为Test。把上面导出的test.jar文件拷贝到Test工程的WebContent目录下。另本工程还有如下class、Servlet,xml和index.jsp。代码如下。
1)抽象类A
2)Servlet文件,负责访问jar文件,创建B类的对象,并转化成A类。
3)配置servlet的web.xml文件,在WEB-INF的根目录下。
4)index.jsp文件,web下默认访问的页面。
一、实验环境:
1.存在一个Java Project,工程名为JarTest.(将其导出jar文件为test.jar)内有两个类,一个为抽象父类A,一个为子类B,代码如下。
package cn.edu.sdu;public abstract class A {public String name = "";public abstract String process();}
package cn.edu.sdu;public class B extends A {public int id;public String getName(){return name;}public void setName(String name){this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}@Overridepublic String process() {// TODO Auto-generated method stubreturn this.id+""+this.name;}}
2.在Eclipse中存在一个Dynamic Web Project,工程名为Test。把上面导出的test.jar文件拷贝到Test工程的WebContent目录下。另本工程还有如下class、Servlet,xml和index.jsp。代码如下。
1)抽象类A
package cn.edu.sdu;public abstract class A {public String name = "";public abstract String process();}
2)Servlet文件,负责访问jar文件,创建B类的对象,并转化成A类。
import java.io.IOException;import java.io.PrintWriter;import java.net.URL;import java.net.URLClassLoader;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.edu.sdu.A;/** * Servlet implementation class HelloWorldServlet */@WebServlet("/HelloWorldServlet")public class HelloWorldServlet extends HttpServlet {private static final long serialVersionUID = 1L; /** * Default constructor. */ public HelloWorldServlet() { // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("<html>");out.println("<body>");out.println("动态使用jar");String jarPath = "http://localhost:8080/Test/test.jar";String classPath = "cn.edu.sdu.B";URLClassLoader uload;Object pya;try {A a = null;uload = new URLClassLoader(new URL[]{new URL(jarPath)});a = (A)uload.loadClass(classPath).newInstance();out.println("Web 下访问jar<br>");out.println(a.getClass());out.println("<br>成功创建了A的Object");} catch (Exception e) {e.printStackTrace();out.println("<font color = \"red\">Web下访问jar创建Object出现了错误!<br>"+e.toString()+"</font>");}out.println("</body>");out.println("</html>");}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request,response);}}
3)配置servlet的web.xml文件,在WEB-INF的根目录下。
<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>HelloWorldServlet</servlet-class> </servlet> <!-- Define the Manager Servlet Mapping --> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
4)index.jsp文件,web下默认访问的页面。
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><body><a href="hello">链接Servlet</a></body></html>
二、执行过程
1.运行web 后,访问index.jsp后,如下图的错误提示。
点击链接后,访问servlet,如下图。有错误,没有成功,不能将B转化成A。
console界面的提示如下图。
2、如果在工程内添加一个Test类,代码如下图。
执行结果是可以将B转化成A。
import java.net.URL;import java.net.URLClassLoader;import cn.edu.sdu.A;public class Test {public static void main(String[] args){String jarPath = "http://localhost:8080/Test/test.jar";String classPath = "cn.edu.sdu.B";URLClassLoader uload;Object pya;try {A a = null;uload = new URLClassLoader(new URL[]{new URL(jarPath)});a = (A)uload.loadClass(classPath).newInstance();System.out.println("Web 下访问jar");System.out.println(a.getClass());System.out.println("成功创建了A的Object");} catch (Exception e) {e.printStackTrace();System.out.println("Web下访问jar创建Object出现了错误!"+e.toString());}}}
三、问题
1、为什么Java Application 直接执行,可以访问jar并创建B的Object后,并转化成A的Object?
2、为什么Java Web的项目下,不能将jar创建的B的Object后不能转化成A的Object?
3、如何实现第二个问题,在Web下访问外部Jar,创建的B的Object转化成A的Object?
0 0
- Java Web下访问外部jar,实例后的Object类型转化的问题
- 类型转化的问题
- 安装部署Mysql后外部不能访问的问题排查
- object 检验字符类型之间的转化
- Win7下如何用Eclipse导出jar类型的文件,如何用鼠标双击打开jar类型的文件的方法及解决双击后一闪而过的问题
- Date类型数据转化json后,在jsp获取日期显示为[object Object]问题
- 内部类问题--java编程中没有任何类型 abc 的外层实例可访问问题
- 内部类访问外部类的实例
- Android项目导出为jar包后调用外部资源的问题
- 解决Android Studio 项目中添加外部Jar库后项目无法编译的问题
- android项目导入外部jar包后不报错但运行时报找不到类的问题
- Java Application打包后,外部引用的jar里的日志无法输出
- Java的类型转化总结
- Java自动类型的转化
- Date时间类型用json转化后显示[Object,Object]
- MyEclipse下Web项目重命名后的不能访问异常
- java web项目下的lib和build path 中jar包问题解惑
- JAVA Object[]数组转化问题
- 感光度
- maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
- SpringMVC中使用Interceptor拦截器
- 控制台彩色输出
- OpenCV中HOG特征的提取实现
- Java Web下访问外部jar,实例后的Object类型转化的问题
- 运行rspec文件生成xml类型的报告用以jenkins集成
- java泛型(1)
- cuda和Cg
- 读小说,读代码,使用CReading 尽享读书乐趣
- 设计模式--外观模式
- 像素的m邻接克服8邻接的二义性
- Saving PHP Sessions in Redis
- Qt中嵌入OSG