开发步骤:
1)在%TOMCAT_HOME%\webapps下WEB-INF的文件夹,写一个文件web.xml(该网站的配置信息。。。),建立一个classes的子文件夹,也可以从别的目录ROOT下拷贝
2)开发servlet(引入servlet.api.jar)
注:题主学习时用的JCreator开发环境开发的,安装JCreator时会设置绑定JDK,所以启动JCreator后,点击Configure再点击Options时,在JDK Profiles下可以看到JDK下的相关jar包。而这个servlet.api.jar(位于Tomcat5.0\common\lib下)要我们手动引入到环境中。
3)部署你的servlet,在web.xml文件中,添加如下代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<!-- JSPC servlet mappings start -->
<servlet>
<!-- 给你的servlet取名,任意的 -->
<servlet-name>hello</servlet-name>
<!-- 指明servlet的路径,包名+类名 -->
<servlet-class>com.tsinghua.hello</servlet-class>
</servlet>
<servlet-mapping>
<!-- 给你的servlet取名,任意的 -->
<servlet-name>hello</servlet-name>
<!-- 这是在浏览器中输入的访问该servlet的url,任意的 -->
<url-pattern>/sp</url-pattern>
</servlet-mapping>
<!-- JSPC servlet mappings end -->
</web-app>
4、Servlet生命周期
1)装载servlet,由相应的容器来完成
2)创建一个Servlet实例
3)调用Servlet的init()方法,该方法只会在第一次访问该servlet时被调用一次
4)服务:调用servlet的destroy()方法,销毁该servlet实例。该方法在一下情况被调用:a:tomcat 重新启动 b:reload该Webapp c:重新启动电脑
三种实现方式
1、实现Servlet接口
package com.tsinghua;
import javax.servlet.*;
import java.io.*;
public class Hello implements Servlet{
//该函数用于初始化该servlet(类似于类的构造函数)
//该函数只会被调用一次(当用户第一次访问该Servlet时被调用)
public void init(ServletConfig parml) throws ServletException{
System.out.println("init it");
}
//得到Servlet配置文件,不是很重要
public ServletConfig getServletConfig(){
return null;
}
//这个函数用于处理业务逻辑
//程序员应当把业务逻辑代码写在这里
//该函数会被调用多次,当每次访问servlet时,都会被调用
//req 用于获得客户端信息 res用于向客户端返回信息 客户端即浏览器
public void service(ServletRequest req,ServletResponse res) throws ServletException{
//从res中得到PrintWriter
//控制台显示
System.out.println("service it");
try{
PrintWriter pw=res.getWriter();
//发回网页显示
pw.println("hello,world");
}catch(IOException e)
{
}
}
public String getServletInfo(){
return "";
}
//销毁Servlet实例(释放内存)
//什么情况被调用1.reload 该serlvet(webApps) 2.关闭tomcat //3.关机
public void destroy(){
System.out.println("destroy");
}
}
2、继承GenericServlet
通过GenericServlet去开发Servlet,只需要重写Service相对来说要简单一些。
package com.tsinghua;
import javax.servlet.GenericServlet;
import java.io.*;
import javax.servlet.*;
public class HelloGen extends GenericServlet{
//重写service方法即可
public void service(ServletRequest req,ServletResponse res){
try{
PrintWriter pw=res.getWriter();
pw.println("hello world!generic");
}catch(Exception ex){
ex.printStackTrace();
}
}
}
3、继承HttpServlet
需要重写doGet、doPost方法。这是目前用的最多的一种方法。
表单提交方法有两种,一种是get,一种是post;
两者区别:
安全性:get<post 内容大小:get<post get 请求速度:get>post; get要求服务器立即处理请求,而post请求可能形成一个队列请求。
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class HelloHttp extends HttpServlet{
//重写get请求
public void doGet(HttpServletRequest req,HttpServletResponse res){
try{
PrintWriter pw=res.getWriter();
pw.println("hello,http");
}catch(Exception ex)
{
ex.printStackTrace();
}
}
//重写get请求
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}