在tomcat下运行servlet,需要在web.xml文件中对servlet进行配置,下面用一个具体的例子一步一步来看一下整个过程。
1:首先创建一个web应用程序,这里我是用Eclipse建的,就叫web吧,存放路径C:/eclipse/workspace/web
2:tomcat中,添加conf下的server.xml中的<Context >标记
<Context path="/web" reloadable="true" docBase="C:/Eclipse/workspace/web"/>
3:编写一个名为ServletTest的servlet程序,具体内容如下,应该很简单的,就不多解释:
package test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletTest extends HttpServlet{
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
doPost(arg0,arg1);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
ServletOutputStream out=response.getOutputStream();
out.println("<html>");
out.println("<body>");
out.println("TEST");
out.println("</body>");
out.println("</html>");
}
}
4:将servlet编译后生成的class文件放到WEB-INF的class目录下,因为我这里带了个test包,所以生成的文件路径就是WEB-INF----->class----->test------>ServletTest.class
5:配置web.xml文件,在web应用程序的WEB-INF目录下,新建一个如下内容的web.xml文件
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>test.ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/ServletTest</url-pattern>
</servlet-mapping>
</web-app>
这里解释一下这个文件的内容:
<servlet-name>标签指定了servlet的名字,主要是下面的<servlet-mapping>用;
<servlet-class>说明了servlet存放的class目录下的位置,这里要加上必要的包名;
<servlet-mapping>标签中,<servlet-name>指出要要匹配的servlet的名字,这个与上 边的<servlet>标签中定义的名字对应;<url-pattern>指出了当满足什么条件时,调用这个servlet;这 里写的是/ServletTest
6:启动tomcat,并在浏览器中输入http://localhost:8090/web/ServletTest
则浏览器输出TEST
这里主要想说的就是<url-pattern>,这个标签指定了servlet的匹配类型,当写成 <url-pattern>/*</url-pattern>时,浏览器中输入http://localhost:8090/web/1111或者http://localhost:8090/web/2222,都会执行这个servlet
也就是在这个地方可以用一些通配符表示。
**********************************************************
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
test</display-name>
<welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>CheckAccount</servlet-name>
<servlet-class>com.ht.servlet.CheckAccount</servlet-class>
</servlet>
<!-- servlet>
<servlet-name>EmailControl</servlet-name>
<servlet-class>com.ht.servlet.SendMailServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>EmailControl</servlet-name>
<url-pattern>/emailto</url-pattern>
</servlet-mapping-->
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>com.ht.servlet.ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/ServletTest</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CheckAccount</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
*****************************************************
session.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<body>
<%
com.ht.servlet.AcountBean account = (com.ht.servlet.AcountBean) session
.getAttribute("account");
%>
username:
<%=account.getUsername()%>
<br>
password:
<%=account.getPassword()%>
</body>
<!--
编写fail.jsp文件 失败后跳转
<body>
Logon Failed
<br>
</body>
-->
*****************************************
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<body>
<form action="login">
username:<input type="text" name="username"><br>
password:<input type="password" name="pwd"><br>
<input type="submit">
</form>
</body>
******************************************
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<head>编写fail.jsp文件 失败后跳转 </head>
<body>
Logon Failed
<br>
</body>
*****************************************************
package com.ht.servlet;
public class AcountBean {
private String username="";
private String password="";
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
*************************************************
package com.ht.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class CheckAccount extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
AcountBean account = new AcountBean();
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
account.setUsername(username);
account.setPassword(pwd);
if ((username != null) && (username.trim().equals("jsp"))) {
if ((pwd != null) && (pwd.trim().equals("1"))) {
System.out.println("session");
session.setAttribute("account", account);
String logon_suc = "session.jsp";
response.sendRedirect(logon_suc);
return;
}
}
String logon_fail = "fail.jsp";
response.sendRedirect(logon_fail);
return;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}