简介
Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指 Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
它是运行在web 服务器上火应用服务器上的程序,作为浏览器或客户端和服务器上的数据库或应用程序之间的中间层。
运行机制
Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为:
1、客户端发送请求至服务器端;
2、服务器将请求信息发送至Servlet;
3、Servlet生成响应内容并将其传给Server。响应内容动态生成,通常取决于客户端的请求;
4、服务器将响应返回给客户端 ;
生命周期
1、Server创建一个Servlet的实例,也就是调用了init();
2、一个客户端的请求到达Server;
3、Server将请求发送给Serverlet;
4、Serverlet生成对请求的响应;
5、Server激活Servlet的service()方法,传递请求和响应对象作为参数;
a、service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息;
b、service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法;
c、对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重 复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次 ,当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。
实例
1. eclipse新建 Dynamic Web Project项目,项目名为test
2. 在src下创建包 test ,test下创建HelloWorld.java 文件,编辑
package test;
//导入java库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//扩展HttpServlet类
public cass HelloWorld extends HttpServlet {
private void init() throws ServletException{
message = "hello world";}
public void doGet(HttpServleRequest request,HttpServletResponse response)throws ServletException,IOException{
response.setContentType("text/html");
PrintWritter out = response.getWriter();
out.println("
"+message+"
");}
public void destroy(){}
}
3. 在WEB-INF目录下创建文件web.xml,编辑
HelloWorld
test.HelloWorld
HelloWorld
/HelloWorld
4. 启动tomcat服务器,输入http://localhost:8080/test/HelloWorld 查看结果
Servlet 表单数据
GET方法
GET方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用?字符分隔,如
http://www.baidu.com/hello?key1=vlaue1&key2=value2
此方法默认从浏览器向Web服务器传递信息,会产生一个很长的字符串在浏览器地址栏中。请求字符串最多只能有1024个字符。
Servlet用doGet()方法处理这种类型的请求。
POST方法
POST方法打包信息的方式与GET方法基本相同,但不是把信息放到url中,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,可以解析和使用这些标准输出。
Servlet使用doPost()方法来处理这种类型的请求。
使用Servlet读取表单数据
getParameter():调用request.getParameter()方法获取表单参数值
getParameterValues():参数出现一次以上,调用该方法
getParameterNames():得到当前请求中的所有参数的完整列表
使用URL的GET方法实例
制作一个简单实例,使用get方法从HTML页面中向HelloWorld程序传递两个值
在之前基础上,在WebContent目录下创建Hello.html,在body中添加以下代码,点击提交,数据从页面流向HelloWorld程序
再重新编辑HelloWorld程序
package test;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
@WebServlet("/HelloWorld")
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
/** * @see HttpServlet#HttpServlet() */
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
}
/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "使用 GET 方法读取表单数据";
// 处理中文
String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
String docType = " \n";
out.println(docType+
"\n"+
"
"+title+" \n"+"
\n"+"
"+title+"
\n"+"
\n"+
\n"+"
- 站点名:"+name+"\n"+
"
- 网址:"+request.getParameter("url")+"\n"+
"
"");
}
// 处理 POST 方法请求的方法
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }
运行tomcat,地址栏输入 http://localhost:8080/test/HelloWorld来验证get 方法实例