以正式版本5.5.20为例。
下载二进制发行版(Binary Distributions)。
选Core: Windows Service Installer下载。
Windows 版的版本为:apache-tomcat-5.5.20.exe。
所使用的Tomcat服务器为5.5.20版,使用的HTTP端口为8080。
HTML页面测试创建一个html文件Hello.html。
<!DOTTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE>HTML 测试</TITLE></HEAD><BODY BGCOLOR="#FDF5E6"><H1>HTML 测试</H1>欢迎。
</BODY>import javax.servlet.*;import javax.servlet.http.*;/** Simple servlet used to test server.* <P>* Taken from Core Servlets and JavaServer Pages 2nd Edition* from Prentice Hall and Sun Microsystems Press,* /.* © 2003 Marty Hall; may be freely used or adapted.*/public class HelloServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String docType ="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +"Transitional//EN\">\n";out.println(docType +"<HTML>\n" +"<HEAD><TITLE>Hello</TITLE></HEAD>\n" +"<BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1>欢迎!</H1>\n" +"</BODY></HTML>");}}●将HelloServlet.java保存到文件夹classes中。
●将HelloServlet.java编译为HelloServlet.class文件。
D:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myJSPServlet\WEB-INF\classes>javac HelloServlet.java HelloServlet.java:2: 软件包 javax.servlet 不存在import javax.servlet.*;^HelloServlet.java:3: 软件包 javax.servlet.http 不存在import javax.servlet.http.*;^HelloServlet.java:13: 找不到符号符号:类 HttpServletpublic class HelloServlet extends HttpServlet {^HelloServlet.java:14: 找不到符号符号:类 HttpServletRequest位置:类 HelloServletpublic void doGet(HttpServletRequest request,^HelloServlet.java:15: 找不到符号符号:类 HttpServletResponse位置:类 HelloServletHttpServletResponse response)^HelloServlet.java:16: 找不到符号符号:类 ServletException位置:类 HelloServletthrows ServletException, IOException {^6 错误出现错误!由于servlet和JSP不是Java平台Java SE(标准版)的一部分,而是Java EE (企业版)的一部分,因此,必须告知编译器servlet的位置。
●解决“软件包javax.servlet 不存在”错误的方法:1.搜索servlet-api.jar所在文件夹:D:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib2.将环境变量CLASSPATH的值设置为:.;D:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar3.重新编译:javac HelloServlet.java,编译成功。
另外,你也可以使用下面的命令改变环境变量CLASSPATH。
set CLASSPATH=.; D:\Program Files\Apache Software Foundation\Tomcat5.5\common\lib\servlet-api.jar但这种改变只是在系统关闭前有效,下次启动系统后还要在发布该命令,当然你也可以将该命令写到自动批处理文件autoexec.abt中。
●在文件夹WEB-INF中创建一个web.xml文件<?xml version="1.0" encoding="GBK"?><web-app xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><display-name>Welcome to Tomcat</display-name><description>Welcome to Tomcat</description><!-- JSPC servlet mappings start --><servlet><servlet-name>HelloServlet</servlet-name><servlet-class>HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/helloservlet</url-pattern></servlet-mapping><!-- JSPC servlet mappings end --></web-app>上面的定义:servlet-class > servlet-name > /helloservlet,把HelloServlet.class转换位url地址。
注意:因为服务器只在启动时读取web.xml文件,所以每次修改完web.xml文件后要重新启动服务器。
●在浏览器的地址栏输入http://localhost:8080/myJSPServlet/helloservlet运行。
运行正常,但中文显示乱码。
●解决中文显示乱码的方法import java.io.*;import javax.servlet.*;import javax.servlet.http.*;双击右下角的response.setContentType("text/html; charset=GBK");PrintWriter out = response.getWriter();String docType ="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +"Transitional//EN\">\n";out.println(docType +"<HTML>\n" +"<HEAD><TITLE>Hello 欢迎 (2)</TITLE></HEAD>\n" +"<BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1>Hello 欢迎 (2)</H1>\n" +"</BODY></HTML>");}}●编译HelloServlet2.java>cd coreservlets>javac HelloServlet2.java●在web.xml文件中添加<servlet><servlet-name>HelloServlet2</servlet-name><servlet-class>coreservlets.HelloServlet2</servlet-class> </servlet><servlet-mapping><servlet-name>HelloServlet2</servlet-name><url-pattern>/helloservlet2</url-pattern></servlet-mapping>●执行http://localhost:8080/myJSPServlet/helloservlet2Servlet调用Java Bean测试●在coreservlets中创建一个Java Bean文件ServletUtilities.java package coreservlets;import javax.servlet.*;import javax.servlet.http.*;public class ServletUtilities {public static final String DOCTYPE ="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +"Transitional//EN\">";public static String headWithTitle(String title) {return(DOCTYPE + "\n" +"<HTML>\n" +"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n");}public static int getIntParameter(HttpServletRequest request,String paramName,int defaultValue) {String paramString = request.getParameter(paramName);int paramValue;try {paramValue = Integer.parseInt(paramString);} catch(NumberFormatException nfe) { // null or bad formatparamValue = defaultValue;}return(paramValue);}public static double getDoubleParameter(HttpServletRequest request,String paramName,double defaultValue) {String paramString = request.getParameter(paramName);double paramValue;try {paramValue = Double.parseDouble(paramString);} catch(NumberFormatException nfe) { // null or bad format paramValue = defaultValue;}return(paramValue);}public static String filter(String input) {if (!hasSpecialChars(input)) {return(input);}StringBuffer filtered = new StringBuffer(input.length()); char c;for(int i=0; i<input.length(); i++) {c = input.charAt(i);switch(c) {case '<': filtered.append("<"); break;case '>': filtered.append(">"); break;case '"': filtered.append("""); break;case '&': filtered.append("&"); break;default: filtered.append(c);}}return(filtered.toString());}private static boolean hasSpecialChars(String input) {boolean flag = false;if ((input != null) && (input.length() > 0)) {char c;for(int i=0; i<input.length(); i++) {c = input.charAt(i);switch(c) {case '<': flag = true; break;case '>': flag = true; break;case '"': flag = true; break;case '&': flag = true; break;}}}return(flag);}}●编译ServletUtilities.java>javac ServletUtilities.java●在coreservlets中创建一个Servlet文件HelloServlet3.java package coreservlets;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;/** Simple servlet for testing the use of packages* and utilities from the same package.* <P>* Taken from Core Servlets and JavaServer Pages 2nd Edition* from Prentice Hall and Sun Microsystems Press,* /.* © 2003 Marty Hall; may be freely used or adapted.*/public class HelloServlet3 extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String title = "Hello (3)";out.println(ServletUtilities.headWithTitle(title) +"<BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1>" + title + "</H1>\n" +"</BODY></HTML>");}}●编译HelloServlet3.java>javac HelloServlet3.java出现编译错误:HelloServlet3.java:23: 找不到符号符号:变量 ServletUtilities位置:类 coreservlets.HelloServlet3out.println(ServletUtilities.headWithTitle(title) +^1 错误这是因为包中的servlet使用了包中其他的类,在编译时会得到“Unresolved symbol”错误消息。