查看: 8214|回复: 4

[转载] 查看Jsp编译后生成的Java文件

[复制链接]
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
发表于 2015-3-13 10:40 | 显示全部楼层 |阅读模式
本帖最后由 liyihongcug 于 2015-3-13 11:49 编辑

能大多数Jsp开发员在写完程序测试通过后,不太会关注Jsp生成的Java文件,其实,通过Java代码,更能体现程序代码的真正含义,对进一步研究程序代码的后台运行情况是非常有帮助的。例如,用Jsp编写代码时,有时候用<%!   %>,有时候用<%   %>,加不加感叹号,到底有什么不同吗? (Jsp代码加感叹号与不加感叹号的区别)这类问题在教程里一般不会涉及到,从哪里找到问题的突破口呢——Jsp生成的Java文件!所以,对于Jsp开发,有必要知道这点技能。
      对于Tomcat而言,JSP页面生成的Java文件放在work路径对应的Web应用下。例如:
      D:\Tomcat5.5\webapps\test\test.jsp
      生成对应的java文件
      D:\Tomcat5.5\work\Standalone\localhost\test\
      Jsp与Servlet的关系
      1、 JSP文件必须在JSP服务器内运行。
      2、 JSP文件必须生成Servlet才能执行。
      3、 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。
      4、 JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。
      5、 JSP页面的静态内容、JSP脚本都会转换成Servlet的xxxService()方法,类似于自行创建Servlet时service()方法。
      6、 JSP声明部分,转换成Servlet的成员部分。所有JSP声明部分可以使用private,protected,public,static等修饰符,其他地方则不行。
      7、 JSP的输出表达式(<%= ..%>部分),输出表达式会转换成Servlet的xxxService()方法里的输出语句。
      8、 九个内置对象要么是xxxService()方法的形参,要么是该方法的局部变量,所以九个内置对象只能在JSP脚本和输出表达式中使用。
      从上述第5、6点,其实就可以解释Jsp代码加感叹号与不加感叹号的区别的问题。
      如何在Tomcat下指定Jsp生成的Java文件路径?
      当需要自定义Jsp生成的Java文件位置时,可以通过如下两种方法来实现:
      方法1.在tomcat的配置文件server.xml(路径:tomcat路径\conf下面)里,找到:<Context docBase="D:\workspace\icinfo\trunk\web" path="" reloadable="false" debug="0" crossContext="true" workDir="D:\workspace\icinfo\trunk\web\WEB-INF\lib\CommonPKI\META-INF\work"/>,添加如上的workDir=""属性,""里写你的要看到.java/.class的路径.
      方法2.到conf\Catalina\localhost下找到你项目的.xml培植文件,找到方法1中的代码,后续操作同方法1.
      怎样保留Weblogic 中Jsp编译后生成的Java文件?
      运行自己配置的web应用,往往只能看见weblogic编译之后的class文件。而看不见编译前的java的文件。为了调试方便,我们有时候是想看编译前的java文件的。
      在weblogic.xml中加入:
<jsp-descriptor>
  <jsp-param>
    <param-name>keepgenerated</param-name>
    <param-value>true</param-value>
  </jsp-param>
</jsp-descriptor>
      即可。如果没有,在WEB-INF中建立一个weblogic.xml文件。增加:

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE weblogic-web-app
    PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
    "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd" >
<weblogic-web-app>
    <jsp-descriptor>
        <jsp-param>
            <param-name>keepgenerated</param-name>
            <param-value>true</param-value>
        </jsp-param>
    </jsp-descriptor>
</weblogic-web-app>
      看看web应用在Weblogic中生成临时文件中,有Java文件了吧!
servlet  annotation
import javax.servlet.annotation.WebServlet;
@WebServlet(name="Servlet3.0",urlPatterns={"/Servlet3"})
public class HelloServlet extends HttpServlet {
http://www.cnblogs.com/xdp-gacl/p/4224837.htmlpackage servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
12  * 使用注解标注过滤器
13  * @WebFilter将一个实现了javax.servlet.Filte接口的类定义为过滤器
14  * 属性filterName声明过滤器的名称,可选
15  * 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)
16  */
@WebFilter(filterName="Servlet3Filter",urlPatterns="/*")
public class Servlet3Filter implements Filter {

        @Override
        public void destroy() {
                // TODO Auto-generated method stub
                 System.out.println("过滤器销毁");
        }

        @Override
        public void doFilter(ServletRequest arg0, ServletResponse arg1,
                        FilterChain arg2) throws IOException, ServletException {
                // TODO Auto-generated method stub
                System.out.println("执行过滤操作");
                arg2.doFilter(arg0, arg1);
        }

        @Override
        public void init(FilterConfig arg0) throws ServletException {
                // TODO Auto-generated method stub
                System.out.println("过滤器初始化");
        }
}toLocaleString()这个方法主要的作用是将时间转化成String类型的!
System.out.println(new java.util.Date());输出:Thu Jan 27 14:43:28 CST 2011
System.out.println(new java.util.Date().toLocaleString())输出:2011-1-27 14:45:21
不过可以用SimpleDateFormat这种方法进行转换,也可以使用Calendar来操作日期。Calendar这个更适用于我们开发,简单明了
package me.gacl.web.listener; 2 3 import javax.servlet.ServletContextEvent; 4 import javax.servlet.ServletContextListener; 5 import javax.servlet.annotation.WebListener; 6 7 /** 8 * 使用@WebListener注解将实现了ServletContextListener接口的MyServletContextListener标注为监听器 9  */10 @WebListener11 public class MyServletContextListener implements ServletContextListener {12 13     @Override14     public void contextDestroyed(ServletContextEvent sce) {15         System.out.println("ServletContex销毁");16     }17 18     @Override19     public void contextInitialized(ServletContextEvent sce) {20         System.out.println("ServletContex初始化");21         System.out.println(sce.getServletContext().getServerInfo());22     }23 }
孤傲苍狼
  • DateFormat ddf = DateFormat.getDateInstance();     
  • DateFormat dtf = DateFormat.getTimeInstance();     
  • DateFormat ddtf = DateFormat.getDateTimeInstance();     
  • Date date = new Date();     
  • System.out.println("日期:" + ddf.format(date));     
  • System.out.println("时间:" + dtf.format(date));     
  • System.out.println("日期时间:" + ddtf.format(date));     
  • SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateTimeInstance();     
  • System.out.println("日期时间:" + sdf.format(date));   http://blog.csdn.net/shuziluoji1988/article/details/8487275




论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2015-3-13 11:50 | 显示全部楼层
本帖最后由 liyihongcug 于 2015-3-17 20:53 编辑

package me.gacl.web.controller;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

//使用@WebServlet配置UploadServlet的访问路径
@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
//使用注解@MultipartConfig将一个Servlet标识为支持文件上传
@MultipartConfig//标识Servlet支持文件上传
public class UploadServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
             request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            //存储路径
            String savePath = request.getServletContext().getRealPath("/WEB-INF/uploadFile");
            //获取上传的文件集合
            Collection<Part> parts = request.getParts();
            //上传单个文件
            if (parts.size()==1) {
                 //Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
                //Part part = parts[0];//从上传的文件集合中获取Part对象
                Part part = request.getPart("file");//通过表单file控件(<input type="file" name="file">)的名字直接获取Part对象
                //Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
                //获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
                String header = part.getHeader("content-disposition");
                //获取文件名
                String fileName = getFileName(header);
                //把文件写到指定路径
                part.write(savePath+File.separator+fileName);
            }else {
                //一次性上传多个文件
                for (Part part : parts) {//循环处理上传的文件
                    //获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
                    String header = part.getHeader("content-disposition");
                    //获取文件名
                    String fileName = getFileName(header);
                    //把文件写到指定路径
                    part.write(savePath+File.separator+fileName);
                }
            }
            PrintWriter out = response.getWriter();
            out.println("上传成功");
            out.flush();
            out.close();
    }

     /**
     * 根据请求头解析出文件名
     * 请求头的格式:火狐和google浏览器下:form-data; name="file"; filename="snmp4j--api.zip"
     *                 IE浏览器下:form-data; name="file"; filename="E:\snmp4j--api.zip"
     * @param header 请求头
     * @return 文件名
     */
    public String getFileName(String header) {
        /**
         * String[] tempArr1 = header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别
         * 火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}
         * IE浏览器下:tempArr1={form-data,name="file",filename="E:\snmp4j--api.zip"}
         */
        String[] tempArr1 = header.split(";");
        /**
         *火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}
         *IE浏览器下:tempArr2={filename,"E:\snmp4j--api.zip"}
         */
        String[] tempArr2 = tempArr1[2].split("=");
        //获取文件名,兼容各种浏览器的写法
        String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\")+1).replaceAll("\"", "");
        return fileName;
    }
   
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
}转自:http://zhidao.baidu.com/link?url ... 9f5r-YP5ZDxkWHLBXIKJSP页面中有哪些方法可以传递参数?页面的参数怎么传递到action?请大家帮帮忙,我有些搞不清楚!答案找到了,谢谢大家!jsp中的参数传递1:利用表单来传递值:    <form action="target.jsp"> <input type=text name="usename" value="tom"></form>2:l利用隐藏字段来传递值   <form action="target.jsp"> <input type=hidden name="test" value="test"></form>3:利用cookie对象来传递Cookie cookie=new Cookie("my","liuliu")cookie.setMaxage(60*60);(以秒为单位)最大的生命周期response.addCookie(cookie);Cookie[] cookies=request.getCookies();(可以通过遍历此数组来访问值)4:session***java.util.Map<String, Object> session = ActionContext.getContext().getSession();***session.put("s_username", username);***String username = (String) session.get("s_username");session.setAttribute("paramName",paramname);String name=session.getAttribute("paramName")5:通过链接来传递String name=request.getParameter("name");<a href="welcome.jsp?name=<%=name%>"> <%     Cookie cookie = new Cookie("write","cookie_write");   cookie.setComment("这是一个Cookie写入测试!");   cookie.setVersion(100);   cookie.setMaxAge(3600);   //cookie.setDomain(".iisp.com");   response.addCookie(cookie);     %> <%     Cookie cookies[]=request.getCookies();      out.println(" cookie num:"+ cookies.length);       out.println("<br>"+"<br>");     for(int i = 0;i<cookies.length;i++){        if(cookies.getName().equals("write"))          out.println(cookies.getValue());      /* out.println("getName="+cookies.getName()+"<br>");        out.println("getValue="+cookies.getValue()+"<br>");        out.println("getComment="+cookies.getComment()+"<br>");        out.println("getDomain="+cookies.getDomain()+"<br>");       out.println("getPath="+cookies.getPath()+"<br>");       out.println("getMaxAge="+cookies.getMaxAge()+"<br>");       out.println("getVersion="+cookies.getVersion()+"<br>");       out.println("getSecure="+cookies.getSecure()+"<br>");       out.println("<br>"+"<br>");   */    }     %> ublic List<Announcement> findAll() {
  // TODO Auto-generated method stub
  System.err.println("此方法已进入......");
  List<Announcement> list = selectList(Announcement.class,AnnouncementMapper.findAll);
  
  if (list != null) {
   return list;
  } else {
   return null;
  }
}类名为Biz<%
Biz biz = new Biz();
List<Announcement> list = biz.findAll();
out.println("<ul>");
for(Announcement a:list){
    out.println("<li>" + a.getSomeProperty() + "</li>");
}
out.println("</ul>");
%>在eclipse下,package,source folder,folder都是文件夹.  

它们的区别如下:  
package:当你在建立一个package时,它自动建立到source folder下,也只能建立在这个目录之下.  

source folder:存放java源代码的文件夹,当然也包括一些package文件夹,还可以包含其他文件.  
项目构建后,source folder里面的java自动编译成class文件到相应的bin文件夹中,其他文件也会移到到相应的目录下.  

folder:里面可以放入任何文件.包括java源文件,jar文件,其他文件(例如,图片,声音等).在此我说明一下,如果里面含有java源文件,不管程序是否正确,eclipse都不会报错,把它们当做普通文件处理.但是项目如果要使用这里面的文件,情况就不同了.  

package,source folder,folder 之间相互转换
package 转成 folder 显示:选中package, build path-> Exclude
folder 转成 package 显示:选中folder, build path-> Include

package 转成 source folder 显示:选中package, build path-> Use as Source folder
source folder 转成 package 显示:选中folder, build path-> Remove from BuildPath

pacage 与 source folder 的转换同上 package servlets;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* 使用@WebListener注解将实现了ServletContextListener接口的MyServletContextListener标注为监听器
*/
@WebListener
public class listen1 implements ServletContextListener {

        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println("ServletContex销毁");
        }

        @Override
        public void contextInitialized(ServletContextEvent arg0) {
                // TODO Auto-generated method stub
                 System.out.println("ServletContex初始化");
                 System.out.println(arg0.getServletContext().getServerInfo());
        }

}http://www.cnblogs.com/nankezhis ... /09/getandpost.html

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2015-3-17 21:16 | 显示全部楼层
作为一位Java程序员,如果您没有接触过开源软件、项目或框架的话,恐怕有些不可思议。轰轰烈烈的开源运动起源于Linux操作系统,Apache基金会在其中扮演了中流砥柱的角色,业界巨擘SUN,IBM, BEA 和Oracle等公司的积极参与,使得声势浩大的开源运动成为软件开发领域势不可挡的力量。2001年11月,IBM向Apache基金会捐献出Visual Age for Java,这个看似穷途末路的产品经众多高手的改造,演变为辉煌一时的Eclipse,直接击败了不开源的JBuilder,让做编译器起家的Borland公司几乎关张大吉。Eclipse这个产品如此经典,以至于微软的Visual Studio都得向它学习。在Apache Harmony的围追堵截下,Java的发明者Sun公司一看势头不妙,于2006年宣布Java开源,随后又公开了其旗舰级产品Solaris的源代码。今年1月,开源的死对头、冷酷自私的微软也不得不在MS-RL协议下公开.Net的源代码。但是,在这如火如荼的开源运动中,我们中国的程序员又有多少贡献呢,我们开创了哪些框架、项目和产品,为开源界添砖加瓦呢?以笔者短浅的目光看来,我们对开源界贡献的东西恐怕很少,能够与国外经典开源项目一较高下的,少之又少矣! 作为一名中国的程序员,咱们能没有遗憾吗?为什么经典的Apache Web Server不是中国人写的;为什么Linus Torvalds在大学时代就写出Linux并振臂一呼,应者云集;为什么JBoss能与巨无霸式的Websphere相抗衡;为什么MySQL能在Oracle和SQL Server的夹击下发展并壮大…… ?如此等等问题,在遗憾之余,我想我们应该花点时间好好思考一下,中国的软件产业怎么了,中国的程序员又怎么啦? 在笔者看来,我们的程序员对开源的理解是相当狭隘的。国学大师王国维曾说过,古往今来成大学问大事业者要经历三种境界,“昨夜西风凋碧树,独上高楼,望尽天涯路”,这是第一重境界,迷惘也;“衣带渐宽终不悔,为伊消得人憔悴”,苦苦求索之境界也;第三重境界为“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”,经历多少次的失败和挫折后,终于参透真谛,领悟真理。我觉得开源也有三重境界: 首先,我们要敞开心胸,拥抱开源(Open to Open Source)。这重境界我们大家都能做到,拿来主义嘛,谁人不会。当我们的项目需要数据库时,就去下载一个免费MySQL;需要IDE时,去下载Eclipse;需要版本控制工具时,就去下载CVS;需要写搜索引擎时,Lucene可能是我们的最爱;当我们开发J2EE Web应用时,Struts/JSF加Hibernate/iBATIS再加上Spring或许成为我们的首选架构。但是,我们绝大部分程序员都停留在这个层次上,大家下载之后,看看文档介绍,安装、配置并能运行,就以为万事大吉,一切顺利。偶尔遇到一些问题,去Google一搜,答案立马可得。 其次,我们要深入开源,了解开源(Dig into Open Source)。要达到这个层次,就有些难度了。我们不但要知其然,还要知其所以然。“知其所以然”的最好办法就是下载源代码,仔细研读,揣摩并领会源代码的精义,看看这些经过诸多高手修改的源代码究竟藏有什么玄机,我们能从其中学习到哪些设计思想及设计模式,能复用其中哪些源代码,人家运用了哪些软件管理思想把这些来自世界各地程序员的劳动汇集成一个产品,代码架构如何,软件配置管理又是怎样进行的……,等等等等,我们从源代码中学习的东西太多了。在阅读源代码时,我们要多问自己几个为什么,这样就会收获更多。 再次,我们要融入开源,贡献开源(Get involved in Open Source)。当我们彻底理解该项目源代码后,我们应发挥一下“人人为我,我为人人”的思想,或结合您的实际需要,或结合您的新想法,或针对Mail lists上的问题,对该开源项目加以改进和创新,并把自己的代码贡献出来,让大家评估。当然,如果您有好的想法,您完全可以创建自己的开源项目,Apache基金会中众多的开源项目不都是我们广大程序员一手创建的吗?但是,在创建新开源项目时,切忌不要重新发明轮子。 笔者才疏学浅,想以Apache Jakarta项目包中的核心项目Tomcat为例,希望通过阅读源码,能从这个经典项目中学到更多的东西,为我们中国的开源事业起到抛砖引玉的作用。 下面我们就开始我们的Tomcat源码学习之旅。 1. 下载Tomcat6.0的源代码 首先,我们得下载Tomcat6.0的源代码。Tomcat源代码的版本控制工具不是CVS,而是Subversion,如果您的机器上没有安装Subversion,请从 http://subversion.tigris.org/ser ... entList?folderID=91 下载并安装这个开源的版本控制工具。当然,如果您想从Eclipse中直接导入Tomcat源代码,请从http://subclipse.tigris.org/update_1.0.x下载Subversion插件,即可导入Tomcat源代码。安装完成后,请在MS-DOS窗口中键入svn export help,您将会看到: C:\\Documents and Settings\\carlwu>svn help export export: 产生一个无版本控制的目录树副本。 用法: 1、export URL 2、export PATH1 1、从 URL 指定的仓库,导出一个干净的目录树到 PATH。如果有指定 REV 的话,内容即为该版本的,否则就是 HEAD 版本。如果 PATH 被省略的话,URL的最后部份会被用来当成本地的目录名称。 2、在工作副本中,从指定的 PATH1 导出一个干净的目录树到 PATH2。如果 有指定 REV 的话,会从指定的版本导出,否则从工作副本导出。如果 PATH2 被省略的话,PATH1 的最后部份会被用来当成本地的目录名称。 如果没有指定 REV 的话,所有的本地修改都保留,但是未纳入版本控制 的文件不会被复制。 如果指定了 PEGREV ,将从指定的版本本开始查找。 有效选项:。。。。。。 我们看到Subversion给我们提供了非常友好的帮助,并且是中文的,看来中国程序员对这个开源项目有所贡献。接下来,请在MS-DOS下键入: svn export http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_0/ D:\\carl_wu\\tomcat\\src\\ 这个命令的意思是把Tomcat6.0的源代码从Subversion库中导入到本机的D:\\carl_wu\\tomcat\\src\\目录,命令运行后,您稍等几分钟,就会看到Tomcat的源代码顺利导入到目标目录。下面是源代码的目录机构,从这个目录结构中,我们可以看出该项目的开发者使用的IDE是Eclipse,因为我们看到了熟悉的.project及.classpath文件。如果您打算开发一个Stand alone的Java应用程序,不妨借鉴一下Tomcat的目录结构,把脚本文件放在bin目录,将xml和properties配置文件放在conf目录中,把Java源码文件放在java或者src目录中,资源文件比如说图片文件,ini文件及其它的一些静态资源文件可以放在res目录,测试源代码可以放在test目录中。这是一个典型的Java应用程序的目录机构,笔者以前曾接触到一个来自美国的产品,其源代码目录结构和Tomcat及其相像。   2. 编译并运行 代码下载后,我们接下来就是要编译并运行Tomcat。一提编译,我们不禁会想到可爱的Ant。不错,Tomcat正是以Ant作为编译工具,如果您还没有安装,请从http://ant.apache.org/bindownload.cgi 处下载并安装它。然后,请从Tomcat的源代码文件找到build.properties.default文件,并将该文件复制到build.properties,然后打开build.properties,找到下面这行: base.path=/usr/share/java 将它改为: base.path= D:/carl_wu/tomcat/share 在Tomcat编译过程中,Ant会让我们下载一些必要的依赖项目,base.path目录就是用来保存这些项目文件的,我们可以将这个属性指向一个已经存在的目录。修改完base.path后,我们回到MS-DOS窗口,切换到Tomcat源代码所在目录,然后运行ant download命令,如下图所示:   一分钟未到,Ant就告诉我们一个错误并提示我们编译失败,具体错误信息如下: downloadzip: Getting: http://sunsite.informatik.rwth-a ... eclipse-JDT-3.2.zip To: D:\\carl_wu\\tomcat\\share\\file.zip Error opening connection java.io.FileNotFoundException: http://sunsite.informatik.rwth-a ... eclipse-JDT-3.2.zip Error opening connection java.io.FileNotFoundException: http://sunsite.informatik.rwth-a ... eclipse-JDT-3.2.zip Error opening connection java.io.FileNotFoundException: http://sunsite.informatik.rwth-a ... eclipse-JDT-3.2.zip Can't get http://sunsite.informatik.rwth-a ... eclipse-JDT-3.2.zip to D:\\carl_wu\\tomcat\\share\\file.zip BUILD FAILED D:\\carl_wu\\tomcat\\src\\build.xml:554: The following error occurred while executing this line: D:\\carl_wu\\tomcat\\src\\build.xml:514: Can't get http://sunsite.informatik.rwth-a ... eclipse-JDT-3.2.zip to D:\\carl_wu\\tomcat\\share\\file.zip Total time: 41 seconds 这个编译错误非常简单,就是找不到http://sunsite.informatik.rwth-a ... eclipse-JDT-3.2.zip 文件。有人可能会想,Tomcat的编译和Eclipse的JDT有什么关系?其实不然,Tomcat是在Eclipse下开发的,所以需要Eclipse的JDT(Java Development tooling)插件来编译Tomat源代码。既然找不到,我们只好自己动手,上Google一搜,马上发现这个文件的有效下载地址为:http://mirror.calvin.edu/eclipse ... eclipse-JDT-3.2.zip。我们打开刚才的build.properties文件,将其34行修改为: jdt.loc= http://mirror.calvin.edu/eclipse ... eclipse-JDT-3.2.zip 修改保存build.properties文件后,重新开始ant download任务。这次我们等的时间较长,因为eclipse-JDT-3.2.zip大约有19M,下载需要一段时间。我们可乘此机会去泡杯茶弄点咖啡什么的,等我们品茶回来,发现敬业的蚂蚁Ant告诉我们编译成功,虽然编译器给出几个警告。这时我们可发现刚才创建的base.path目录(D:\\carl_wu\\tomcat\\share)中已经下载了6个依赖项目,它们都是Tomcat编译所必须的。 下面就开始真正的编译任务了,请在MS-DOS窗口内键入ant并回车,Ant将在2分钟内编译1000多个源文件并将Tomcat部署到output目录。编译顺利完成后,请打开Tomcat的源代码目录,会发现多了一个output目录,这是Ant的编译后的输出目录。请打开Tomcat源代码的output\\build\\bin子目录,双击startup.bat文件,我们即可成功启动Tomcat6.0,此时我们的编译工作就算顺利完成了。 3. 导入源代码到Eclipse 3.1 请打开Eclipse,新建一个Java项目,然后点击“Next”按钮,请选择“Create project from existing source”, 并在Directory文本框内填入我们刚才下载的Tomcat源代码目录(i.e. D:\\carl_wu\\tomcat\\src),然后点击“Next”直至结束。   3.2 我们将会看到Eclipse拒绝编译,这是因为Eclipse找不到该项目指定的库文件。请右击该项目,在弹出菜单中选择“Properties”à“Libraries”,然后删除两个以TOMCAT_LIBS开头的两个库文件,只保留一个JRE库文件,然后点击“OK”按钮,这时Eclipse开始编译Tomcat源代码,但是发现一堆错误,这是因为我们没有为该项目添加编译所必须的Jar包。 3.3 准备好Tomcat项目所必须的jar文件,其实,刚才我们运行ant download任务时,已经下载过这些jar文件包。 ant.jar (请在ant安装目录的lib子目录中拷贝) commons-collections-3.1.jar (从刚才Ant下载的commons-collections-3.1子目录中拷贝) commons-dbcp-1.2.1.jar(从刚才Ant下载的commons-dbcp-1.2.1子目录中拷贝) commons-logging-1.1.jar(如果您本机没有这个jar包,请从http://commons.apache.org/downloads/download_logging.cgi处下载) commons-pool-1.2.jar(从刚才Ant下载的commons-pool-1.2子目录中拷贝) org.eclipse.jdt.core_3.2.0.v_671.jar(从刚才Ant下载的eclipse\\plugins子目录中拷贝) 3.4 当我们准备好这些jar文件后,将这些文件拷贝到某一目录(比如说D:\\carl_wu\\tomcat\\tomcat_lib目录),然后在Eclipse中新建一个User Libraries,我们将这个新建的User Libraries命名为TOMCAT_LIBS,并把这些文件加到TOMCAT_LIBS。然后将我们新建的TOMCAT_LIBS添加到Tomcat6项目。另外,别忘了把JUnit库也加到Tomcat6项目。这时Eclipse开始重新编译,编译过程顺利通过,所有错误均消失,此时Tomcat6项目的目录结构如下:   还有,请把test目录也加入到源代码中,方法是在Eclipse中右击”test”目录,然后在弹出菜单中选择“Build path”à”Use as Source Folder”,之后我们会看到test目录上就多了个源代码的符号,如上图所示。 3.5在Eclipse中运行Tomcat。请找到Tomcat的启动主类org.apache.catalina.startup.Bootstrap,右击这个类,在弹出菜单中选择“Run As…”à”Open Run Dialog…”,然后在弹出的“Run”窗口中填入程序运行参数“start”和JVM运行参数catalina.home,如下面窗口所示:   然后点击“Run”按钮,我们将会看到Tomcat正常启动。恭喜,咱们的Tomcat源码已经成功导入Eclipse,这时,可视化的UML分析工具及Debug工具就能派上用场了。 3.5 调试Tomcat,请打开org.apache.jasper.compiler.Compiler类的源代码,在generateJava()方法的第一行打一个断点,然后在Eclipse的调试状态下运行Tomcat,等Tomcat运行后,打开我们的浏览器,在地址栏中输入http://localhost:8080/examples/jsp/jsp2/el/basic-comparisons.jsp并回车,然后我们可观察到Eclipse此时切换至调试视图:   上面的小实验表明我们可以在Eclipse中通过Debugger观察Tomcat的内部运行机理。另外补充一点,上面的generateJava方法是将jsp动态编译至java class,这个方法只是在第一次请求或者Jsp源码发生变化时执行,如果您再次在浏览器中发送同样的请求,您将看不到上图的Debug界面,因为该方法不再执行。 另外,还有一点很有意思。Tomcat6以前版本的源代码分散在好几个子项目中,他们分别叫做jakarta-servletapi-5,jakarta-tomcat-5,jakarta-tomcat-catalina,jakarta-tomcat-connectors和jakarta-tomcat-jasper,我觉得Tomcat的开发者可能嫌这样做太麻烦了,所以Tomcat6版本中将这些子项目都合并在一起了。但是,这种做法不利于我们阅读理解源代码http://carllgc.blog.ccidnet.com/ ... 3093-type-blog.html

使用道具 举报

回复
论坛徽章:
2
懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
发表于 2015-3-18 02:09 | 显示全部楼层
路过支持。。。。。

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2015-3-19 17:23 | 显示全部楼层
本帖最后由 liyihongcug 于 2015-3-19 17:36 编辑

http://blog.csdn.net/yiyuhanmeng/article/details/7548505  传参解决办法
response.setContentType("text/html;charset=gbk");
      request.setCharacterEncoding("gbk");------------------------关键这个一般可以
      String param = request.getParameter("param");
      if(param!=null)
      {
                String str=java.net.URLDecoder.decode(param,"GB2312");
                        str=new String(str.getBytes("ISO-8859-1"));                        
                        out.print(str);
                        param=str;
      }http://blog.sina.com.cn/s/blog_4d19b6210100h04c.html  session修改时间

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表