Servlet复习

Servlet 复习一

第一个Servlet应用

  1. HttpServlet。必须继承,所有的Servlet必须继承javax.servlet.GenericServlet(普通的Servlet)或者继承javax.servlet.http.HttpServlet.
  2. 重写doGet()和doPost().这两个方法是在HTTPServlet定义的,当一个GET或POST请求到来时,就会映射到相应的方法中。
  3. 重写其他方法,在运行时控制应用,如:getServletInfo();
  4. HttpServletRequest和HttpServletResponse是所有doXXX()方法的默认参数。
代码示例:
  1. 新建web项目
  2. 新建FirstServlet类,并集成HttpServlet类, 使这个类成为一个Servlet
  3. 重写doGet()方法, 实现输出当前时间
  4. 在web.xml文件中添加关于FirstServlet的配置,或者使用@WebServlet(“/first”)注解
public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
        simpleDateFormat.applyPattern("yyyy-MM-dd hh-mm-ss");
        Date now = new Date();

        PrintWriter out = resp.getWriter();

        out.println(simpleDateFormat.format(now));
        out.close();
    }
}
    <servlet>
        <servlet-name>first</servlet-name>
        <servlet-class>com.learn.servlet.FirstServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>first</servlet-name>
        <url-pattern>/first</url-pattern>
    </servlet-mapping>

Servlet生命周期

Servlet生命周期的三个核心方法分别是:init(), service(), destroy().每个Servlet都会实现这三个方法, 并在特定的时间调用它们。

  1. 在Servlet生命周期的初始化阶段, web容器通过调用init()方法来初始化Servlet实例, 并且可以传递一个实现javax.servlet.ServletConfig接口的对象给它, 这个配置对象(configuration object)使Servlet能够读取在web应用的web.xml文件定义的名值(name-value)初始参数. 这个方法在Servlet实例的生命周期里只调用一次.
  2. 初始化后, Servlet实例就可以处理客户端请求了. web容器调用Servlet的service()方法来处理每一个请求. service()方法定义了能够处理的请求类型并且调用适当的方法来处理请求. 编写Servlet的开发者必须为这些方法提供实现. 如果发出一个Servlet没实现的请求, 那么父类的方法就会调用并且通常会给请求方返回错误信息.
  3. 最后, web容器调用destroy()方法来终结Servlet. 如果你想在Servlet的生命周期内关闭或销毁一些文件系统或网络资源,可以调用这个方法实现. destroy()方法和init()方法一样, 在Servlet的生命周期中只调用一次.

显示指定的JSP页面

只需要在doGet()或者doPost()方法中写一下代码:

req.getRequestDispatcher("WEB-INF/jsp/hello.jsp").forward(req, resp);

转发

当你的应用需要将一个Servlet的请求转交给另一个Servlet处理, 并且在浏览器的地址栏中的URL不变.这是就需要转发.
使用servletContext对象可以很容易的实现转发.

    ServletContext servletContext = getServletContext();
    RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/first");
    requestDispatcher.forward(req, resp);

forward方法需要HttpServletRequest对象和HttpServletRespone对象.

客户端向服务器端发送给请求(如http://localhost:8080/servlet/hello), 服务器接收请求并找到对应的Servlet(HelloServlet), 在Servlet中服务器进行业务处理, 当发现代码中调用RequestDispatcher对象的forward方法时, 这时会转到servletContext.getRequestDispatcher("/first");中指定的Servlet(FirstServlet)中继续执行, 这是在该Servlet(FirstServlet)中的HttpServletResquest对象和HttpServletRespone对象与HelloServlet中的HttpServletResquest对象和HttpServletRespone对象是相同的.

重定向

当有时需要通知用户请求的连接发生了变化时, 可以使用重定向.使用HttpServletResponse对象的sendRedirect方法就可以实现重定向.

resp.sendRedirect("first");

使用重定向时浏览器地址栏中的URL会发生改变
客户端向服务器端发送给请求(如http://localhost:8080/servlet/hello), 服务器接收请求并找到对应的Servlet(HelloServlet), 在Servlet中服务器进行业务处理,当发现代码中调用resp.sendRedirect("first")方法, 会立即响应到客户端, 通知客户端必须再发送一次请求(http://localhost:8080/servlet/first)到服务端, 然后客户端会再发一次请求到服务端请求FirstServlet, 服务端接收请求后, 找到对应的Serlvet(FirstServlet), 处理业务逻辑, 响应到客户端. HelloServletFirstServlet中的HttpServletResquest对象和HttpServletRespone对象是相同的

转发和重定向的区别

  1. 客户端向服务端发送请求的次数: 转发只向服务端发送一次请求, 重定向会向服务端发送两次请求
  2. 浏览器地址栏中URL地址的变化:转发时地址栏中的URL地址不会发生改变, 重定向时地址栏中的URL地址会发生改变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值