java web表示层组件,第1章 Java Web编程技术

1.1 Java Web编程的主要组件技术

一个完整的Java Web应用软件通常是由多种组件技术构成的,一般由表示层组件、控制层组件、业务逻辑层组件及数据访问层组件组成。表示层组件通常由HTML和JSP页面构建,控制层组件一般是Servlet,业务逻辑层组件是JavaBeans或EJB,数据访问层组件是JDBC,Hibernate或CMP。此外,Java Web应用的各个组件需要在XML格式的配置文件中进行声明,然后打包,部署Java Web服务器(例如Tomcat)中运行。

1.1.1 Servlet

Servlet(Java服务器小程序)是由Java编写的服务器端程序,是由服务器端调用和执行的、按照Servlet自身规范编写的Java类。

Servlet可以处理客户端传来的HTTP请求,并返回一个响应。它是一个Java类,具有可移植、功能强大、安全、集成、模块化和可扩展性好等特点。

例1-1:

package chap1;

import javax.servlet.*;

import java.io.*;

public class Servlet extends GenericServlet{

public void service(ServletRequest request,ServletResponse response)throws IOException

{

response.setContentType("text/html");

PrintWriter out=response.getWriter();

out.println("");

out.println("

");

out.println("

Hello World

");

out.println("");

out.println("");

}

}

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

1. 装载Servlet:这项操作一般是动态执行的。有些服务提供了相应的管理功能,可以在启动的时候就装载Servlet,并能够初始化特定的Servlet。

2.创建一个Servlet实例。

3.调用Servlet的init()方法。

4.服务:如果Web容器接收到对此Servlet的请求,那么它调用Servlet的service()方法。

5.销毁:销毁实例,通过调用Servlet的destroy()方法来销毁Servlet。

Java对Servlet的支持是通过javax.servlet和javax.servlet.http两个软件实现的,其中javax.servlet.http是一个子软件包。

javax.servlet软件包包含Servlet常用的接口和类,如GenericServlet,ServletConfig,ServletRequest,ServletResponse和RequestDispatcher等。

javax.servlet.Servlet接口提供了创建Servlet的一般框架。Servlet可直接实现此接口,或者间接地通过扩展javax.servlet.GenericServlet类或javax.servlet.http.HttpServlet类来实现此接口。javax.servlet.GenericServlet类可用于创建与任何协议一起使用的Servlet.

而javax.servlet.http软件包除了继承以上的接口和类外,还包含了一些针对HTTP协议的方法、特殊请求和响应对象,如HttpServlet,HttpServletRequest,HttpServletResponse,HttpSession和HttpDispatcher等。

1. HttpServlet类提供了处理不同HTTP请求类型(有GET,POSTH和PUT等)的方法,其中两种最常见的HTTP请求类型是GET和POST,它们分别是由doGet()和doPost()方法进行处理的:

protected void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException,java.io.IOException;

protected void doPost(HttpServletRequest request,HttpServletResponse response)

throws ServletException,java.io.IOException;

2. HttpServletRequest接口提供了处理客户请求的方法。使用这些方法,Servlet可从客户页面窗体中取得数据。例如,从客户页面窗体取得用户名(username)的方法如下:

HttpServletRequest request;

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

3. HttpServletResponse接口提供了以HTML页面形式把请求发送给客户的方法,主要方法有setContentType(),sendRedirect()等。例如,把请求转发给下一个页面next.jsp的实现方法如下:

HttpServletResponse response;

respinse.sendRedirect("next.jsp");

4. HttpSession接口用来记录当前Servlet中的用户会话。例如:在Web站点上注册的每个用户自动与HttpSession对象关联。Servlet可用此对象来存储关于用户会话的信息。可使用HttpSession接口的putValue()和getValue()等方法把数据寸入HttpSession对象中,或从该对象中取出数据。通过HttpServletRequest对象的getSession()方法可生成一个HttpSession对象,如下面的代码所示:

HttpServletRequest request;

HttpSession session=request.getSession(true);

5. RequestDispatcher接口可以把Servlet的请求提交或委派给另一个资源,如Servlet,HTML文件或JSP页面。在这种情况下,源Servlet进行同样处理并把请求委派给另一个Servlet。RequestDispatcher接口封装指向特定资源(Servlet,HTML文件或JSP页面)的URL。用此接口的forward(HttpServletRequest request,HttpServletResponse response)方法委派任务到特定资源。RequestDispatcher对象可通过HttpServletRequest对象的getRequestDispatcher()方法生成。例如:

RequestDispatcher td=request.getRequestDispatcher("reply.jsp");

rd.forward(request,response);

例1-2:

MyJsp.jsp:

MyFirstServlet.java:

package chap1;

import javax.servlet.http.*;

import javax.servlet.*;

import java.io.*;

import java.util.*;

public class MyFirstServlet extends HttpServlet{

public void doPost(HttpServletRequest request,HttpServletResponse response){

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

RequestDispatcher rd;

try{

try{

if(name.equals("Tom")){

HttpSession session=request.getSession(true);

session.setAttribute("nm",name);

response.sendRedirect("servlet/reply.jsp");

}

else{

rd=request.getRequestDispatcher("servlet/error.jsp");

rd.forward(request,response);

}

}catch(ServletException e){System.out.println(e);}

}catch(IOException e){System.out.println(e);}

}

public void doGet(HttpServletRequest request,HttpServletResponse response){

doPost(request,response);

}

}

在Java Web应用程序中,Servlet常用做控制器组件。当Servlet部署到Web服务器中时,需要Web配置文件Web.xml中进行声明。

MyFirstServlet

chap1.MyFirstServlet

MyFirstServlet

/MyFirstServlet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值