手记

Servlet的配置和使用!

1.Servlet 的 HelloWorld
1).创建一个Servlet 接口的实现类
public class FirstServlet implements Servlet

2).在web.xml文件中配置和映射这个Servlet

     <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>just.another.test.FirstServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
      </servlet-mapping>

2.Servlet 容器:运行Servlet、JSP、Filter 等的软件环境。
1).可以来创建Servlet,并调用Servlet 的相关生命周期方法。
2).JSP,Filter,Listener,tag...

3.Servlet 生命周期的方法:以下方法都由Servlet 容器负责调用。
1).构造器:只被调用一次,只有第一次请求Servlet 时,创建Servlet 的实例,调用构造器
这说明Servlet 是单实例的!
2).init方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前的Servlet。
3).service:被多次调用,每次请求都会调用Servlet方法,实际用于响应请求。
4).destroy:只被调用一次,在当前Servlet所在的WEB应用被卸载前调用,用于释放当前Servlet 所占用的资源。

5.load-on-startup 参数:
1).配置在Servlet节点中
2).可以指定Servlet被创建的时机,若为负数,则在第一次请求时被创建,若为0或正数,则在当前WEB应用被
Servlet 容器加载时创建实例,且数值越小越早被创建。

6.ServletConfig:封装了Servlet 的配置信息,并且可以获取ServletContext对象

1).配置Servlet的初始化参数

    <servlet>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>just.another.test.FirstServlet</servlet-class>

    <!-- 配置Servlet 的初始化参数。且节点必须在load-on-startup节点前面 -->
    <init-param>
        <!-- 参数名 -->
        <param-name>user</param-name>
        <!-- 参数值 -->
        <param-value>root</param-value>
    </init-param>

    <init-param>
        <param-name>password</param-name>
        <param-value>1230</param-value>
    </init-param>

    <load-on-startup>-1</load-on-startup>
  </servlet>

2).获取初始化参数:
    getInitParameter(String name):获取指定参数名的初始化参数
    getInitParameterNames():获取参数名组成的Enumeration 对象

        String user = servletConfig.getInitParameter("user");
        System.out.println("user:"+user);

        Enumeration<String> names = servletConfig.getInitParameterNames();
        while(names.hasMoreElements()){
            String name=names.nextElement();
            String value=servletConfig.getInitParameter(name);
            System.out.println(name+":"+value);
        }

3).获取Servlet 的配置信息(了解)

7.ServletContext

1).可以由ServletConfig 获取

2).该对象代表当前WEB应用:可以认为ServletContext是当前WEB应用的一个大管家,可以从中获取到当前WEB应用的各个方面的信息。

    ①.获取当前WEB应用的初始化参数
    设置初始化参数:可以为所有的Servlet 所获取,而Servlet 的初始化参数只能当前Servlet 可以获取
        <context-param>
            <param-name>driver</param-name>
            <param-value>com.mysql.jdbc.Driver</param-value>
        </context-param>

     方法:
        getInitParameter(String name)
        getInitParameterNames()

    ②.获取当前WEB应用的某一个文件在服务器上的绝对路径,而不是部署前的路径

    getRealPath(String path);

    ③.获取当前WEB应用的名称:

    getContextPath

    ④.获取当前WEB应用的某一个文件的输入流:

    getResourceAsStream(String path):path 的/相当于当前WEB应用的根目录

8.如何在Servlet中获取信息:

1).Servlet的service()方法用于应答请求:因为每次请求都会调用service()方法

public void service(ServletRequest request, ServletResponse response)
            throws ServletException, IOException 

ServletRequest:封装了请求信息,可以从中获取到任何的请求信息.
ServletResponse:封装了响应信息,如果想给用户什么响应,均可以使用该接口的方法实现。

这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时传入

2).ServletRequest:封装了请求信息,可以从中获取到任何的请求信息.

    ①.获取请求参数:
    >String getParameter(String name):根据请求参数的名字,返回参数值
    若请求参数有多个值(例如 checkbox),该方法只能获取到第一个提交的值

    >String[] getParameterValues(String name):根据请求参数的名字,返回请求参数的字符串数组

    >Map getParameterMap():返回请求参数的键值对:key:参数名,value:参数值,String 数组类型

    >Enumeration geyParameterName():返回参数名对应的Enumeration 对象
    类似于ServletConfig(或 ServletContext)的getInitParameterNames()方法

    ②.获取请求的URL:
        HttpServletRequest httpServletRequest=(HttpServletRequest)request;
        String requestURL = httpServletRequest.getRequestURI();

    ③.获取请求方式:
        String method = httpServletRequest.getMethod();

    ④.若是一个GET请求,获取请求 参数对应的那个字符串,即?后的那个字符串
        String queryString=httpServletRequest.getQueryString();

    ⑤.获取请求Servlet的映射路径
        String servletPath = httpServletRequest.getServletPath();

    ⑥.和attribute相关的几个方法

3).HttpServletRequest:是ServletRequest 的子接口,针对HTTP请求所定义,里面包含了大量获取HTTP请求相关的方法 

4).ServletResponse:封装了响应信息,如果想给用户什么响应,均可以使用该接口的方法实现。

    ①.getWriter():返回PrintWriter 对象,调用对象的print()方法,将把print()中的参数直接打印到客户的浏览器上。

    ②.设置响应的内容类型:response.setContentType("application/msword");

    ③.void sendRedirect(String location):请求重定向.(此方法为HTTPServletResponse 中定义.)

-----------------------------------------------------------------------------------------------

在web.xml中设置两个WEB应用的初始化参数,user,password.
定义一个login.html,里边定义两个请求字段:user,password,发送请求到loginServlet
再创建一个loginServlet,在其中获取请求的user,password,此对其和web.xml文件中定义的参数是否一致
若一致,响应Hello:xxx,若不一致,响应Sorry:xxx xxx为user。

-----------------------------------------------------------------------------------------------

1.GenericServlet:

1).是一个Servlet,是Servlet 接口和ServletConfig 接口的实现类,但是是一个抽象类,其中service方法为抽象方法

2).如果新建的Servlet 程序直接继承GenericServlet 会使开发更简洁

3).具体实现:

①.在GenericServlet 中声明了一个ServletConfig 类型的成员变量,在init(ServletConfig)方法中对其进行了初始化
②.利用servletConfig 成员变量的方法实现了ServletConfig 接口的方法
③.还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖init()在其中实现对Servlet的初始化
④.不建议直接覆盖init(ServletConfig),因为如果忘记编写super.init(ServletConfig),而还使用了ServletConfig接口的方法,则会出现空指针异常
⑤.新建的init()方法并非Servlet的生命周期方法,而init(ServletConfig)是生命周期相关的方法。

2.HttpServlet

1).是一个Servlet,继承GenericServlet,针对于HTTP协议所制定

2).在service()方法中直接把ServletRequest 和 ServletResponse 转为 HTTPServletRequest 和 HttpServletResponse
并调用了重载的service(HttpServletRequest,HttpServletReponse)

在 service(HttpServletRequest,HttpServletReponse) 获取了请求方式:request.getMethod().根据请求方式又创建了
doXxx()方法(xxx 为具体的请求方式,比如doGet,doPost)

3).实际开发中,直接继承HttpServlet,并根据请求方式复写doXxx()方法接口

4).好处:直接由针对性的覆盖doXxx()方法;直接使用HttpServletRequest 和 HttpServletResponse,不在需要强转

8人推荐
随时随地看视频
慕课网APP