MyEclipse集成Tomcat
- 首先配置Tomcat,即配置环境变量Java_HOME、path,在第一讲中已经完成了,不再赘述。
- Eclipse代码风格导入MyEclipse:
- 每个项目都要配置一次代码风格,文字大小,快捷键等等比较麻烦,可以用File下面的导入、导出功能。比如Eclipse下的File->General->Preferences->export all,生成一个*.epf文件,然后用MyEclipse中的File->import->General->Preferences,选择刚刚导出的epf文件import all即可。
- 打开MyEclipse,在Window->Preferences->MyEclipse->Servers,选择Tomcat 6.x,将Tomcat home directory设置为Tomcat的根目录(比如我这里是D:\Program Files\apache-tomcat-6.0.44,顺便提一下,我本来装的最新版8.0.9,可是不知道如何集成到MyEclipse中,因为MyEclipse(我的是8.5版)里面只有Tomcat 4/5/6这几个选项,因此不得不到Apache Tomcat主页下载6.0版的Tomcat),将Tomcat sever下面的单选按钮选为Enable,确定。
- MyEclipse中,Window->Preferences->Java->Installed JREs,Add一个Standard VM,在JRE home中键入本机Java的安装目录,回到刚才的Installed JREs目录,选择刚刚add的JRE,不要使用MyEclipse自带的,另外这里之所以要选择JRE,是因为Tomcat本身就是Java写的,要有Java运行时环境才能跑起来。接下来,回到Tomcat 6.x,将JDK选为刚刚添加的那个。
配置完成后,在MyEclipse的右上角有一个名为Open Perspective,点击,选择MyEclipse Java Enterprise,然后MyEclipse中上部有个名为Run/Stop/Restart MyEclipse Servers的图标,点击选择启动Tomcat 6.x。而后在浏览器地址栏中输入localhost:8080,出现Apache Tomcat的主页,即为配置成功。
使用Eclipse结合Tomcat开发一个简单的Servlet和JSP
Servlet是Java服务器端编程,不同于我们之前写的一般的Java应用程序,Servlet程序是运行在服务器上的,服务器有很多种,这里我们使用的是Tomcat。
- 首先建立项目:
File->New->Web Project,项目命名为test,J2EE Specification Level 选择Java EE 5.0,确定。到硬盘上找到test文件夹,打开WebRoot,打开WEB-INF,里面有三个文件classes,lib,web.xml,其中classes用来放置Java编译好的问价,lib是项目依赖的第三方JAR,web.xml是项目的部署描述符。
其次,想要项目放到Tomcat里运行,必须告诉Tomcat项目在什么地方:
进入Tomcat的安装目录,打开conf目录,打开server.xml,通过对这个文件进行相关的设置,Tomcat就可以找到我们的项目,在最后面几行的</Host>标签之前添加信息:
<Context path="/test" docBase="D:\JavaWeb\test\WebRoot" reloadable="true"/>
其中Context是上下文的意思,Tomcat服务器中可以配置多个上下文,每个上下文对应一个Web应用;docBase是项目下面的WebRoot目录,path是逻辑上的虚拟路径(注意这里的test和项目的test虽然名字一样,但是它们之间没有任何关系,你也可以把path改成"/abc"等),映射到docBase;reloadable表示是否可以重新加载。
接下来在MyEclipse中重新启动Tomcat,浏览器地址栏键入localhost:8080/test,显示This is my JSP page,说明刚才的配置成功。
- 然后,我们使用Servlet生成一个静态页面:
在src目录下新建一个包,命名为com.test.servlet;在新建的包下面新建一个类MyServlet,该类需要继承HttpServlet类(一般来说,Servlet都需要继承此类)。类的实现如下:
package com.test.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { process(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { process(req, resp); } protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<HTML><HEAD><TITLE>My First Servlet</TITLE></HEAD>"); out.println("<BODY>"); out.println("<H1>Hello World</H1>"); out.println("</BODY></HTML>"); } }
接着在MyEclipse中配置Web-INF目录下的web.xml,打开在左下角选择source,删掉:
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
在</web-app>前面添加:
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.test.servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping>
重启Tomcat,浏览器访问http://localhost:8080/test/MyServlet,出现"Hello World"即为成功。
在程序中对process方法稍作修改,打印系统当前时间:
protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<HTML><HEAD><TITLE>My First Servlet</TITLE></HEAD>"); out.println("<BODY>"); out.println("<H1>Hello World</H1>"); out.println("<br>" + new java.util.Date().toLocaleString()); out.println("</BODY></HTML>"); }
刷新浏览器的http://localhost:8080/test/MyServlet页面即可。
当然我们也可以在Console中打印系统时间,在刚刚添加的哪行语句下面,添加:
System.out.println("当前系统时间为:"+ new java.util.Date().toLocaleString());
然后在浏览器中刷新页面几次,Console中也相应的打印出系统时间几次。
- 最后我们分析一下Servlet是如何执行的?我们为什么要在web.xml中添加上述的代码呢?一是告诉客户端,二是告诉Tomcat如何找我的资源,寻找的规则是:在servlet-mapping中根据url-pattern(其中‘/‘表示当前系统的根路径(这里是test)),找到servlet-name,然后在servlet中找跟他匹配的servlet-name,然后找到相应的servlet-class,如果发现其没有实例化,就实例化它(其中的doGet处理客户端的GET请求,doPost处理客户端的POST请求,而通过浏览器访问时全部使用的GET请求),立刻执行其doGet方法,doGet方法本身调用了process方法,执行后,服务器返回的HTML信息如下:
<HTML><HEAD><TITLE>My First Servlet</TITLE></HEAD> <BODY> <H1>Hello World</H1> <br>2015-7-2 9:28:13 </BODY></HTML>
浏览器解释HTML,显示出"
Hello World
2015-7-2 9:28:13"
这样的结果。
需要注意的几点:
- servlet-mapping元素中的servlet-name必须和servlet元素中的servlet-name匹配,这是由它的寻找规则决定的。
- servlet元素中的servlet-class必须是包名+类名。
- url-pattern前面以‘/‘开头,表示客户端以什么样的url格式请求servlet,也可以改成"/abc",这样在浏览其中需要访问http://localhost:8080/test/abc。