转载!

Eclipse中JSP生成的class文件去了哪里?

大家都知道,JSP在请求的时候,会先转化成Servlet(其实就是个java类),然后生成class文件,再提供服务。

那么生成的java、class文件在哪呢?Eclipse中根本找不到呀!

  首先应该了解的是Tomcat在Eclipse的映射关系,参考前一篇博文所述:Tomcat的服务器目录配置

  可以了解到,Tomcat在Eclipse中提供了三种位置配置选项:

  1 Use workspace metadata

  2 Use Tomcat installation

  3 Use custom location

  分别对应三种情况说一下,注意要把Server中发布的目录全部删除,然后clean后才能修改该配置项。

  如果你在Eclipse中双击Server配置选项,在Server Location中分别选了如下的选项:

  如果Server Locations选择了第一项Use workspace metadata

  选了上面这项,你的服务器目录和发布目录将会如下:

  服务器目录,即生成的字节码和java文件所在的目录。它在你的eclipse的工作目录中,比如我的工作目录是在F://workspace,那么在该目录下就可以看到这个.metadata目录了。

  参考上面的配置目录F:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

  这就是Tomcat映射的目录,在这个目录中有一个work目录和一个wtpwebapps目录

  work目录中顺着:work\Catalina\localhost\项目名字\org\apache\jsp 就可以找到你的项目对应的java文件和class文件(注意要访问jsp后才会出现!)

  wtpwebapps目录则存放对应的部署资源文件

  如果选择的是第二项,Use Tomcat installation

  如果勾选的use tomcat installation,那么你的tomcat目录将被选定为tomcat所安装的目录。

  还是推荐选择这个吧,毕竟好找一点。

  如果勾选第三项,Use custom location

  目录的结构与上面的类似,上面这两个都是不可以修改的,要么是workspace所在的目录,要么是tomcat的目录。

  选择该项,可以自定义生成的空间。

  另外说一点,JSP的生命周期

  这是老生常谈的问题了,用户把工程部署到tomcat中,然后启动tomcat!此时就可以访问jsp了、

  1 第一次访问JSP,会验证一下是否第一次访问,然后把JSP转化成java(Servlet),再编译成class文件。

  2 生成的class文件中会自动生成几个方法:jspInit()、jspDestroy()、jspService().Tomcat仅仅在第一次请求时,调用jspInit方法,然后调用jspService进行处理。

  3 之后的每个请求,都会分配一个线程调用jspService方法。

  4 如果页面被销毁或者关闭,都会调用jspDestroy

  由于该文件是常驻内存的,又是多线程调用,所以访问的效率和速度都会很快。

  按照前面所述的方法,就可以看到生成的文件结构了。

  

  按照前面所述的方法,就可以看到生成的文件结构了。

  为了展示,这里给出一个样例的JSP

<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%--
language 脚本使用的语言
import 加载类文件
contentType 编码方式
--%>
<!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=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>JSP</h1>

<!-- 客户端可见 -->
<%-- 客户端不可见 --%>
<%!
String s = "xingoo";//声明变量
int add(int a,int b){//声明函数
return a+b;
}
%>
s=<%=s %><br> <%--表达式不以分号结束 --%>
1+2=<%=add(1,2) %><br>
<%
//单行注释 ————————————————快捷键ctrl+/
/* 多行注释 ____________快捷键ctrl+shift+/ */
out.println("s="+s+"<br>");
%>
</body>
</html>

  里面含有一些注释,变量声明和打印输出等等。

  在生成.java文件中,可以看到生成的java文件:

package org.apache.jsp;import javax.servlet.*;
import javax.servlet.http.*; import javax.servlet.jsp.*; import java.util.*; import java.io.*; public final class test1_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { String s = "xingoo";//声明变量 int add(int a,int b){//声明函数 return a+b; } private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=utf-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write('\r'); out.write('\n'); out.write(' '); out.write("\r\n"); out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n"); out.write("<title>Insert title here</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\t<h1>JSP</h1>\r\n"); out.write("\t\r\n"); out.write("\t<!-- 客户端可见 -->\r\n"); out.write("\t"); out.write('\r'); out.write('\n'); out.write(' '); out.write("\r\n"); out.write("\ts="); out.print(s ); out.write("<br> "); out.write("\r\n"); out.write("\t1+2="); out.print(add(1,2) ); out.write("<br>\r\n"); out.write("\t"); //单行注释 ————————————————快捷键ctrl+/ /* 多行注释 ____________快捷键ctrl+shift+/ */ out.println("s="+s+"<br>"); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else log(t.getMessage(), t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.*;
import java.io.*;

public final class test1_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {

String s = "xingoo";//声明变量
int add(int a,int b){//声明函数
return a+b;
}

private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

private static java.util.List _jspx_dependants;

private javax.el.ExpressionFactory _el_expressionfactory;
private org.apache.AnnotationProcessor _jsp_annotationprocessor;

public Object getDependants() {
return _jspx_dependants;
}

public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
}

public void _jspDestroy() {
}

public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {

PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;

try {
response.setContentType("text/html; charset=utf-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;

out.write('\r');
out.write('\n');
out.write(' ');
out.write("\r\n");
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("\t<h1>JSP</h1>\r\n");
out.write("\t\r\n");
out.write("\t<!-- 客户端可见 -->\r\n");
out.write("\t");
out.write('\r');
out.write('\n');
out.write(' ');
out.write("\r\n");
out.write("\ts=");
out.print(s );
out.write("<br> ");
out.write("\r\n");
out.write("\t1+2=");
out.print(add(1,2) );
out.write("<br>\r\n");
out.write("\t");

//单行注释 ————————————————快捷键ctrl+/
/* 多行注释 ____________快捷键ctrl+shift+/ */
out.println("s="+s+"<br>");

out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try { out.clearBuffer(); } catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else log(t.getMessage(), t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}

  声明注释,都可以很详细的看到。

package org.apache.jsp;import javax.servlet.*;
import javax.servlet.http.*; import javax.servlet.jsp.*; import java.util.*; import java.io.*; public final class test1_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { String s = "xingoo";//声明变量 int add(int a,int b){//声明函数 return a+b; } private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=utf-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write('\r'); out.write('\n'); out.write(' '); out.write("\r\n"); out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n"); out.write("<title>Insert title here</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\t<h1>JSP</h1>\r\n"); out.write("\t\r\n"); out.write("\t<!-- 客户端可见 -->\r\n"); out.write("\t"); out.write('\r'); out.write('\n'); out.write(' '); out.write("\r\n"); out.write("\ts="); out.print(s ); out.write("<br> "); out.write("\r\n"); out.write("\t1+2="); out.print(add(1,2) ); out.write("<br>\r\n"); out.write("\t"); //单行注释 ————————————————快捷键ctrl+/ /* 多行注释 ____________快捷键ctrl+shift+/ */ out.println("s="+s+"<br>"); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else log(t.getMessage(), t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }

转载于:https://www.cnblogs.com/tnt-33/p/8624536.html

#tomcat#生成的jsp转换问题相关推荐

  1. JSP转换Servlet

    JSP工作原理 一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet JSP引擎使用javac把转换成的servlet的源文件编译成相应的class文件 对每一个请求,JS ...

  2. 基于jacoco+ant+tomcat生成代码覆盖率报告

    基于jacoco+ant+tomcat生成代码覆盖率报告 废话少说,直接上干货 1.关于项目代码 2.关于工具及jar包生成 3.环境配置 4.修改配置参数 5.命令行启动项目 6.获取覆盖率报告 最 ...

  3. MyEclipse和tomcat结合编写jsp对于中文乱码的解决方法

    一.Java和jsp 中文乱码原因和解决方法: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因有两方面: 第一方面:J ...

  4. Tomcat容器、JSP和Servlet

    目录 JSP Tomcat.JSP和Servlet JSP JSP全名为Java Server Pages,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的HTML网页 ...

  5. Java使用Tomcat服务器打开jsp等文件出现源码的解决办法

    问题详情 在最近的Servlet的学习中,我意外的发现以前写在webapp文件夹里的页面文件使用idea打开全部都有问题. html文件 可以打开,但显示异常,大家可以看看有什么问题 导航栏显示如下: ...

  6. Tomcat搭建实现jsp连接数据库

    Tomcat环境配置及实现jsp通过tomcat连接mysql/mariadb 1 什么是Tomcat? 2 什么是java 3 安装配置Tomcat即其他安装配置 1 .什么是Tomcat ​ 官方 ...

  7. tomcat生成catalina.out文件

    生成catalina.out方法 导语:本文为Windows下生tomcat将控制台信息输出到catalina.out文件  且 保证能实时查看日志文件的方法. 一.创建catalina.out 1. ...

  8. PHP生成PDF并转换成图片爬过的坑

    需求描述:根据订单通过模板合同生成新的PDF合同通过e签宝签约后转为图片给用户下载. 需求整理: 1.如何生成PDF文件:使用TCPDF扩展生成.思考: ⑴为了方便将模板中的固定占位符替换为订单中的内 ...

  9. jsp转换java_JSP编码转换

    关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容 ...

最新文章

  1. 30 分钟让你掌握 Git 的黑魔法
  2. 深入浅出RxJava(三:响应式的好处)
  3. CMOS图像传感器——相位对焦
  4. MySQL之Procedure(存储过程)和Function(函数)
  5. 什么是P问题、NP问题和NPC问题
  6. python编解码的字节与字符串相互转换
  7. ros buntu安装手册_超详细 ROS安装教程
  8. 三极管的下拉电阻作用是什么?
  9. 生物信息学_测序技术(一)DNA测序
  10. 高考录取查询显示内部服务器错误,为什么江苏成人高考成绩查询网页一直打不开...
  11. 方法教程 | Python爬虫:爬取美女图片,看到了意想不到的场景美女图片
  12. Policy Center > Permissions and APIs that Access Sensitive Information
  13. win10主题更换_小白如何做到不更换硬件提升电脑性能做到不卡顿?
  14. k8s 详解 pod 生命周期 容器探测(live and ready) 钩子函数 pod的重启策略
  15. DeFi之三:未来什么样——资产通证化
  16. springBoot整合SqlSessionTemplate使用
  17. 二维码制作(QRCode)
  18. iOS进阶_密码学(二.钥匙串访问)
  19. [ ARP攻击_arpspoof ]
  20. 绿色抓屏截屏工具:FastStoneCapture

热门文章

  1. 重写HttpServlet
  2. 基于Windows下使用Docker 部署Redis
  3. 将redis作为windows系统的系统服务
  4. 坐在宝座上圣洁羔羊 男声N重唱
  5. SQLServer数据库的备份/恢复的3中策略实例
  6. 大学生学习c语言方法,针对在校大学生的C语言入门学习——函数
  7. java jsp 文件上传_用JSP编写文件上传
  8. 正态分布里的西格玛_西格玛和西格玛水平
  9. C中printf函数的实现原理
  10. leetcode算法题--二叉树中的列表★