首先将官网上下载的Tomcat8.0.tar.gz解压到/Library
目录。
启动Tomcat
➜ /Library/Tomcat-8.5.15 bin/startup.sh [2:51:51]
Using CATALINA_BASE: /Library/Tomcat-8.5.15
Using CATALINA_HOME: /Library/Tomcat-8.5.15
Using CATALINA_TMPDIR: /Library/Tomcat-8.5.15/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
Using CLASSPATH: /Library/Tomcat-8.5.15/bin/bootstrap.jar:/Library/Tomcat-8.5.15/bin/tomcat-juli.jar
Tomcat started.
然后查看Tomcat是否已经启动。
➜ /private/etc/apache2/users tcp|grep java [3:11:53]
java 13154 caiqiqi 46u IPv6 0xba278df1111d65bd 0t0 TCP *:8080 (LISTEN)
java 13154 caiqiqi 51u IPv6 0xba278df1111d607d 0t0 TCP *:8009 (LISTEN)
java 13154 caiqiqi 74u IPv6 0xba278df101da9afd 0t0 TCP 127.0.0.1:8005 (LISTEN)
...
➜ /private/etc/apache2/users ps aux|grep tomcat [3:11:35]
caiqiqi 13515 0.6 0.0 2432804 1988 s007 S+ 3:11上午 0:00.00 grep tomcat
caiqiqi 13154 0.0 5.4 4935560 456616 s006 S 2:51上午 0:31.84 /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java -Djava.util.logging.config.file=/Library/Tomcat-8.5.15/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /Library/Tomcat-8.5.15/bin/bootstrap.jar:/Library/Tomcat-8.5.15/bin/tomcat-juli.jar -Dcatalina.base=/Library/Tomcat-8.5.15 -Dcatalina.home=/Library/Tomcat-8.5.15 -Djava.io.tmpdir=/Library/Tomcat-8.5.15/temp org.apache.catalina.startup.Bootstrap start
原来Tomcat启动的命令这么繁琐。
然后修改conf/server.xml
修改appBase
变量到相对/Library/Tomcat-8.5.15
目录的相对目录,比如webapps/struts_vuln
,另外如果想让该目录下的.war压缩文件被解压之后再被访问的话,就将unpackWARs="true"
,否则改为false。
参考:Tomcat 配置文件详解
Tomcat的配置文件Server.xml解析
➜ /Library/Tomcat-8.5.15 echo "GET /test/helloworld.jsp\r\n\r\n"|nc 127.0.0.1 8080 [2:59:50]
<html>
<body>
<h2>Hello World of Java!</h2>
The time on the server is Fri May 12 03:00:21 CST 2017
</body>
</html>
➜ /Library/Tomcat-8.5.15 cat /Library/Tomcat-8.5.15/webapps/struts_vuln/test/helloworld.jsp [3:00:21]
<html>
<body>
<h2>Hello World of Java!</h2>
The time on the server is <%= new java.util.Date() %>
</body>
</html>
所以用nc来发HTTP请求,是没有User-Agent
字段的。。。
➜ ~ echo "GET /jsp_demo/web/index.jsp\r\n\r\n" |nc 127.0.0.1 8080 [11:09:57]
<html>
<head>
<title>$Title$</title>
</head>
<body>
The time of the server is Fri May 12 11:10:04 CST 2017
<br/>
<h3>This is printed out by out.println()</h3>
<h3>hellovenus</h3>
<h3>-----Test request-----</h3>
User-Agent: null <br>
Cookie: null <br>
Language: zh_CN <br>
Accept-Language: null <br>
</body>
</html>
➜ /Library/Tomcat-8.5.15/webapps cat jsp_demo/web/index.jsp [11:13:30]
<%--
Created by IntelliJ IDEA.
User: caiqiqi
Date: 2017/5/12
Time: 上午3:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
The time of the server is <%= new java.util.Date()%>
<br/>
<%!
String makeLower(String data){
return data.toLowerCase();
}
%>
<%
out.println("<h3>This is printed out by out.println()</h3>");
out.println("<h3>" + makeLower("HELLOVENUS") + "</h3>");
%>
<h3>-----Test request-----</h3>
User-Agent: <%= request.getHeader("User-Agent") %> <br>
Cookie: <%= request.getHeader("Cookie") %> <br>
Language: <%= request.getLocale() %> <br>
Accept-Language: <%= request.getHeader("Accept-Language") %> <br>
</body>
</html>
目录结构
➜ /Library/Tomcat-8.5.15/webapps/jsp_demo tree [19:12:37]
.
├── jsp_demo.iml
├── out
│ └── artifacts
│ └── jsp_demo_war_exploded
│ ├── WEB-INF
│ │ ├── classes
│ │ │ └── HelloWorldServlet.class
│ │ └── web.xml
│ └── index.jsp
├── src
│ └── HelloWorldServlet.java
└── web
├── WEB-INF
│ ├── classes
│ │ └── HelloWorldServlet.class
│ ├── lib
│ └── web.xml
└── index.jsp
10 directories, 8 files
访问index.jsp
:
http://localhost:8080/jsp_demo/index.jsp
# 或者http://localhost:8080/jsp_demo/
访问HelloWorldServlet
:
http://localhost:8080/jsp_demo/HelloWorldServlet
Servlet之HelloWorldServlet
参考:
Intellij idea创建javaWeb以及Servlet简单实现
➜ ~ curl http://localhost:8080/jsp_demo/HelloWorldServlet [15:55:20]
<h1>Hello world, this message is from servlet!</h1>
Servlet和JSP比较
Servlet出现于1997年,而JSP出现在1999年。
比较流行的设计模式是:Servlet处理业务逻辑,而JSP用来呈现View