博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eclipse中JSP生成的class文件去了哪里?(转)
阅读量:5117 次
发布时间:2019-06-13

本文共 4735 字,大约阅读时间需要 15 分钟。

 

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

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

  首先应该了解的是Tomcat在Eclipse的映射关系,参考前一篇博文所述:

  可以了解到,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 编码方式 --%>    
Insert title here

JSP

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

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

  在生成.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("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("
\r\n"); out.write("Insert title here\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\t

JSP

\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("
"); out.write("\r\n"); out.write("\t1+2="); out.print(add(1,2) ); out.write("
\r\n"); out.write("\t"); //单行注释 ————————————————快捷键ctrl+/ /* 多行注释 ____________快捷键ctrl+shift+/ */ out.println("s="+s+"
"); out.write("\r\n"); out.write("\r\n"); out.write(""); } 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/labing/p/5869745.html

你可能感兴趣的文章
AS3优化性能笔记二
查看>>
wpf combobox
查看>>
Java高阶回调,回调函数的另一种玩法
查看>>
WCF公开服务元数据方式
查看>>
2014蓝桥杯问题 C: 神奇算式
查看>>
ElasticSearch(站内搜索)
查看>>
Node.js简单介绍并实现一个简单的Web MVC框架
查看>>
Linux压缩与解压缩
查看>>
哈希(Hash)与加密(Encrypt)相关内容
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
CGRect知多少
查看>>
Android 开发环境安装配置手册
查看>>
Qt工程文件说明
查看>>
[SQL Server 系] T-SQL数据库的创建与修改
查看>>
WIN7下搭建CORDOVA环境
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>