jsp中引用一个类报错!

vv0885 2009-04-06 04:17:29
test.jsp

<%@ page import="com.a.b.A" %>
<%
out.print(A.getInfo());
%>

这么一个jsp,A是一个类,如果我把这个jsp放到根目录下就可以访问,不报错,如:http://www.abc.com/test.jsp

但是如果我把它放到一个目录下,就会报错,如:http://www.abc.com/user/test.jsp
报错如下:
org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 6 in the generated java file
Only a type can be imported. com.a.b.A resolves to a package


这是为什么啊????

我用的是tomcat6.0.18

请赐教!

...全文
187 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vv0885 2009-04-07
  • 打赏
  • 举报
回复
问题解决了,还是没有好好学习啊!!!

现在的目录结构
/usr/lx/myapps/test1/www/test.jsp
/usr/lx/myapps/test1/www/a/test.jsp
/usr/lx/myapps/test1/www/WEB-INF/web.xml
/usr/lx/myapps/test1/www/WEB-INF/classes
/usr/lx/myapps/test1/www/WEB-INF/lib

/usr/lx/myapps/test2/www/test.jsp
/usr/lx/myapps/test2/www/a/test.jsp
/usr/lx/myapps/test2/www/WEB-INF/web.xml
/usr/lx/myapps/test2/www/WEB-INF/classes
/usr/lx/myapps/test2/www/WEB-INF/lib

tomcat server.xml 中 虚拟主机配置部分如下:

<Engine name="Catalina" defaultHost="www.test1.com">

<Host name="www.test1.com" appBase="/usr/lx/myapps/test1/"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="www" reloadable="true"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>
</Host>

<Host name="www.test2.com" appBase="/usr/lx/myapps/test2/"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="www" reloadable="true"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>
</Host>

</Engine>

这样设置就可以运行通过了

Host 中的 appBase 指的是我自己app文件夹所在的文件夹路径,而不应该是app文件夹路径
其实原始的server.xml也是这样配置的,指向的是webapps,并没有指向具体的应用路径

Context 中的 path="" 表示缺省或找不到时所指向的目录,我这里是相对目录

我以前在 tomcat5 下就是我原来的配置,Host的appBase 和 Context的path 值都是一样的,都是直接指向了我app文件夹的路径
但是,这样配置,tomcat5的确是可以运行的,没有任何错误,是tomcat6更严格了?!

原来以前就是错的啊!!!
学艺不精啊!!!

大家还有什么其他看法呢?
dadi5566 2009-04-07
  • 打赏
  • 举报
回复
顶一下
XIAOYANJIANJIAN 2009-04-07
  • 打赏
  • 举报
回复
org.apache.commons.lang.StringUtils 小女子孤陋寡闻,倒是没见过这个引用/,
不过很明显能看出, String s = StringUtils.replace(s1, "1", "2");
通过失败了,楼下继续。。关注中
XIAOYANJIANJIAN 2009-04-07
  • 打赏
  • 举报
回复
那就不目录的原因了,先顶一个看看
vv0885 2009-04-07
  • 打赏
  • 举报
回复
我再补充一下我的测试代码:

test.jsp

<%@ page import="org.apache.commons.lang.StringUtils" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String s1 = "1111";
String s = StringUtils.replace(s1, "1", "2");
out.println(s);
%>


报错内容:

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 6 in the generated java file
Only a type can be imported. org.apache.commons.lang.StringUtils resolves to a package

An error occurred at line: 5 in the jsp file: /upload.jsp
StringUtils cannot be resolved
2: <%@ page contentType="text/html;charset=UTF-8" language="java" %>
3: <%
4: String s1 = "1111";
5: String s = StringUtils.replace(s1, "1", "2");
6: out.println(s);
7: %>


Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:317)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
vv0885 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jourqel 的回复:]
WebRoot/approot/
- test.jsp
- user/
- test.jsp
/WEB-INF/
- web.xml
- classes/
- lib/

这样才对~就是说WEB-INF要跟你建的目录同级~
[/Quote]

我还是不太明白,那我具体说一下吧

我的应用是部署到linux服务器下的,系统是AS4.0

tomcat6.0.18

有两个应用,所在目录分别是:
/usr/lx/myapp/test1/
/usr/lx/myapp/test2/

tomcat server.xml 中 host 的配置:

<Host name="www.test1.com" appBase="/usr/lx/myapp/test1"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context path="/" docBase="/usr/lx/myapp/test1" reloadable="true"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>

</Host>

<Host name="www.test2.com" appBase="/usr/lx/myapp/test2"
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

<Context path="/" docBase="/usr/lx/myapp/test2" reloadable="true"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>

</Host>

每个应用目录下面都是这样的结构:
/usr/lx/myapp/test1/test.jsp
/usr/lx/myapp/test1/a/test.jsp
/usr/lx/myapp/test1/WEB-INF
/usr/lx/myapp/test1/WEB-INF/web.xml
/usr/lx/myapp/test1/WEB-INF/classes
/usr/lx/myapp/test1/WEB-INF/lib

我顶贴jsp中引用的类所在jar包就在lib中,test.jsp的程序完全一样
当放在应用根目录下能够正常运行,但是放到a目录下就会报顶贴的错误

有个奇怪的现象,如果我用tomcat5的话就没有问题,什么都没有改动,tomcat配置好host,a目录下的就可以正常运行

请帮我看看是什么问题,谢谢了!
jourqel 2009-04-06
  • 打赏
  • 举报
回复
WebRoot/approot/
- test.jsp
- user/
- test.jsp
/WEB-INF/
- web.xml
- classes/
- lib/

这样才对~就是说WEB-INF要跟你建的目录同级~
vv0885 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jourqel 的回复:]
引用 1 楼 wcsandoyq 的回复:
要想通过浏览器访问jsp页面的话,你的jsp页面应该放在根目录下,如果你想把它放在其他的目录下,你也要把这个目录建在根目录下。


同意楼上的~你把建的目录放在WebRoot下~例如在WebRoot建一个user目录~把test.jsp放在里面~当然你也可以在user目录里面再建目录然后在把.jsp文件放在里面~
[/Quote]

我的目录结构:
.../approot/
- test.jsp
- user/
- test.jsp
- WEB-INF/
- web.xml
- classes/
- lib/
jourqel 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wcsandoyq 的回复:]
要想通过浏览器访问jsp页面的话,你的jsp页面应该放在根目录下,如果你想把它放在其他的目录下,你也要把这个目录建在根目录下。
[/Quote]

同意楼上的~你把建的目录放在WebRoot下~例如在WebRoot建一个user目录~把test.jsp放在里面~当然你也可以在user目录里面再建目录然后在把.jsp文件放在里面~
YL_Show 2009-04-06
  • 打赏
  • 举报
回复
Mark
wcsandoyq 2009-04-06
  • 打赏
  • 举报
回复
要想通过浏览器访问jsp页面的话,你的jsp页面应该放在根目录下,如果你想把它放在其他的目录下,你也要把这个目录建在根目录下。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧