参考书籍:《J2EE开源编程精要15讲》

Servlet是可以处理客户端传来的HTTP请求,并返回响应,由服务器端调用执行,有一定编写规范的Java类。

例如:  

 

 package test;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Test extends HttpServlet { public Test() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} //处理HTTP GET请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设定Web服务器的响应方式是HTML
response.setContentType("text/html");
//获得PrintWriter对象,以打印输出响应
PrintWriter out = response.getWriter();
//吧HTML形式的响应显示在浏览器上
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
//处理HTTP POST请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
} public void init() throws ServletException {
// Put your code here
}
}

Servlet需要部署在Web容器中,生命周期由Web容器管理,可分为以下几个阶段:

  • 装载Servlet:一般动态执行
  • 创建一个Servlet实例
  • 调用Servlet的init()方法
  • 服务:如果Web容器接受到对此Servlet请求,调用相应的响应方法(通过web.xml配置Servlet)
  • 销毁:实例被销毁,调用destroy()    

主要接口类:

  HttpServletRequest接口提供了处理客户请求的方法,如String getParameter(String name)等(注:name为表单标签的name属性名),从客户页面窗口取得数据,如取得用户名

 HttpServletRequest request;
String name=request.getParameter("username");

  HttpServletResponse接口提供了以HTML页面形式把请求发给客户的方法,主要有setContentType()等,如请求转发给下一个页面

 HttpServletResponse response;
response.sendRedirect("next.jsp");

  HttpSession接口记录当前Servlet中的用户对话,可用于存储关于用户对话的信息,可用HttpSession接口的putValue()和getValue()等方法存取数据,通过HttpServeltRequest对象的getSession()方法可生成一个HttpSession对象,如

 HttpServletRequest request;
HttpSession session=request.getSession(true);

  RequestDispatcher接口可通过forward(HttpServletRequest request,HttpServletResponse response)方法把Servlet的请求提交或委派给另一个资源,如Servlet、HTML或JSP。RequestDispatcher对象可通过HttpServletRequest对象的getRequestDispatcher()方法生成。如

 RequestDispatcher rd=request.getRequestDispathcer("reply.jsp");
rd.forward(request,response);

综合使用示例:

 package test;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class Test extends HttpServlet { public Test() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} //处理HTTP GET请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
//处理HTTP POST请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("username");
RequestDispatcher rd; try{
try{
if(name.equals("Tom")){
HttpSession session=request.getSession();
session.setAttribute("nm", name);
response.sendRedirect("reply.jsp");
}
else{
rd=request.getRequestDispatcher("error.jsp");
rd.forward(request, response);
}
}catch(ServletException e){
e.printStackTrace();
}
}catch(IOException e){
e.printStackTrace();
}
} public void init() throws ServletException {
// Put your code here
}
}

  

当Servlet部署到Web服务器中时,需要在Web配置文件web.xml中声明,如:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Login_Proj</display-name>
<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>LoginServlet</servlet-name>
<servlet-class>login.LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

假设用户表单action="LoginServlet",表单提交跳转到/LoginServlet,web.xml中<servlet-mapping>标签内<url-pattern>/LoginServlet</url-pattern>对应的<servlet-name>为LoginServlet,于是在<servlet>标签下找<servlet-name>为LoginServlet的servlet,找到对应的类login.LoginServlet。

  

Java Web编程的主要组件技术——Servlet的更多相关文章

  1. Java Web编程的主要组件技术——Struts入门

    参考书籍:<J2EE开源编程精要15讲> Struts是一个开源的Java Web框架,很好地实现了MVC设计模式.通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面联系较少 ...

  2. Java Web编程的主要组件技术——MVC设计模式

    参考书籍:<J2EE开源编程精要15讲> MVC(Model View Controller),Model(模型)表示业务逻辑层,View(视图)代表表述层,Controller(控制)表 ...

  3. Java Web编程的主要组件技术——JDBC

    参考书籍:<J2EE开源编程精要15讲> JDBC(Java DataBase Connectivity)是Java Web应用程序开发的最主要API之一.当向数据库查询数据时,Java应 ...

  4. Java Web编程的主要组件技术——Hibernate核心组件

    参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...

  5. Java Web编程的主要组件技术——Struts核心组件

    参考书籍:<J2EE开源编程精要15讲> Struts配置文件struts-config.xml Struts核心文件,可配置各种组件,包括Form Beans.Actions.Actio ...

  6. Java Web编程的主要组件技术——JSP

    参考书籍:<J2EE开源编程精要15讲> JSP(Java Server Page)页面由HTML代码和嵌入其中的Java代码组成. 简单的JSP页面如: <html> < ...

  7. Java Web编程的主要组件技术——Hibernate入门

    参考书籍:<J2EE开源编程精要15讲> Hibernate是对象/关系映射(ORM,Object/Relational Mapping)的解决方案,就是将Java对象与对象关系映射到关系 ...

  8. Java Web编程的主要组件技术——Struts的高级功能

    参考书籍:<J2EE开源编程精要15讲> Struts对国际化的支持 "国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区.语言的不同显示不同的 ...

  9. 五分钟学Java:如何才能学好Java Web里这么多的技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...

随机推荐

  1. EXT--当defaultType与items的子组件默认xtype冲突时items的子组件的xtype为panel

    示例图 直接看下面示例代码: /** * 获取导入表单 * @returns {Ext.FormPanel} */ function getImportForm() { return new Ext. ...

  2. 查看系统网络连接打开端口、系统进程、DOS打开文件

    问题描述: DOS查看系统网络连接打开端口.打开的服务 问题解决: (1)DOS查看系统网络连接打开端口 注: 使用    netstat 命令,可以查看系统打开的端口 (2)查看和关闭系统打开进程 ...

  3. (ASP.NET)C#连接Oracle数据库示例(中文乱码问题解决)

    接手了一个遗留的ASP.NET系统,数据库用的是Oracle,以前没搞过.NET和Oracle数据库,数据库搞了半天才解决乱码问题,在此做个笔记备忘. 1.下载安装ODAC 1)请去Oracle官网下 ...

  4. What is XMLHTTP? How to use security zones in Internet Explorer

    Types of Security Zones Internet Zone This zone contains Web sites that are not on your computer or ...

  5. POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)

    题意:给出n个字符,m对关系,让你输出三种情况:     1.若到第k行时,能判断出唯一的拓扑序列,则输出:         Sorted sequence determined after k re ...

  6. POJ2151Check the difficulty of problems

    题意 : 举办一次比赛不容易,为了不让题目太难,举办方往往希望能够讲出的题目满足两点,1是所有的队伍都至少能够解出一个题目,2是冠军队至少能解出确定数量的题目,最后让你求的是每个队伍至少解出一道题并且 ...

  7. Thread的第一天学习

    1.实现线程的方法: 1)extend Thread 2)implements Runnable 2.下面代码执行哪个run方法: new Thread( new Runnable(){ public ...

  8. 【Linux高频命令专题(19)】vi/vim

    概述 其实在Linux中一切命令或者软件都是文件,所以把vi/vim作为高频命令专题之一,也没什么不妥.虽然大家都称之为编辑器~~ vim是vi的高级版本,比如有代码高亮,也就是说可以把vim定位为程 ...

  9. java登陆验证码与JS无刷新验证

    最近公司的项目的登陆模块由我负责,所以就做了个登陆小功能进行练手,其包括了用jQuery对用户名和密码进行不为null验证,和出于安全性考虑加了一个验证码的校验 别的不说先上代码 controller ...

  10. winserver2008,运行可执行文件,提示 激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.DebugCRT,processorArchitecture="x86"

    首先我运行的可执行文件是在win7下使用vs2008生成的release版本的文件,为什么在运行的时候提示需要DebugCRT? 另外我在winserver2008上是安装了vc2008的运行环境的. ...