tomcat版本引发的问题-source 1.3中不支持泛型

本文介绍了解决Tomcat因版本导致不支持泛型的问题,通过修改web.xml中的JSP编译参数,将JDK版本设置为1.5以启用泛型支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat版本引发的问题-source 1.3中不支持泛型

      今天碰到了一个棘手的问题,web页面老是解析不了,报错如下:

                  -source 1.3中不支持泛型。(请尝试使用-source 1.5以启用泛型) 

      对开发环境检查了个遍,从开发所用JDK到编译时采用的JDK再到环境变量等一一检查,始终找不到哪里冒出了个JDK 1.3。由此怀疑应该是tomcat的问题。便在网上搜索,终于明白了问题所在:Tomcat版本。这里特转抄署名“渴望报表”的朋友的一篇文章,在此对该朋友表示万分感谢。

     请求JSP时,Tomcat日志显示“javac: 目标版本 1.3 与默认的源版本 1.5 冲突”。查看上面的错误日志,发现"compilerTargetVM=1.3",应该时Tomcat的JSP编译时使用的JDK1.3的版本。进行如下修改:找到tomcat conf目录下的web.xml,将这段内容:

 <servlet> 
    
<servlet-name>jsp</servlet-name>
    
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    
<init-param>
        
<param-name>fork</param-name>
        
<param-value>false</param-value>
    
</init-param> 
    
<init-param>
        
<param-name>xpoweredBy</param-name> 
        
<param-value>false</param-value>
    
</init-param>
    
<load-on-startup>3</load-on-startup>
  
</servlet>

改成下列的配置:

<servlet>
    
<servlet-name>jsp</servlet-name>
    
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    
<init-param>
    
<param-name>compilerSourceVM</param-name>
    
<param-value>1.5</param-value>
    
</init-param>
    
<init-param>
    
<param-name>compilerTargetVM</param-name>
    
<param-value>1.5</param-value>
    
</init-param>
    
<init-param>
        
<param-name>fork</param-name>
        
<param-value>false</param-value>
    
</init-param>
    
<init-param>
      
<param-name>compiler</param-name>
      
<param-value>modern</param-value>
    
</init-param>
    
<init-param>
        
<param-name>xpoweredBy</param-name>
        
<param-value>false</param-value>
    
</init-param>
    
<load-on-startup>3</load-on-startup>
</servlet>

      修改之后重启tomcat就可以了。

      这里偶用的是tomcat 5.0.30,然后特意换成tomcat 5.5.0,发现没有出现上述问题,检查conf下面的web.xml文件可以发现区别所在。

将下列代码针对jdk1.3进行兼容:import java.lang.String ; import java.io.*; import java.net.*; public class SimpleWebServer { public static void main(String[] args) throws IOException { int port = 8080; ServerSocket serverSocket = new ServerSocket(port); System.out.println("Server started on port " + port); while (true) { Socket clientSocket = serverSocket.accept(); handleRequest(clientSocket); clientSocket.close(); } } private static void handleRequest(Socket clientSocket) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintStream out = new PrintStream(clientSocket.getOutputStream()); String requestLine = in.readLine(); if (requestLine == null) { return; } String[] tokens = requestLine.split(" "); String uri = tokens[1]; System.out.println("uri = " + uri); String fileName = uri.substring(1); System.out.println("FileName: " + fileName); File file = new File(fileName); if (file.exists()) { String contentType = getContentType(file); String response = "HTTP/1.1 200 OK\n" + "MIME-version:1.0" + "\n" + "Content-Type:" + contentType + "\n" + "Content-Length: " + file.length() + "\n" + "\n"; out.print(response); // 将文件内容传送 DataInputStream d = new DataInputStream(new FileInputStream(file)); int len = (int) file.length(); byte[] buf = new byte[len]; d.readFully(buf);//从输入流中读取一些字节,并将它们存储在缓冲区数组 b 中。 out.write(buf, 0, len);//将 len 字节从指定的初始偏移量为off=0的 byte数组写入此流。如果启用自动刷新,则调用 flush 方法 out.flush();//刷新该流的缓冲。 d.close(); out.flush(); } else { String notFound = "<html><head>
最新发布
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值