周一
接着半拉子半死不活的投票系统,继续孤军奋战于无人境界。我的PL头儿就没见着鬼影,大好的周一,不来上班。谁让人牛呢。
    javax.servlet.ServletException: org/apache/jsp/testjsp_jsp (wrong name: org/apache/jsp/TestJSP_jsp) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:244) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
  
  
    
      
        
          root cause
        
      
    
    
      java.lang.NoClassDefFoundError: org/apache/jsp/testjsp_jsp (wrong name: org/apache/jsp/TestJSP_jsp) java.lang.ClassLoader.defineClass1(Native Method) 
    
  
  这个错误,调了一个小时都没用。服务器Tomcat已经被我关开疯了。于是,我换了一下思路,开始琢磨servlet起作用的机制。
    
      首先右键点我的电脑。打开属性。然后选择
      
        “
      
      高级
      
        ”
      
      里面的
      
        “
      
      环境变量
      
        ”
      
      ,在新的打开界面中的系统变量里需要设置三个属性
      
        “java_home”
      
      、
      
        “path”
      
      、
      
        “classpath”,
      
      其中在没安装过
      
        jdk
      
      的环境下,
      
        path
      
      属性是本来存在的。而
      
        java_home
      
      和
      
        classpath
      
      是不存在的。
    
    
      
      
            
      
    
    
      首先点
      
        “
      
      新建
      
        ”
      
      ,然后在变量名写上
      
        java_home
      
      ,顾名其意该变量的含义就是
      
        java
      
      的安装路径,呵呵,然后在变量值写入刚才安装的路径
      
        “E:\Java\jdk1.6.0_02”
      
      ;
    
  
其次在系统变量里面找到 path ,然后点编辑, path 变量的含义就是系统在任何路径下都可以识别。打开该变量时,会发现其 “ 变量值 ” 后面的文本框中已经有了内容,我们不要删除这些内容,而是按 “End” ,定位到该文本框的末尾,如果末尾有一个分号 “;” ,就直接添加 JAVA 命令所在的路径,如果没有分号,则需要添加一个分号后再添加 JAVA 命令的路径 ——java 命令的路径是 “%java_home%\bin;%java_home%\jre\bin”( 其中 “%java_home%” 的意思为刚才设置 java_home 的值),也可以直接写上 “E:\Java\jdk1.6.0_02” ;
最后再点 “ 新建 ” ,然后在变量名上写 classpath, 该变量的含义是为 java 加载类 (class or lib) 路径,只有类在 classpath 中, java 命令才能识别,其值为 “.;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar ( 要加 . 表示当前路径 )” ,与 “%java_home%” 有相同意思。
    
    
      
        -----------------------事实证明,貌似没用-----------------------------------------
      
    
  
    
         1.
    
    
      到
    
    
      Tomcat
    
    
      的安装目录的
    
    
      webapps
    
    
      目录,可以看到
    
    
      ROOT
    
    
      ,
    
    
      examples, tomcat-docs
    
    
      之类
    
    
      Tomcat
    
    
      自带的的目录;
    
    
       
    
    
      
    
    
          2.
    
    
      在
    
    
      webapps
    
    
      目录下新建一个目录,起名叫
    
    
      myapp
    
    
      ;
    
    
       
    
    
      
    
    
          3.myapp
    
    
      下新建一个目录
    
    
      WEB-INF
    
    
      ,注意,目录名称是区分大小写的;
    
    
       
    
    
      
    
    
          4.WEB-INF
    
    
      下新建一个文件
    
    
      web.xml
    
    
      ,内容如下:
    
    
    
  
| 
           
            
              <?
            
            
              xml 
            
            
              version
            
            
              =
            
            
              "1.0"
            
            
            
            
              encoding
            
            
              =
            
            
              "ISO-8859-1"?
            
            
              >
            
            
            
            
               
            
              <
            
            
              display-name
            
            
              >
            
            
              My Web Application
            
            
              </
            
            
              display-name
            
            
              >
            
            
            
            
               </ web-app >  | 
      
    
       
    
    
      在我的电脑
      
        ->
      
      属性
      
        ->
      
      高级
      
        ->
      
      环境变量
      
        ->
      
      系统变量中添加以下环境变量
      
        (
      
      假定你的
      
        tomcat
      
      安装在
      
        e:\tomcat
      
      ):
      
        
      
    
    
    
    
      CATALINA_HOME
    
    
      :
      
        c:\tomcat
        
      
    
    
    
    
      CATALINA_BASE
    
    
      :
      
        c:\tomcat
        
      
    
    
    
    
      TOMCAT_HOME:  c:\tomcat             
      
          
    
    
      如果是第一次设置
      
        tomcat
      
      的环境变量,上面的这三个变量都是没有的,因此都需要
      
        “
      
      新建
      
        ”
      
      ,以第一个变量为例:点击
      
        “
      
      新建
      
        ”,
      
      输入变量名为
      
        CATALINA_HOME
      
      ,输入变量值为
      
        c:\tomcat
      
      。
    
  
然后修改环境变量中的 classpath (这一步与上面 jdk 相关联,这里的 classpath 变量便是上面在安装 jdk 时所创建的环境变量):把 tomat 安装目录下的 common\lib 下的 servlet.jar 追加到 classpath 中去,修改后的 classpath 如 下: classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib \tools.jar;%CATALINA_HOME%\common\lib\servlet-api.jar (注意:末尾最好别加分号) 注意:双击打开 classpath 变量时,其值为 jdk 的相关值,即:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar ,现在要追加 tomcat 的该变量值,需要先 在末尾添加一个分号 ( 如果末尾有分号,就不必添加了 ) ,然后再添加 tomcat 的值: %CATALINA_HOME%\common\lib\servlet-api.jar 。
--------------------------------依然没用!!--------------------------------------
5. 在 myapp 下新建一个测试的 jsp 页面,文件名为 index.jsp ,文件内容如下:
| 
           < html > < body > 
            
              <
            
            
              center
            
            
              >
            
            
            
            
               </ body > </ html >  | 
      
    
          6.
    
    
      重启
    
    
      Tomcat 
    
    
      
    
    
          7.
    
    
      打开浏览器,输入
    
    
      
        
          http://localhost:8080/myapp/index.jsp
        
      
    
    
      看到当前时间的话说明就成功了。
    
    
    
  
8. 如果在这一步出现如下错误:
    
           exception
    
    
      
      
            javax.servlet.ServletException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver
      
    
  
那 就检查一下 Tomcat/lib 下是否已经有 el-api.jar el-ri.jar 两个 jar 文件,没有则拷贝到此目录下。重启 Eclipse 测试;同时,如果机器上已经有 Eclipse ,又安装 MyEclipse , MyEclipse 会自动查找 jre, 他首先检测到的是 C:\Program Files\Java ( jdk 安装目录)中的 jre ,而不是 C:\Program Files\Java\jdk1.5.0_06 中的 jre ,原先的 Eclipse 的 jre 也随之改动(解决方法 (Eclipse 为例, MyEclipse 类似 )window->preferences->Java->Installed JRES->Edit-> 更改 jre home 为 C:\Program Files\Java\jdk1.5.0_06 );如果还不行,就将 el-api.jar 包也添加到 classpath 环境变量中去。 如 果这样还不行,就再参考一下这一段:原 因:在 Eclipse 的 Windows -->> Preference -->>Tomcat 设置 Tomcat Home 路径后,又在 Tomcat 的 Advanced 选中设置了相同的 Tomcat Base 路径,关键一步是 Advanced 下有项: Add Java projects to tomcat classpath ,勾上所选项目之后,才可以正常的引起 javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver
解决办法:从哪里勾上的,就从哪里勾回去,把 Add Java projects to tomcat classpath 勾掉。 如 果上面的方法都不行,那就只好出一个必杀招了 —— 卸载安装好的 jdk 、 tomcat 和 eclipse ,并清除 jdk 和 tomcat 的环境变量,然后重新安 装一遍 jdk 、 tomcat 和 eclipse ,并设置 jdk 和 tomcat 的环境变量。可能是我这个人比较搓,我每次将我在公司做好的项目拷回来研究时, 总是会出现这样的错误,并且每次无论怎样搞, tomcat 依然会报 “ java.lang.NoClassDefFoundError: javax/el/ELResolver ” 的错误,最后终于恨下心来,专门花了一个星期的时间来研究解决之道,最后才想出了这个 “ 先毁灭再重建 ” 的不是办法的办法,并且每一次都屡试不爽!
这是另一个高手写的,可这并不是我的问题,我原来投票系统致命的问题是,不能唤醒和调用httpservice服务,所以我就在tomcat环境下,配合jdk1.5,看这个javax.servlet.ServletException是否运作,可是问题却僵持在了永久的http404 ***.jsp不是可调用的问题上,服务器找不到文件!!这么简单,可是就是没调出来。
----------------害的我差点冲动要重装所有软件,还好,我挺住了所有冲动\!!!!----------
    
      
        5 
      
    
    
      
        第四步——建立自己的
        
          Servlet
        
      
    
    
      
          
    
    
      紧接上面第三节中的第三步“建立自己的
    
    
      jsp app
    
    
      目录
    
    
    
    
      ”,接下来写入你的第一个
      
        Servlet:
      
      在你新建的
      
        Application 
        
          myapp/WEB-INF/classes
        
        
          /test
        
      
      目录下新建
      
        HelloWorld.java
      
    
    
    
  
| 
           package test; 
            
              import
            
            
            
            
              java
            
            
              .
            
            
              io
            
            
              .*;
            
            
                | 
      
    
         
    
    
      然后照样用
    
    
      javac HelloWorld.java
    
    
      来编译这个文件,如果出现无法
    
    
      import javax.servlet.*
      
         
    
    
      那么就是应该把
    
    
      C:\Tomcat\common\lib
    
    
      里面的
    
    
      servlet-api.jar
    
    
      文件拷贝到
    
    
      C:\JDK\jre\lib\ext
    
    
      中,再次编译,就没有问题了!
    
    
      
         
    
    
      然后在
    
    
      Tomcat
    
    
      目录里面的
    
    
      C:\Tomcat\webapps\myapp
    
    
      里面按如下的文件结构:
    
    
      
         myapp\index.jsp
      
         myapp\WEB-INF\classes\
      
        test
      
      \HelloWorld.class(
    
    
      把上面生成的
    
    
      HelloWorld.class
    
    
      文件放在这个里面
    
    
      )
    
  
    
      
          Servlet
    
    
      必须使用
    
    
      C:\Tomcat\webapps\myapp\WEB-INF
    
    
      这个目录下面的
    
    
      web.xml
    
    
      文件进行注册,
    
    
      
          
    
    
      用
    
    
      EditPlus
    
    
      打开这个
    
    
      web.xml
    
    
      文件,
    
    
      
          
    
    
      在
    
    
      <web-app></web-app>
    
    
      添加下面这段程序
    
    
      :
    
    
    
  
| 
           
            
              <
            
            
              servlet
            
            
              >
            
            
                | 
      
为什么呢? 因为这样的结构
    
         <servlet>
    
    
      
    
    
         <servlet-name>HelloWorld</servlet-name>
    
    
      
    
    
         <servlet-class>
      
        test
      
      .HelloWorld</servlet-class>//
    
    
      类的路径
    
    
      
    
    
         </servlet>
    
  
表示指定包含的 servlet 类,而以下的结构
    
         <servlet-mapping>
    
    
      
    
    
           <servlet-name>HelloWorld</servlet-name>
    
    
      
    
    
          <url-pattern>/HelloWorld</url-pattern>
    
    
      
    
    
         </servlet-mapping>
    
  
表示指定 HelloServlet 应当映射到哪一种 URL 模式。在修改 web.xml 完毕过后,重新启动 Server ,然后再输入 http://localhost:8080/myapp/HelloWorld , ,那么偌大一个 Hello,World! 等着你呢,恭喜你 !
第五步 :建立自己 java Bean
1. 在你新建的 Application myapp/WEB-INF/classes /test 目录下新建 TestBean.java
| 
           
            
              package
            
            
               test
            
            
              ;
            
            
                | 
      
然后照样用 javac TestBean.java 来编译这个文件。
2. 然后在你新建的应用程序目录 myapp 下新建一个新的 jsp 文件: testBean.jsp
| 
           
            
              <%@
            
            
               page 
            
            
              import
            
            
              =
            
            
              "test.TestBean"
            
            
            
            
              %>
            
            
                | 
      
好了,确定各个文件的位置:
| 
           
            
              myapp\index
            
            
              .
            
            
              jsp
            
            
                | 
      
3. 重启 Tomcat 如果需要的话,在浏览器输入 : http://localhost:8080/myapp/testBean.jsp 幸运的话就会看到 :
Java Bean Test: The author's blog address isHttp://yexin218.cublog.cn
这样就完成了整个 Tomcat 下的 jsp 、 servlet 和 javabean 的配置。
    
      
         如果路径没有问题的话你看下你的目录下是不是有这个文件:/WEB-INF/web.xml
        
        如果没有的话去到别的目录中拷一个过来,比如webdav目录下就有一个。
        
        这时重新起动TOMCAT,就OK了。我也是在网上搞了半天,说这说那个都没不实用,我就发这个最有用。你试试看。我懒人只会懒方法!
        
      
    
  
我看了这句,于是,在web.xml里附加了这句话
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>My Web Application</display-name> <description> A application for test. </description> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>test.HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app>
重新启动了一下服务器,然后,不可思议的是,全好了!!!!!!!!!!!!!!!!!!!!
    要servlet有servlet的反应,要目标地址**.jsp有那个文件的反应。
    
  
---------------------------------我问题最终解决的方法居然是-------------------------------------------------------
我组长从隔壁拉来一个高手,启动服务器又关闭服务器,,若干类似,程序级错误,其实是后来又导进去的el-api.jar包放在tomcat/common/lib下即可,而我又再次附加在了eclipse/windows/properties/installed jres/,我这样一来,就给程序duplicate,多重载了一次。然后就删掉了,删掉以后,就好了。。。
很不服气啊。原本差不多了已经。
但是高手也教给我一点东西:编译JSP,java的包,放在tomcat下的包中。因为这个时候,才能编译通过,而不是放在eclipse下面的包。eclipse下面,又服务器servers这一个关键的项目,就放的是你要用来编译的服务器tomcat!!!!
而弄好的原因,我琢磨:
少放了el-api.jar,servlet-api.jar包在服务器上,所以,它当然没法调用httpservice喽。。
所以高手一进门就预言的的确是对的:
这个错误,就是httpservice错误,应该是配置错误,缺少相应的jar 包!!
唉,我服了,心服口服。
---------------------------------------------------问题远远没有结束-----------------------------------------------------------
最后提交,寥寥几个字,我的心:提交错误,一遍又一遍的提交错误!!
折腾了一天没找到错误,还去琢磨断点怎么设置,后来的后来的后来,我无意中发现了,在run on server的时候,下面有输出的所有信息,原来,作者就怕像我这样的 小辈弄不懂,所以,故意,搞了一系列最关键的类似于:
System.out.println(strSql);
的检查语句,可以检测程序的运行程度。我的菜真让自己见笑,昨个还忙活着要去弄什么断点,全都写好了已经。
拿到NAVICAT上直接调试,发现,在插入时候,问题四的字段varchar(11),白天(上午9:00至下午16:00),根本不止。我猜测应该是提取什么吧,否则,怎么会这么点长度,接着研究,反正我改成50就好了,可是插进去的全是??(??18:30???21:00),乱码。。但最起码,图形已经弄出来了,看着自动生成的所有饼状图,心里还是着实安慰了不少。。
解决方法:
url = "jdbc:mysql://localhost/flexvote?autoReconnect=true&UseUnicode=true&characterEncoding=UTF-8";
在数据库连接的时候采用的这个utf-8方法
插入数据的时候:
<%@ page contentType="text/html; charset=utf-8" import="java.sql.*"%>
contronldb.SetVote_Question4(new String(request.getParameter("Question4").getBytes("ISO8859-1"), "UTF-8"));
这是我随便换着调试做出来的正确结果。仔细一看,是这样的:
四、数据库连接方式使用UTF-8编码
JSP中要把网页输入的中文存入数据库,通常有一个提交(Submit)的过程,是用str=request.getParameter("username"),然后执行update或者insert语句来存入数据库。如何赋值给str很重要,而且这里中文输入与网页所使用的字体编码有关。
1、 网页使用UTF-8,使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")或者str= new String(request.getParameter("username").getBytes(),"UTF-8"),都可以使得存到数据库里的数据是UTF-8编码。
2. 网页使用GBK,使用str= new String(request.getParameter("username").getBytes(),"GBK"),那么存入数据库的是UTF-8编码。
3. 值得注意的是使用UTF-8的数据库连接方式不能存得GBK。
相关:
一、数据库连接方式使用UTF-8
在连接数据库的驱动后面加上这句参数useUnicode=true&characterEncoding=
UTF-8,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&useUnicode=
true&characterEncoding=UTF-8,从数据库里读出中文显示在使用GBK的JSP的网页里,如果数据库里存放的字体编码是UTF-8,在JSP中使用 str=new String(rs.getBytes(1),"UTF-8")或者str=rs.getString(1),可以正确显示中文。如果数据库里存放的是GBK数据,那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")来显示正确的中文。值得注意的是如果页面使用UTF-8,数据库里存放的是UTF-8,也可以用str=new String(rs.getBytes(1),"GBK")正确显示中文。如果网页是UTF-8,而数据库里存放的是GBK,无法直接显示中文,需要2步转换, str=new String(rs.getBytes(1),"GBK"); 再str=new String(str.getBytes("UTF-8"),"GBK"),才可以正确显示中文。

