返回信息流问题代码如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
import ="com.test.*"
import ="org.apache.commons.httpclient.params.*"
import ="org.apache.commons.httpclient.methods.*"
import ="org.apache.commons.httpclient.HttpException"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
String search=request.getParameter("search");
PostTest.execution(search);
%>
</body>
</html>
注:PostTest是我自己编的一个类,里面用到了HTTPClient包和HTMLParser包里的方法和类,execution(String)是PostTest类中的一个静态方法
问题如下:
1.在JSP文件中,因为用到了PostTest.java中的方法execution(),所以在JSP中也要引用那一大堆包,但是我写import ="org.apache.commons.httpclient.methods.PostMethod"时,它会报错,错误为Only a type can be imported. org.apache.commons.httpclient.methods.PostMethod resolves to a package。
2.于是我尝试import ="org.apache.commons.httpclient.methods.*" 这样不会报刚才的错误,但是会说找不到PostMethod类,错误为javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpException
和java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpException
实在不知道怎么处理了,希望大牛解答,万分感激
这是一条镜像帖。来源:北邮人论坛 / java / #14285同步于 2010/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【求助】JSP中的import问题,求大牛解答,谢谢
MeForever
2010/4/27镜像同步25 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
postTest类贴出来一下
ps:org.apache.commons.httpclient.HttpException这个类你用到了吗?没用到可以不导入的啊
package com.test;
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.htmlparser.*;
import org.htmlparser.parserapplications.*;
import org.htmlparser.filters.*;
import org.htmlparser.util.NodeList;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.nodes.TextNode;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.*;
public class PostTest {
public static String readTextAndLinkAndTitle (String result) throws Exception {
Parser parser;
NodeList nodelist;
parser = Parser. createParser (result,"utf8");
NodeFilter filterTag = new TagNameFilter ("a");
NodeFilter outerFilter = new TagNameFilter ("h3");
NodeFilter parentFilter = new HasParentFilter(outerFilter);
NodeFilter filter = new AndFilter(filterTag,parentFilter);
NodeList nodes = parser.extractAllNodesThatMatch(filter);
String temp = ""; String title = "";
for (int i = 0; i < nodes.size(); i++) {
Node textnode = (Node) nodes.elementAt(i);
System.out.println("getText:"+textnode.toPlainTextString().replaceAll(" ",""));
System.out.println("=================================================");
temp = textnode.toPlainTextString().replaceAll(" ","");
title=title+temp;
}
/*
NodeFilter filterTag2 = new TagNameFilter ("p");
NodeList nodes2 = parser.extractAllNodesThatMatch(filterTag2);
temp = "";
String summary = "";
for (int i = 0; i < nodes2.size(); i++) {
Node textnode = (Node) nodes2.elementAt(i);
System.out.println("getText:"+textnode.toPlainTextString().replaceAll(" ",""));
System.out.println("=================================================");
temp = textnode.toPlainTextString().replaceAll(" ","");
summary=summary+temp;
}*/
return title.replaceAll (" ","");// 返回取得 的信息
}
public static void execution(String search) throws Exception {
PostMethod postMethod = new PostMethod(
"http://news.youdao.com/search");
NameValuePair[] data = {
new NameValuePair("q", search),
new NameValuePair("start", "10"),
new NameValuePair("length", "10"),
new NameValuePair("ue", "utf8"),
new NameValuePair("s", ""),
new NameValuePair("tl", ""),
new NameValuePair("keyfrom", "search.index")
};
// 将表单的值放入postMethod中
postMethod.setRequestBody(data);
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(1000*60*10);
HttpClientParams params = new HttpClientParams();
params.setContentCharset("UTF-8");
client.setParams(params);
int status = 0;
try {
status = client.executeMethod(postMethod);
}
catch (HttpException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
if (status == HttpStatus.SC_OK) {
try {
String result = postMethod.getResponseBodyAsString();
System.out.println(result);
java.io.PrintWriter pw = new java.io.PrintWriter(new java.io.FileOutputStream(new java.io.File("E:\\result.html")));
pw.write(result);
pw.close();
//抽取文本信息
String x1=readTextAndLinkAndTitle(result);// 调用readTextAndLinkAndTitle 函数进行解析
java.io.PrintWriter pw2=new java.io.PrintWriter(new java.io.FileOutputStream(new java.io.File("E:\\cnki.txt")));// 将抽取结果写入文本文件
pw2.write(x1.toString().trim());
pw2.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
postMethod.releaseConnection();
}
}【 在 caomeiliang 的大作中提到: 】
: postTest类贴出来一下
: ps:org.apache.commons.httpclient.HttpException这个类你用到了吗?没用到可以不导入的啊
org.apache.commons.httpclient.HttpException这个类在jPostTest.java中的execution()方法中用到了
【 在 caomeiliang 的大作中提到: 】
: postTest类贴出来一下
: ps:org.apache.commons.httpclient.HttpException这个类你用到了吗?没用到可以不导入的啊
我用的Eclipse Java EE IDE ,点的run on sever运行的,服务器为Tomcat6.0。
如果不import那些包它会报错,说找不到那些类,错误为:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /Postcnki.jsp at line 18
15: String search=request.getParameter("search");
16:
17:
18: PostTest.execution(search);
19: %>
20:
21: </body>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.Postcnki_jsp._jspService(Postcnki_jsp.java:77)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpException
org.apache.jsp.Postcnki_jsp._jspService(Postcnki_jsp.java:66)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.24 logs.
【 在 caomeiliang 的大作中提到: 】
: 没有任何问题,你怎么编译的?
: ps: jsp里只需要导入com.test.*,其他的包没必要导入
是看PostTest.java类中的jar包吗?可是这个类我建了一个main()方法发现可以运行的,就是在JSP中调用时出了问题。
【 在 lovemaker 的大作中提到: 】
: jsp确实没必要导入其他jar包
: 看看是不是jar包有重复或者缺少jar包