0x00 JavaEE 基础
JSP: 全名为java server page,其根本是一个简化的Servlet。
Servlet:Servlet是一种服务器端的Java应用程序,可以生成动态的Web页面。
JavaEE: JavaEE是J2EE新的名称。改名目的是让大家清楚J2EE只是Java企业应用。
什么叫Jsp什么叫Java我真的非常让大家搞清楚!拜托别一上来就来一句:"前几天我搞了一个jsp的服务器,可难吭了。"。
请大家分清楚什么是jsp什么是JavaEE! Java平台结构图:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第1张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第1张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/1a5596b8e4764c188986797f1cac964d.jpg.jpg)
可以看到Java平台非常的庞大,而开发者的分化为:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第2张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第2张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/98874139fccf42aaab904d7f119d1c9d.jpg.jpg)
列举这两个图的原因就是让你知道你看到的JSP不过是冰山一角,Jsp技术不过是Java初级开发人员必备的技术而已。
我今天要讲的就是Java树的最下面的两层了,也是初级工程师需要掌握的东西。
Web请求与相应简要的流程:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第3张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第3张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/d7ebe38409b442feb867e05ba2172939.gif.jpg)
这是一个典型的就是客户端发送一个HTTP请求到服务器端,服务器端接收到请求并处理、响应的一个过程。
如果请求的是JSP,tomcat会把我们的JSP编译成Servlet也就是一个普通的Java类。
其实JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例。Servlet又是一个普通的Java类它编译后就是一个普通的class文件。
这是一个普通的jsp脚本页面,因为我只用JSP来作为展示层仅仅做了简单的后端数据的页面展示:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第4张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第4张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/32525f59da074b87b634cb83bdc713d9.png.jpg)
上图可以非常清晰的看到通常的Jsp在项目中的地位并不如我们大多数人所想的那么重要,甚至是可有可无!因为我们完全可以用其他的东西来代替JSP作为前端展示层。 我们来看一下这个页面编译成class后是什么样子:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第5张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第5张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/34bd001c55d842149d9ea03be3d92305.png.jpg)
你会发现你根本就看不懂这个class文件,因为这是字节码文件我们根本就没法看。通过我们的TOMCAT编译后他编程了一个Java类文件保存在Tomcat的work目录下。
文件目录:C:\apache-tomcat-7.0.34\work\Catalina\localhost\你的项目名\org\apache\jsp
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第6张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第6张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/b3868943d8a3457ab3b2eca800e54d93.png.jpg)
我们只要打开index_jsp.java或者用jd-gui(Java反编译工具)打开就行了:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第7张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第7张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/16294651be6442979753108ea22d0419.png.jpg)
有人说这是Servlet吗?当然了。
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第8张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第8张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/15088269d7d944f7a9755f6eb3f2f2b3.png.jpg)
继承HttpJspBase类,该类其实是个HttpServlet的子类(jasper是tomcat的jsp engine)。
Jsp有着比Servlet更加优越的展现,很多初学PHP的人恐怕很难把视图和逻辑分开吧。比如之前在写PHPSQL注入测试的DEMO:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第9张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第9张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/8b7b08c1dc3047728475f08890845672.png.jpg)
这代码看起来似乎没有什么大的问题,也能正确的跑起来啊会有什么问题呢?原因很简单这属于典型的展现和业务逻辑没有分开!这和写得烂的Servlet差不多!
说了这么多,很多人会觉得Servlet很抽象。我们还是连创建一个Servlet吧:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第10张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第10张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/689094252c854b5eb46a55c2cabfa86d.png.jpg)
创建成功后会自动的往web.xml里面写入:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第11张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第11张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/7e6fe7c471e9489b8dc9e2829023f243.png.jpg)
其实就是一个映射的URL和一个处理映射的类的路径。而我们自动生成的Java类精简后大致是这个样子:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第12张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第12张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/fb6cd8c9ac284a0db965f98c4f7eb34c.png.jpg)
请求响应输出内容:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第13张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第13张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/88d1295cb9d245b8a17d8955ac54f546.png.jpg)
熟悉PHP的大神们这里就不做解释了哦。了解了Jsp、Servlet我们再来非常简单的看一下JavaWeb应用是怎样跑起来的。
加载web.xml的配置然后从配置里面获取各种信息为WEB应用启动准备。
科普:C:\apache-tomcat-7.0.34\webapps下默认是部署的Web项目。webapps 下的文件夹就是你的项目名了,而项目下的WebRoot一般就是网站的根目录了,WebRoot下的文件夹WEB-INF默认是不让Web访问的,一般存在配置泄漏多半是nginx配置没有过滤掉这个目录。
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第14张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第14张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/1644421bd1d4429cb17e28a5d0c8cd46.png.jpg)
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第15张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第15张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/40574b8c244143bb807194ef89a747f1.png.jpg)
快速定位数据库连接信息:
大家可能都非常关心数据库连接一般都配置在什么地方呢?
答案普遍是:C:\apache-tomcat-7.0.34\webapps\wordpress\WEB-INF下的***.xml
大多数的Spring框架都是配置在applicationContext里面的:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第16张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第16张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/3c7f539ae5664878b17e734dd55235f8.png.jpg)
如果用到Hibernate框架那么:WebRoot\WEB-INF\classes\hibernate.cfg.xml
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第17张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第17张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/f8219d450fc44b17b38095504874af9c.png.jpg)
还有一种变态的配置方式就是直接卸载源代码里面:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第18张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第18张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/0e5997944599493d92c6360a9b262675.png.jpg)
Tomcat的数据源(其他的服务器大同小异):
目录:C:\apache-tomcat-7.0.34\conf\context.xml、server.xml
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第19张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第19张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/2da1b015851c438c933db22956b8f2bd.png.jpg)
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第20张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第20张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/04421f0ec39b40568e9bfb47ea7b4f41.png.jpg)
Resin数据源:
路径:D:\installDev\resin-pro-4.0.28conf\resin.conf(resin 3.x是resin.xml)
其他的配置方式诸如读取如JEECMS读取的就是.properties配置文件,这种方式非常的常见:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第21张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第21张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/8bd433ec1c024625a333467c5d6f1eca.png.jpg)
0x01 Tomcat 基础
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第22张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第22张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/8cbba06882614cd28166a481ed185cb7.png.jpg)
没错,这就是 TOM 猫。楼主跟这只猫打交道已经有好几年了,在 Java 应用当中 TOMCAT 运用的非常的广泛。
TOM 猫是一个 Web 应用服务器,也是 Servlet 容器。
Apache+Tomcat 做负载均衡:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第23张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第23张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/89833d83f86743309f936bca407ddc0b.jpg.jpg)
Tomcat快速定位到网站目录:
如何快速的找到tomcat的安装路径:
1、不管是谁都应该明白的是不管apache还是tomcat安装的路径都是随意的,所以找不到路径也是非常正常的。
2、在你的/etc/httpd/conf/httpd.conf里面会有一个LoadModule jk_module配置用于集成tomcat然后找到JkWorkersFile也就是tomcat的配置,找到.properties的路径。httpd里面也有可能会配置路径如果没有找到那就去apache2\conf\extra\httpd-vhosts看下有没有配置域名绑定。
3、在第二步的时候找到了properties配置文件并读取,找到workers.tomcat_home也就是tomcat的配置路径了。
4、得到tomcat的路径你还没有成功,域名的具体配置是在conf下的server.xml。
5、读取server.xml不出意外你就可以找到网站的目录了。
6、如果第五步没有找到那么去webapps目录下ROOT瞧瞧默认不配置的话网站是部署在ROOT下的。
7、这一点是附加的科普知识爱听则听:数据库如果启用的tomcat有可能会采用tomcat的数据源配置未见为conf下的context.xml、server.xml。如果网站有域名绑定那么你可以试下ping域名然后带上端口访问。有可能会出现tomcat的登录界面。tomcat默认是没有配置用户登录的,所以当tomcat-users.xml下没有相关的用户配置就别在这里浪费时间了。
8、如果配置未找到那么到网站目录下的WEB-INF目录和其下的classes目录下找下对应的properties、xml(一般都是properties)。
9、如果你够蛋疼可以读取WEB.XML下的classess内的源码。
10、祝你好运。
apache快速定位到网站目录:
普通的域名绑定:
直接添加到confhttpd.conf、confextrahttpd-vhosts.conf
Resin快速定位到网站目录:
在resin的conf下的resin.conf(resin3.x)和resin.xml(resin4.x)
Resin apache 负载均衡配置(从我以前的文章中节选的)
APACHE RESIN 做负载均衡,Resin 用来做 JAVAWEB 的支持,APACHE 用于处理静态
和 PHP 请求,RESIN 的速度飞快,RESIN 和 apache 的配合应该是非常完美的吧。
域名解析:
apache 的 httpd.conf:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第24张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第24张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/85f32b231c0347378680d29049d4975a.jpg.jpg)
需要修改:Include conf/extra/httpd-vhosts.conf(一定要把前面的#除掉,否则配置不起作用)
普通的域名绑定:
直接添加到 httpd.conf
<VirtualHost *:80>
ServerAdmin admin@bjcyw.cn
DocumentRoot E:/XXXX/XXX
ServerName beijingcanyinwang.com
ErrorLog E:/XXXX/XXX/bssn-error_log
CustomLog E:/XXXX/XXX/bssn_log common
</VirtualHost>
二级域名绑定,需要修改:
E:\install\apache2\conf\extra\httpd-vhosts.conf
如:
<VirtualHost *:80>
DocumentRoot E:/XXXXXXX/XXX
ServerName bbs.beijingcanyinwang.com
DirectoryIndex index.html index.php index.htm
</VirtualHost>
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第25张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第25张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/d0547f9964674eb7ba0ab340cb2ba3cc.png.jpg)
Resin 的
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第26张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第26张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/b3ee5cf646ac4e50a9048f89bc195cc2.jpg.jpg)
请求处理:
<LocationMatch (.*?).jsp>
SetHandler caucho-request
</LocationMatch>
<LocationMatch (.*?).action>
SetHandler caucho-request
</LocationMatch>
<LocationMatch union-resin-stat-davic>
SetHandler caucho-request
</LocationMatch>
<LocationMatch stat>
SetHandler caucho-request
</LocationMatch>
<LocationMatch load>
SetHandler caucho-request
</LocationMatch>
<LocationMatch vote>
SetHandler caucho-request
</LocationMatch>
APACHE 添加对 Resin 的支持:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第27张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第27张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/7d40b0eee2df49998216e9b3c10aff81.png.jpg)
LoadModule caucho_module "E:/install/resin-pro-3.1.12/win32/apache-2.2/mod_caucho. dll"
然后在末尾加上:
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoStatus yes
</IfModule>
只有就能让 apache 找到 resin 了。
PHP 支持问题:
resin 默认是支持 PHP 的测试 4.0.29 的时候就算你把 PHP 解析的 servlet 配置删了一样解析 PHP,无奈换成了 resin 3.1 在注释掉 PHP 的 servlet 配置就无压力了。
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第28张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第28张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/c594e3ad324147d4bda315aa96dadc6f.jpg.jpg)
整合成功后:
![攻击JavaWeb应用[1]-JavaEE 基础_乌云镜像_第29张_铁匠运维网 攻击JavaWeb应用[1]-JavaEE 基础_https://www.tiejiang.org_乌云镜像_第29张](http://static.51tbox.com/static/2024-12-23/col/61bd5bc7a1ea71c4b889a5af3d4ae8be/f9318ed408ea49ca912948531f933594.png.jpg)
51工具盒子