JSP:Servlet

 Servlet处理请求过程

B/S请求响应模型

 Servlet介绍

JSP是Servlet的一个成功应用,其子集。

JSP页面负责前台用户界面,JavaBean负责后台数据处理,一般的Web应用采用JSP+JavaBean就可以设计得很好了。

JSP+Servlet+JavaBean是MVC

Servlet的核心思想:在服务器端创建能响应用户请求的对象,即Servlet对象。

Servlet类:属于javax.servlet.http包中的HttpServlet类的子类。

Servlet 与 JSP 内置对象

获得内置对象的方法

获得 out 对象

JSP 中的 out 对象,一般可以使用 doXXX 方法中的 response 参数获得

默认情况下,out 对象是无法打印中文

解决方法:response.setContentType("text/html;charset=gb2312");

获得 request 和 response 对象

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//将 request 参数当成 request 对象使用

//将 response 参数当成 response 对象使用

获得 application 对象

   ServletContext application = this.get ServletContext();

//将 application 当成 application 对象来使用

配置环境

使用servlet的步骤:

1.配置 servlet-api.jar

2.编码 *.java

3.编译生成字节码文件 *.class

4.部署

5.调用

JDK 内置包中不包含编译servlet源文件需要HttpServlet、HttpServletRequest等类,因此,需要在环境变量中包含 servlet.jar,这个 jar 文件在 TOMCAT 安装目录的 common\lib 文件下,如果没有可以网上下载。

编辑 classpath,加入%CATALINA_HOME%\lib\servlet-api.jar

将servlet.jar文件拷贝到jdk安装目录的jdk\jre\lib\ext中

部署Servlet

Hello.java

package china.dalian;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class Hello extends HttpServlet

{  public void init(ServletConfig config) throws ServletException

     {  super.init(config); 

     }

   public void service (HttpServletRequest request, HttpServletResponse response)  throws IOException

    {  response.setContentType(“text/html;charset=gb2312”);

       PrintWriter out = reponse.getWriter();

       out.println(“<html><body>”);

       out.println(“<h2>欢迎学习servlet</h2>”);

       out.println(“</body></html>”);

    }

将生成的字节码文件如 Hello.class 保存在Tomcat服务器 WEB-INF\classes 目录下对应包名文件中,包名为  pakage china.dalian 在具体的目录为

WEB-INF\classes\china\dalian

在Web根目录下编辑 web.xml 文件,对 Servlet 文件进行配置

servlet 节:如何生成该servlet

servlet-mapping节:如何调用该servlet

Servlet与JSP的区别

       Servlet是使用Java Servlet接口(API)运行在Web应用服务器上Java程序,其功能十分强大,它不但可以处理Http请求中的业务逻辑,而且还可以输出HTML代码来显示指定页面。

       JSP是一种在Servlet规范之上的动态网页技术,在JSP页面之中,同样可以编写业务逻辑处理Http请求,也可以通过HTML代码来编辑页面,在实现功能上,ServletJSP貌似相同,实质存在一定的区别,表现在以下方面:

1、角色不同

2、编程方法不同

3Servlet需要编译后运行

4、速度不同

Servlet技术特点

Servlet使用Java语言编写,它不仅继承了Java语言中的优点,而且Servlet还对Web的相关应用进行了封装,同时Servlet容器还提供了对应用的相关扩展,无论是在功能、性能、安全等方面都十分优秀,其技术特点表现在以下方面。

1、功能强大

2、可移植

3、性能高效

4、安全性高

5、可扩展

Servlet代码结构

在Java中,通常所说的Servlet是指HttpServlet对象,在声明一个对象为Servlet时,需要继承HttpServlet类。

HttpServlet类是Servlet接口的一个实现类,继承此类后,可以重写HttpServlet类中的方法对HTTP请求进行处理。

 Servlet 工作原理-生命周期

 

Servlet 工作原理-对象模型 

Servlet 工作原理

init方法

public void init ( ServletConfig config ) throws ServletException

service方法

public void service ( HttpServletRequest request HttpServletResponse response ) throw ServletException, IOException

destroy方法

public destroy ( )n

init方法

<web-app>

  …

  <servlet> 

      <servlet-name>InitExample</servlet-name>

      <servlet-class>ServletInit</servlet-class>

  <init-param>

        <param-name>login</param-name>

        <param-value>snoopy</param-value>

      </init-param>

    </servlet>

            …

</web-app>

对于web.xml中定义的param变量,可以通getInitParameter()  方法来获得。具体格式为:

String str = getInitParameter(“xxx”);

destroy方法    Servlet类可以直接继承这个方法,一般不需要重写。         

public destroy()

共享变量

Servlet中声明的某些成员变量,会被所有请求该servlet的用户共享。

  servlet共享变量来计算pi的值。

 PI/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 ……

doGet和doPost方法

服务器接收到用户请求后,调用service方法检查http的请求类型(如getpost),并在service方法中根据用户的请求方式,对应地调用doGetdoPost方法。因此,不必重写service方法,可直接继承service方法,在servlet类中重写doPostdoGet方法达到同样的效果。

重定向与转发

重定向

HttpServletResponse类中通过方法

void sendRedirect(java.lang.String location) 可实现页面的跳转。

response.sendRedirect (“xxx.jsp”);

注意:该方法跳转后的页面,不能获得之前页面用户提交的数据。

转发

RequestDispatcher对象可以把用户对当前的JSP页面或servlet的请求转发给另一个JSP页面或servlet,并且将请求对象和相应对象传递给目标页面。

第一步:得到RequestDispatcher对象:

RequestDispatcher  rd = request.getRequestDispatcher(“xxx.jsp”);

第二步:转发:

rd.forward( request, response);

转发 vs 重定向

默认情况下, SendRedirect 不会保留请求对象中参数;需要保存请求的相关信息时要用请求转发

SendRedirect 会在客户端呈现跳转后的URL地址请求转发完全是在服务器上进行,浏览器地址栏中的地址保持不变,请求转发不能将请求发到其他的web应用上 SendRedirect可以

使用session

HttpServletRequest对象可以调用getSession方法获取用户的session对象。该session对象即第四章中的session对象。格式:

HttpSession session = request.getSession(true);

可以在servlet中使用session对象及其方法,实现对同一用户的确认。

Servlet API编程常用接口和类

Servlet接口

方法说明
public void init(ServletConfig config)    Servlet实例化后,Servlet容器调用此方法来完成初始化工作
public void service(ServletRequest request,ServletResponse response)    此方法用于处理客户端的请求
public void destroy()    当Servlet对象应该从Servlet容器中移除时,容器调用此方法,以便释放资源
public ServletConfig getServletConfig()    此方法用于获取Servlet对象的配置信息,返回ServletConfig对象
public String getServletInfo()    此方法返回有关Servlet的信息,它是纯文本格式的字符串,如作者、版本等

创建一个servlet,实现向客户端输出一个字符串ServletConfig接口

方    法    说    明
public String getInitParameter(String name)    此方法返回String类型名称为name的初始化参数值
public Enumeration getInitParameterNames()    获取所有初始化参数名的枚举集合
public ServletContext getServletContext()    用于获取Servlet上下文对象
public String getServletName()    返回Servlet对象的实例名

HttpServletRequest接口

方    法    说    明
public String getContextPath()    返回请求的上下文路径,此路径以“/”开关
public Cookie[] getCookies()    返回请求中发送的所有cookie对象,返回值为cookie数组
public String getMethod()    返回请求所使用的HTTP类型,如get、post等
public String getQueryString()    返回请求中参数的字符串形式,如请求MyServlet?username=mr,则返回username=mr
public String getRequestURI()    返回主机名到请求参数之间部分的字符串形式
public StringBuffer getRequestURL()    返回请求的URL,此URL中不包含请求的参数。注意此方法返回的数据类型为StringBuffer
public String getServletPath()    返回请求URI中的Servlet路径的字符串,不包含请求中的参数信息
public HttpSession getSession()    返回与请求关联的HttpSession对象

HttpServletResponse接口

方    法    说    明
public void addCookie(Cookie cookie)    向客户端写入cookie信息
public void sendError(int sc)    发送一个错误状态码为sc的错误响应到客户端
public void sendError(int sc, String msg)    发送一个包含错误状态码及错误信息的响应到客户端,参数sc为错误状态码,参数msg为错误信息
public void sendRedirect(String location)    使用客户端重定向到新的URL,参数location为新的地址

HttpServlet类

GenericServlet类实现了javax.servlet.Servlet接口,为程序的开发提供了方便;但在实际开发过程中,大多数的应用都是使用Servlet处理HTTP协议的请求,并对请求作出响应,所以通过继承GenericServlet类仍然不是很方便。javax.servlet.http.HttpServlet类对GenericServlet类进行了扩展,为HTTP请求的处理提供了灵活的方法。

Servlet创建

在编写一个Servlet对象时,必须实现javax.servlet.Servlet接口,但在Servlet接口中包含5个方法,也就是说创建一个Servlet对象要实现这5个方法,这样操作非常不方便。javax.servlet.GenericServlet类简化了此操作,实现了Servlet接口。

public abstract class GenericServlet

extends Object

implements Servlet, ServletConfig,   Serializable        

Servlet的创建十分简单,主要有两种创建方法。第一种方法为创建一个普通的Java类,使这个类继承HttpServlet类,再通过手动配置web.xml文件注册Servlet对象。此方法操作比较繁琐,在快速开发中通常不被采纳,而是使用第二种方法——直接通过IDE集成开发工具进行创建。使用集成开发工具创建Servlet非常方便,下面以Eclipse为例介绍Servlet的创建过程,其他开发工具大同小异。

Servlet配置

要使Servlet对象正常地运行,需要进行适当的配置,以告知Web容器哪一个请求调用哪一个Servlet对象处理,对Servlet起到一个注册的作用。Servlet的配置包含在web.xml文件中,主要通过以下两步进行设置。

(1)声明Servlet对象

(2)映射Servlet

   创建名为MyServlet对象,继承了HTTPServlet类,重写doGet()方法

总结概括Servlet的生命周期

1.客户端向服务器发出请求,服务器根据客户端的请求,找到相应的Servlet

2.判断该Servlet是否在内存中加载?若未加载,创建该Servlet实例,调用init()方法完成初始化操作若已经加载,转3

3. 调用service()方法对客户端进行响应。等待下一次请求Servlet生命周期中,service()方法是其中的核心。每当客户端向Servlet发出一个请求时,该方法就会被调用,对用户的请求进行处理,并返回响应。

4.结束,调用destroy()方法当服务器端不再需要该Servlet的时候,服务器调用destroy()方法卸载Servlet,释放Servlet运行时占用的资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值