初识Servlet

什么是Servlet?

  Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
  使用 Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

servlet在web项目中的作用?

  servlet通常是可以保存客户端请求的数据和处理数据,然后通过jsp来进行视图展示。通俗来讲servlet专门用来接收客户端的请求,专门接收客户端的请求数据,然后调用底层service处理数据并生成结果浏览器http请求------》tomcat服务器-------》到达servlet-----》执行doget,dopost方法----》返回数据。

实现servlet三种创建模式?

1.实现servlet接口

通过实现javax.servlet.Servlet接口,重写service(ServletRequest req, ServletResponse res)方法 。

public class Servlet_servlet implements Servlet {
    /**
     * 系统方法,由系统调用,初始化方法,当servlet被实例化时调用,只会执行一次
     */
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("servlet创建了");
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        servletRequest.setAttribute("msg","servlet执行了");
        servletRequest.getRequestDispatcher("/WEB-INF/JSP/Test.jsp").forward(servletRequest,servletResponse);
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {
        System.out.println("servlet销毁了");
    }
}

然后在web.xml文件下注册servlet:

 <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.jack.servlet.Servlet_servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

最后配置tomcat进行测试servlet,执行了service方法即可:
在这里插入图片描述

2.继承GenericServlet类

继承GenericServlet类,重写service(ServletRequest req, ServletResponse res)方法 。

public class Servlet_GenericServlet extends GenericServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

    @Override
    public ServletConfig getServletConfig() {
        return super.getServletConfig();
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        servletRequest.setAttribute("msg","genericservlet执行了");
        servletRequest.getRequestDispatcher("/WEB-INF/JSP/Test.jsp").forward(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        super.destroy();
    }
}

配置web.xml文件注册servlet:

 <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.jack.servlet.Servlet_GenericServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

测试servlet,执行了service方法即可:
在这里插入图片描述

3.继承HttpServlet类

重写doGet和doPost方法

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取前端参数
        String method = req.getParameter("method");
        if (method.equals("add")){
            req.getSession().setAttribute("msg","执行了add方法");
        }
        if (method.equals("delete")){
            req.getSession().setAttribute("msg","执行了delete方法");
        }
        //2.业务逻辑
        //3.视图转发或者重定向
        req.getRequestDispatcher("/WEB-INF/JSP/Test.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

配置web.xml文件:

  <servlet>
        <servlet-name>hello</servlet-name>
 		<servlet-class>com.jack.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

测试servlet,通过参数method测试:
在这里插入图片描述
成功执行了add方法。
在这里插入图片描述

4.Servlet的生命周期

  在创建Servlet实现Servlet接口和继承GenericServlet方式中,他们的重写方法中分别有它的四个生命周期方法,首先加载servlet的class,实例化servlet,然后初始化servlet调用init()的方法,接着调用服务的service的方法处理doGet和doPost方法,最后是我的还有容器关闭时候调用destroy 销毁方法。
在这里插入图片描述
1.被创建:执行init方法,只执行一次

  • Servlet什么时候被创建?
    • 默认情况下,第一次被访问时,Servlet被创建,然后执行init方法;
    • 可以配置执行Servlet的创建时机;

2.提供服务:执行service方法,执行多次

3.被销毁:当Servlet服务器正常关闭时,执行destroy方法,只执行一次

5.转发与重定向

RequestDispatcher getRequestDispatcher(java.lang.String path)

1.转发:地址栏不会改变

  • 转发只能转发到当前web应用内的资源可以在转发过程中。
  • 可以把数据保存到request域对象中

2.重定向:地址栏会改变,变成重定向到地址。

  • 重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
  • 不能再重定向的过程,把数据保存到request中。

response.setStatus(302);response.setHeader(“Location”,“OtherServlet”);
如果要使用request域对象进行数据共享,只能用转发技术!

总结

  初步连接创建Servlet的过程:通过继承GenericServlet和HttpServlet或者实现Servlet接口的方法创建一个Servlet类(我们常用继承HttpServlet的方式进行创建),然后在web.xml文件中注册Servlet,配置好Tomcat,然后通过路径让封装在Servlet里的数据通过jsp页面在浏览器上显示。
  Servlet的生命周期:初始化→实例化→服务→销毁。
  /转发与重定向的基本区别在于在进行共享request域对象的数据时,只能使用转发技术(因为在重定向过程中,数据不能保存在Request中)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值