静态资源:
(1) 在webapps目录下创建一个项目目录(命名必须不包含中文和空格),比如“hello”;
(2) 在项目目录下新建一个html文件,比如“index.html”。
(3) 访问:http://localhost:8080/hello/index.html
动态资源(JSP Servlet):
(1)在webapps目录下创建一个项目目录;
(2)在项目目录下创建如下内容:
|--- WEB-INF
|---在WEB-INF目录下创建web.xml文件
|--- 创建静态或动态页面
注意:WEB-INF目录不能被客户端直接访问
1.3.1第一个Servlet程序(手动)
(1) UML时序图描述登陆流程
(2) 开发目录结构
(3) 新建登陆页面login.html
<form action="http://localhost:8080/login/servlet/LoginServlet" method="get">
username: <input type="text" name="username" /><br>
<input type="submit" value="login" />
</form>
(4) 新建LoginServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
if ("admin".equals(username)) {
response.getWriter().println("username right!");
} else {
response.getWriter().println("username error!");
}
}
}
(5) 编译LoginServlet.java
(5.1) 启动CMD窗口;
(5.2) javac –encoding“utf-8” LoginServlet.java;
(5.3) 会提示“找不到文件”的错误,原因:没有配置classpath,(导入相关的jar包):
classpath=D:\apache-tomcat-7.0.54\lib\servlet-api.jar;D:\jdk1.7\jre\lib\rt.jar;
(5.4) 修改LoginServlet.java源文件,import需要的类;
(5.5) 将建立好的LoginServlet程序编译后,拷贝到web application中的classes目录中;
注意:如果源文件“FirstServlet.java”使用的是“UTF-8”编码,且源文件中包含中文,在CMD环境中编译时需指定编码:
javac -encoding "UTF-8" LoginServlet.java
(6) 安装/启动Tomcat服务器
TOMCAT_HOME\bin\startup.bat,在随后打开的“cmd”窗口中若未发现有异常,且显示“Server startup in XXXX ms”,则表示tomcat服务启动成功。(注意启动Tomcat前必须配置“JAVA_HOME”环境变量)。
注:也可以单独为Tomcat配置JAVA_HOME变量,操作如下:打开startup.bat页面,最上面增加代码,如下图所示:
rem ---------------------------------------------------------------------------
rem Guess CATALINA_HOME if not defined
set JAVA_HOME=”D:\JDK1.7”
set "CURRENT_DIR=%cd%"
(7) 定义部署目录结构
注意:
不能将servlet-api.jar放到WEB-INF/lib下,因为服务器Tomcat已经存在,如果还加到WEB-INF/lib下,将会造成冲突,导致Web应用程序不能正常加载!
(7.1) 在“webapps”下新建项目文件夹(应用程序的根目录,我们把一个Web应用程序中的所有东西放到这个目录下),文件夹命名为“login”;
(7.2) 在“login”文件夹下创建目录“WEB-INF”;
(7.3) 在“WEB-INF”下创建目录,命名为“classes”和“lib”;
(7.4) 把HTML文件(“login.html”)拷贝到项目根目录(login)下面;
(7.5) 把编译好的Servlet字节码文件(LoginServlet.class)拷贝到“WEB-INF/classes”文件夹下;
(8) 定义配置文件web.xml
从tomcat安装路径“webapps\examples\WEB-INF”查找Tomcat自带示例程序中的“web.xml”,将其拷贝到我们自己“web project的WEB-INF”下面,用文本编辑器打开,删除无关代码后如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>
将我们自定义编译好的LoginSevlet配置到web.xml文件中:(在web.xml中配置Servlet的目的其实只有一个,就是把访问路径与一个Servlet绑定到一起,下面的配置是把访问路径“/HelloServlet”和“com.zhb.web.servlet.HelloServlet”绑定到一起。<servlet>和<servlet-mapping>通过<servlet-name>这个元素关联在一起。)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.zhb.web.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>
注:
url-pattern:提供给客户端访问的名称,必须以“/”开头(服务器端“/”代表http://localhost:8080/webappName (含项目名称));
在浏览器地址栏输入:
http://localhost:8080/2014-12-23_LoginServlet/a,就能访问到该Servlet
=====>>>>><url-pattern> =======>>>>>><servlet-name> ABC ======>>>>><servlet>标签下的<servlet-name>
=====>>>>><servlet-class>=======>>>>>> 反射机制创建LoginServlet实例
(9) 浏览器访问
浏览器地址栏输入http://localhost:8080/2014-12-23_LoginServlet/a,在tomcat窗口观察servlet输出结果:
(10) 定义表单的action属性
将login.html其拷贝到web application目录下,打开login.html,设置action:
<html>
<head>
<title>登陆</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<!--action:可以使用绝对路径:http://locaohost:8080/login_servlet/loginServlet -也可以使用相对路径(相对于当前login.html文件的位置):相对路径最前面不要加“/”,即不能写成:action="/loginServlet"
-->
<form action="loginServlet" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password" /><br/>
<input type="submit" value="登陆">
</form>
</body>
</html>
(11) 客户端(浏览器)发送请求访问服务器
打开浏览器,地址栏输入http://localhost:8080/login_servlet/login.html打开登录页面:
在用户名和密码框中输入信息:
单击“登录”按钮,浏览器页面显示:
同时观察服务器端窗口:
(13) UML分析LoginServlet调用流程