,Servlet的应用
• Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的web页面。它担当Web浏览器或其他http客户程序发出请求、与http服务器上的数据库或应用程序之间交互的中间层。
• 本章主要内容:理解HTTP协议、Web应用程序开发过程、Servlet的运行原理、Servlet的生命周期等。
• 当今越来越多的应用程序迁移到Web平台上。由于没有平台的限制和安装的要求,所以Web应用程序对用户非常有吸引力,并且可以让用户花更少的精力和时间去完成事情。
• Web应用程序简介
• 应用程序:指允许用户执行特定任务的软件程序,主要分为桌面应用程序和Web应用程序两种类型。
• 桌面应用程序(Desktop Application):一般是指采用客户机/服务器结构(Client/Server)的应用程序。
二,Web应用程序简介
– Web应用程序(Web Application)
• Web应用程序一般是指采用浏览器和服务器结构(Browser/Server,简称B/S结构)的应用程序。
• Web应用程序由Web服务器和Web客户端组成。
三,HTTP 协议
• Web客户端和Web服务器之间的通信依赖于HTTP协议,该协议支持简单的请求和响应会话。客户发送一个HTTP请求,服务器会用一个HTTP响应做出应答。
• Web浏览器除了可以从本地硬盘上打开网页文档外,还可以使用HTTP网络协议从网络上的Web服务器上获取网页文档的内容。
• 当用户在浏览器地址栏中输入网址或通过超链接访问目的网站时,都向目标主机(web服务器)发送一个http请求。http定义的信息交互处理由以下4步组成:
• 浏览器与Web服务器建立连接
• 浏览器向服务器提出请求
• 如果请求被接受,则服务器送回响应,响应信息中包括状态码和所需要的文件。
• 浏览器和web服务器断开连接。
• HTTP请求
• GET请求
• 在Google的搜索栏中搜索“java”关键字的相关内容时,浏览器发送的就是HTTP GET请求。
• 用GET发送的参数数据会追加到URL后面,在浏览器地址栏中显示出来,所以发送的数据会完全暴露(不能把口令或其他敏感数据用GET请求来发送)。
• GET请求中查询字符串的长度限制在240~255个字符
• POST请求
• 打开“www.javaeye.com”网站进行用户登录
• POST请求数据在地址栏内不可见,相对比较安全
• POST请求提交的数据在理论上没有长度的限制
注意:在我们编程时,出于对数据安全性考虑,在没有明确要求用GET方法提交数据的时候,尽可能使用POST方法。
四,重定向和请求分派
• 重定向
– HttpServletRequest接口提供的sendRedirect()方法用于生成302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的URL,其完整的定义语法如下:
• public void sendRedirect(String location) throws IOException;
– 其中的location参数指定了重定向的URL,它可以使用绝对URL和相对URL,Servlet容器会自动将相对URL转换成绝对URL后,再生成location头字段。
• 示例:重定向的应用--客户端发出URL为“http://localhost:8080 /jsp_04_servlet/servlet1?name=test”的请求,服务器用“Servlet1”来处理这个请求,在处理方法中通过sendRedirect重定向到第二个Servlet,即“Servlet2”上。
• 把这个Web应用程序部署到Web容器Tomcat中,启动Tomcat。然后按如图4.13所示在浏览器地址栏中输入:http://localhost:8080/jsp_04_servlet/servlet1?name=test
• 请求之后,服务器返回响应给客户端浏览器。
• 请求分派
– Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:
• public void forward(ServletRequest request, ServletResponse response)
• throws ServletException,IOException;
• public void include(ServletRequest request, ServletResponse response)
• throws ServletException,IOException;
– 获取RequestDispatcher实例的方式主要有两种:
• 调用ServletContext接口提供的getRequestDispatcher(String url)方法。
• 调用ServletRequest接口提供的getRequestDispatcher(String url)方法。
• RequestDispatcher接口的forward()方法用于将请求转发到RequestDispatcher实例封装的资源,由新的资源对客户端作出响应,它的原理可以用图4.16来表示。
• 同样使用“http://localhost:8080/jsp_04_servlet/servlet1?name=test”路径访问这个Servlet1,客户端浏览器将得到如图4.17所示的效果。
• 重定向和请求分派的比较
HttpServletResponse的sendRedirect()方法实现的重定向和RequestDispatcher的forward()方法实现的请求转发的比较:
– 请求分派只能将请求转发给同一个Web应用中的其他组件;而重定向不仅可以定向到当前应用程序中的其他资源,也可以重定向到其他站点的资源上。
– 重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
五,ServletConfig和ServletContext
• ServletConfig
– 如何给Servlet类配置初始化参数
– 如何在Servlet类中获取它的初始化参数值
• ServletContext
– 如何配置Web应用上下文初始化参数
– 如何在Servlet类中获取Web应用上下文的初始化参数值
• ServletContext的其他用途
– public void setAttribute(String name, Object obj):根据指定名name把对象obj存放到应用上下文范围中。
– public Object getAttribute(String name):根据指定名从应用上下文范围中获取到该属性对象。
– public void removeAttribut(String name):根据指定名从应用上下文范围中移除该属性。
• ServletConfig和ServletContext的区别
– 整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。
– Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。