Servlet知识点详解Servlet生命周期,Servlet的创建,Servlet获取JSP内置对象

servlet详解

一、Servlet概述

Servlet时一个在服务器上运行以处理客户端请求并做出响应的Java程序。servlet主要用于处理客户端传来的HTTP请求,并返回一个响应。通常说的Servlet指的是HttpServlet。

Servlet是运行在服务器端的,不同于Java程序的运行方式是Java application。

Servlet功能如下:

1、获得前台提交的数据

2、调用模型进行处理

3、选择响应的视图进行输出显示

二、Servlet生命周期

Servlet生命周期的过程如下:

​ 1、web容器根据客户请求创建一个Servlet对象实例,或多个,并将这些实例加入到Servlet对象池中。

​ 2、web容器调用Servlet的初始化方法init()进行初始化。需要给init()方法传入一个ServletConfig对象。ServletConfig对象包含初始化参数和容器的环境信息,并负责向Servlet传递数据,失败则会抛出异常。

public void init(ServletConfig config) throws ServletException {
        System.out.println("init方法被执行");
    }

3、当客户请求到达后,容器调用service()方法完成对请求阶段的处理和响应。 在service方法被调用之前,init()方法必须被正确调用。

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("iservice方法被执行");
    }

4、当web服务器和容器关闭后,会自动调用HttpServlet.destroy()方法关闭所用打开的资源,并进行关闭前的处理。

public void destroy() {
        System.out.println("destroy方法被执行");
    }

三、Servlet的创建

package com.haust.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "NewNewServlet", urlPatterns = "/NewNewServlet")
public class NewNewServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");// 处理post请求乱码问题
        response.setContentType("text/html;charset=utf-8"); // 处理响应乱码问题:字节流需getBytes("UTF-8")

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        doPost(request, response);

    }
}

如果请求处理处理的代码写在doGet()方法中,则需在doPost()方法中调用doGet()方法,反之亦然,Servlet就可以处理客户端发过来的get或post请求了。

Servlet程序必须在web.xml文件中配置,或者是添加注释的方式,后才可以运行。

先说配置web.xml的方式:

1、核心配置

<servlet>
        <servlet-name>doLogin</servlet-name>//Servlet名称
        <servlet-class>com.haust.servlet.doLogin</servlet-class>//Servlet类的完整路径
</servlet>
<servlet-mapping>
        <servlet-name>doLogin</servlet-name>//Servlet映射名称,必须与上面的名称相同
        <url-pattern>/doLogin</url-pattern>//Servlet映射路径
</servlet-mapping>

标签中之间的内容是Servlet的名称,可以自定义。

2、其他配置

1)启动时加载配置

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>//服务器默认的是1
    </servlet>
 //配置启动时加载 
<load-on-startup>2</load-on-startup>

所以我们只能设置的比1大。

2)Servlet初始化参数配置

<servlet>
        <servlet-name>servlet03</servlet-name>
        <servlet-class>com.haust.servlet.servlet03</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>zhangsan</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>123</param-value>
        </init-param>
        <init-param>
            <param-name>driver</param-name>
            <param-value>com.mysql.jdbc.driver</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/bookstore</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet03</servlet-name>
        <url-pattern>/servlet03</url-pattern>
    </servlet-mapping>

利用标签下的中的子标签配置参数名称,使用>> 配置参数值。

3)上下文参数配置

<context-param>
	<param-name>contextParam</param-name>
    <param-value>Hello Servlet</param-value>
</context-param>

上下文参数是在标签外配置的,初始化参数是在标签内配置的,上下文参数类似于"全局变量",初始化参数类似于"局部变量"。

四、Servlet获取初始化参数及上下文参数

1)获取初始化参数

<servlet>
        <servlet-name>servlet03</servlet-name>
        <servlet-class>com.haust.servlet.servlet03</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>zhangsan</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>123</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet03</servlet-name>
        <url-pattern>/servlet03</url-pattern>
    </servlet-mapping>
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1.获得初始化参数的API
    // 获得servletconfig对象
    ServletConfig config=this.getServletConfig();
    String username=config.getInitParameter("username");
    String password=config.getInitParameter("password");
    PrintWriter out=resp.getWriter();
    out.println(username+":"+password);
}

2)获取上下文参数

<context-param>
	<param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
	<param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/metting </param-value>
</context-param>
public class servlet04_context extends HttpServlet {
	
    Connection conn=null;
    /**
    *构造函数
    *
    */
    public servlet04_context(){
        ServletContext sc=this.getServletContext();
        String driver=sc.getInitParameter("driver");
        String url=sc.getInitParam("url")
        try{
            Class.forName(driver);
            conn=DriverManager().getConnection(url,"root","root");
        }catch(Exception e){
            e.printStackTrace;
        }
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  	}
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

将数据库连接相关信息以上下文参数的形式进行配置。

五、Servlet获取JSP内置对象

1)获取JSP中out对象

import java. io. PrintWriter; !
public class Innerobject1 extends HttpServlet (
	protected void doGet (HttpServletRequest request, HttpServletResponse
		response) throws ServletException, IOException {
			Printwriter out=response.getwriter() ;
			out .print ("helloworld") ; 
	}
}

PrintWriter out-response getWriter();所生成的out和JSP内置对象out的功能大致相同,主
要功能都是进行输出响应,但也有以下区别。

(1) JSP 的out对象和response.getWriter()的类不一样, 一个是JspWriter, 另一个是
java.io.PrintWriter.
(2)执行原理不同: JspWriter 相当于一个带缓存功能的printWriter, 它不是直接将数据
输出到页面,而是将数据刷新到response的缓冲区后再输出,response getWriter()直接输出数据(response.print()),所以(out.print) 只能在其后输出。
(3) out为JSP的内置对象,刷新JSP页面,自动初始化获得out对象,所以使用out对
象是需要刷新页面的,而response getWriter()响应信息通过out 对象输出到网页上,当响应结束时,它自动被关闭,与JSP页面无关,无须刷新页面。
(4) out 的print()方法和println()方法在缓冲区溢出,并且没有自动刷新时会产生
ioexception,而response.getWrite()方法的print和println中都是抑制ioexception异常的,不会有ioexception.

2)获取JSP中的request对象

Servlet通过ServletRequest接口或其子接口HttpServletRequest来生成request对象,
request 对象通常用来作为doGet或doPost 函数的参数。

protected void doGet (HttpservletRequest request, HttpServleResponse
esponse)throws ServletException, IOException{
}

通过HttpServletRequest提供的相关方法可获取客户端信息。例如客户端主机名、客户端IP地址、客户端口号、客户端的请求参数等。

2)获取JSP中的response对象

Servlet通过ServletResponse接口或其子接口HttpServletResponse来生成rsponse对象,
response对象通常用来作为doGet或doPost 函数的参数。

protected void doGet (HttpservletRequest request, HttpServleResponse
esponse)throws ServletException, IOException{
}

response对象可以实现重定向、设置HTTP响应报头等。

3)获取JSP中的session对象

当需要为客户端建立session时,Servlet 容器会给每一-个用户建立一个 HttpSession对象。
获取HttpSession对象的方式是通过调用HttpServletRequest接口提供的以下两个方法:

public HttpSession getSession();
publ1c HttpSession getSession(Boolean create);

使用无参数的getSession0方法会获取一个HtpSession对象,而对于带参数的getSession0
方法,如果当前请求不属于任何会话,而且参数create值为true,则创建一个新会话, 否则返
回null,此后所有来自同一个的请求都属于这个会话。
也就是说,getSession(0方法 和getSession(rue)方法的作用是一样的, 如果有与当前的request
相关联的HttpSession,则返回与当前request关联的HttpSession; 如果没有,则返回-一个新建的
HttpSession;而getSession(true)如果没有与当前的request相关联的HttpSession,则返回null.

HttpSession session=request.getSession();表示通过request获得session,如果request中没有session,则创建一个。

4)获取JSP中的application对象

再Servlet中,application对象的获取是通过ServletContext接口来定义的,并通过HttpServlet提供的this.getServletContext()来进行实例化的。

application常用的方法有setAttribute()和getAttribute()

六、Servlet中的异常处理

servlet的异常处理有一下两种:

1)使用try/catch语句进行异常处理,这种方式和普通Java程序的异常处理是一样的。

2)配置web.xml中的标签来实现异常处理。

<error-page>
    <exception-type>异常类</exception-type>
    [<exception-code>异常编号</exception-code>]
    <location>/异常页面</location>
</error-page>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值