目录
Tomcat下载与配置
要想进行项目的开发,核心在于web容器,也就是说必须要有web容器后才能进行项目的运行。所有的JSP的程序代码只需要放到web容器之中就可以自动执行了。
如果需要web容器可以使用一些免费的,例如:Tomcat、resin。在www.apache.org上下载。下载Tomcat 9 ,选用zip版。
配置Tomcat服务器
解压缩后得到如下目录:
- bin:所有可执行的程序路径;
- conf:所有的配置文件目录;
- lib:保存第三方*.jar文件,CLASSPATH之一
- logs:所有的日志保存目录,项目发布之后观察错误就必须看日志
- weapps:项目的热部署目录,一个web项目放在此目录之中就可以直接执行了
- work:临时的生成文件目录,可以随意清空。
启动使用“D:\apache-tomcat-9.0.35\bin\startup.bat”命令即可。使用前要配置好JAVA_HEOME才能启动。
启动成功。
虚拟目录
如果要进行web项目的开发,一定需要一个或者多个目录保存开发源代码,这样的目录就被称为虚拟目录。
1、现在假设将“D:/myweb”设置为虚拟目录,首先建立文件夹 ;
2、将其变为合法目录,在这个目录之中保存“WEB-INF/web.xml"文件;
建议通过Tomcat拷贝此目录,路径:D:\apache-tomcat-9.0.35\webapps\ROOT;
3、让Tomcat知道此目录的存在,修改Tomcat的配置
配置文件路径:D:\apache-tomcat-9.0.35\conf\server.xml
<Context path="/ren" docBase="d:\myweb"/>
此处表示配置一个新的上下文路径,配置属性如下:
path:表示浏览器上的访问路径,例如:当前浏览器的路径:localhost:8080
|- 如果要访问该目录的路径为:localhost:8080localhost:8080/ren;
docBase:表示该虚拟目录对应的真实磁盘目录
4、如果要进行访问,则重新启动Tomcat,Tomcat在重新启动之后才会负责加载新的配置项。
访问如下:
此时返回的是一个HTTP的状态码(404),4XX指的是访问路径出错、5XX指的是程序出错。需要注意的是目录中的列表没有默认打开。
5、如果要想打开目录列表,则需要修改D:\apache-tomcat-9.0.35\conf\web.xml ;
本操作在开发环境下使用的,在项目运行的时候一定要关闭它。
改完之后服务需要再一次启动。
6、如果使用http协议访问,那么默认的端口是80,如果不是80就必须自己输入端口号。如果用户有需求也可以修改,修改路径:D:\apache-tomcat-9.0.35\conf\server.xml ;
第一个JSP程序
所有的JSP文件直接将源代码放到服务器端上执行就可以了,所有JSP文件的后缀必须是*.jsp的文件。
范例:编写JSP的程序
<html>
<head><title>JSP HELLO</title></head>
<body>
<%
out.println("hello world !") ;
%>
</body>
</html>
在程序编写完成之后,可以通WEB目录访问执行,
范例:通过JSP输出HTML
<html>
<head><title>JSP HELLO</title></head>
<body>
<%
out.println("<h1>hello world</h1>") ;
%>
</body>
</html>
通过以上的程序,可以发现JSP的如下特点:
- 所有的Java的代码需要通过一些特定的标记嵌入到HTML中
- JSP的程序可以控制HTML代码或者是JavaScript代码的输出显示,
- 所有在JSP上的输出实际上都是原始的HTML代码
JSP执行流程分析
当程序第一次执行的时候速度会比较慢,而后的执行速度会相对较快,之所以会出现这样的问题, 通过Tomcat(或者说WebContainer)对于JSP的执行流程, 如下:
操作流程如下:
- 用户要发送一个访问的请求, 并且将此请求交给webContainer;
- WebContainer从工作目录中加载所需要的*.jsp文件;
- 但是所有的Java程序的执行都是依靠*.class文件执行的, 那么此时Tomcat会将*.jsp文件自动转换为*.Java文件, 而后再自动进行编译处理;
- 而用户最终真正执行的就是*.class文件, 很明显如果是第二次访问该文件已经生成了, 所以速度自然就会得到提升
所有转换的*.java 和 *.class文件都会自动的保存在work目录之中;
Tomcat内存调优策略
Tomcat的调优策略实际上和JVM的内存调整是一样的, 只需要考虑最大可用内存=可用内存空间即可, 也就是说避免了伸缩区的问题. 但是不同的Tomcat版本针对于调优策略也是有所不同的.
范例: 取得默认的内存空间
<%
out.println("<h1> MAX = "+ Runtime.getRuntime().maxMemory() + "["+Runtime.getRuntime().maxMemory() / (double) 1024 / 1024+"]</h1>") ;
out.println("<h1> TOTAL = "+ Runtime.getRuntime().totalMemory() + "["+Runtime.getRuntime().totalMemory() / (double) 1024 / 1024+"]</h1>") ;
out.println("<h1> FREE = "+ Runtime.getRuntime().freeMemory() + "["+Runtime.getRuntime().freeMemory() / (double) 1024 / 1024+"]</h1>") ;
%>
此时Tomcat所采用的内存策略就是JVM默认提供好的内存策略.
如果要想调整内存操作, 需要考虑到不同的版本:
- Tomcat 8. x : 直接修改:D:\apache-tomcat-9.0.35\bin\catalina.bat, 追加
- Tomcat 9.x: 只需要注册一个环境属性即可: CATALINA_OPTS -Xmx1g -Xms1g