• 基础-Servlet


    Servlet是运行在web服务器上的一个java类。

    它的作用是将http请求和http相应进行操作完成我们的业务逻辑。

    servlet创建

      1.创建一个类extends HttpServlet

      2.重写一个请求处理的方法 doGet

      3.servlet配置 web.xml中进行配置 如下:

    <servlet>

      <servlet-name>HelloWorldExample</servlet-name>

      <servlet-class>HelloWorldExample</servlet-class>

    </servlet>

    <servlet-mapping>

      <servlet-name>HelloWorldExample</servlet-name>

      <url-pattern>/servlets/servelt/HelloWorldExample</url-pattern>

    </servlet-mapping>

    servlet生命周期

      1.客户端请求该servlet;

      2.加载servlet类到内存;

      3.实例化、初始化该servlet;

      4.init()初始化参数;

      5.service()doGet() 或者 doPost());

      6.destory()。

     当第一次访问时,服务器会根据请求的url,在web.xml文件中查找到对应的servlet,并将其实例化。

    同时调用了init方法,这个方法只被调用一次。

    开启一个线程,调用service方法。

    当下一次再访问时,都是开启一个新线程来调用service方法

    如果服务器关闭了,会调用servletdestroy方法来销毁实例。

     注意:

     1.servlet实例是由服务器创建的,并且一般情况下只有一个,常驻内存。

     2.servlet是线程不安全的,不建议在servlet中创建成员变量,如果创建了,需要考虑同步。

    对于<url-pattern>我们在开发中它的写法有以下几种:

     完全匹配  我们之前写的都是完全匹配方式 ,它要求必须以/”开始

     目录匹配  必须以/”开始,以”*”结束

     扩展名匹配  不能以/”开始,以*.xxx结束 xxx代表的是后缀名

     优先级 完全匹配>目录匹配>扩展名匹配

     我们在html页面上怎样可以向服务器发送一个请求?

     1.超连接   <a>

     2.表单 <form action=””  method=””>

     3.location.href=””

     4.直接在地址栏上输入

     对于超连接  location.href它们都是get请求方式.

     唯一可以post请求方式的只有表单这一种方式

     ServletConfig对象

    它是servlet的一个配置对象

    ServletConfig对象是由servlet容器创建的,在访问对应的servlet时将ServletConfig对象通过init方法传递到了Servlet中。每一个Servlet都有自己的ServletConfig对象。

     在我们的servlet中要想获取ServletConfig对象:

     ServletConfig config=this.getServletConfig();

     ServletConfig对象作用:

    获取Servlet name  获取的是<servlet-name>中的值

    获取 Servlet的初始化参数

    获取ServletContext对象。

     ServletContext

     ServletContext context=ServletConfig.getServletContext();

     ServletContext是什么,它有什么作用?

     每一个web应用被web容器加载时,就会产生一个ServletContext对象,

    简单理解就是一个web应用对应一个ServletContext.

    ServletContext对象是由web容器创建的。

      web容器也就是tomcat服务器

     要获取一个ServletContext对象可以通过 ServletConfig.getServletContext()

     域对象   上下文

     web中如果听到域对象,就将其想像成Map

     作用:

     可以实现多个servlet之间的通信。

     可以获取ServletContext的初始化参数

     可以获取资源信息

     String getRealPath() 可以获取服务器上的资源的绝对磁盘路径。

     InputStream getResourceAsStream(String path) 可以获取一个指向指定资源的输入流

     getResource()

     其它功能

     获取mime类型    String getMimeType(String )

     分发请求

     写入日志.

     ServletContext可以实现Servlet之间的共享。

    setAttribute(String name,Object value)

    Object getAttribute(String name)

    removeAttribute(String name);

     classpath路径

    Class在获取时,getResource() 参数建议从”/”开始写

    ClassLoader在获取时,getResource(“”)它本身就是从根目录查找,所以不建议使用”/

     户端访问servlet的路径问题

     绝对  带协议   不带协议  /工程名/资源路径

     相对  考虑当前页面与访问的servlet之间的关系

     Requestresponse是代表请求与响应的两个对象,它是由web服务器创建的,传递给我们自己的Servletservice方法.

     通过request对象就可以获取http请求信息。

     通过response对象就可以设置http响应信息。

     解决响应操作乱码:

     response.setCharacterEncoding(String charsetName) 设置响应信息编码

     response.setContentType(text/html;charset=utf-8); 设置响应信息编码,还通知浏览器以什么编码来显示信息

     获得浏览器类型

     String agent=request.getHeader("user-agent");

     常用状态码

     200请求成功(其后是对GETPOST请求的应答文档。)

     302所请求的页面已经临时转移至新的url

     304未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

     404没有找到文件或目录。

     405请求中指定的方法不被允许

     500请求未完成。服务器遇到不可预知的情况

    请求转发和重定向的区别:

     1.请求转发是服务器内部跳转,地址栏不会发生改变

     重定向地址栏会发生改变。

     2.请求转发,只有一次请求,一次响应.

     重定向,有两次请求,两次响应。

     3.请求转发存在request域,可以共享数据.

     重定向不存在request域。

     4.请求转发只能在服务器的内部跳转,简单说,只能访问本站内资源。

     重定向可以访问站外资源,也可以访问站内资源.

     5.请求转发是由request 发起的 . request.getRequestDispatcher().forward()

     重定向是由response 发起的  response.sendRedirect();

     6.请求转发与重定向时路径写法不一样.

     重定向要跳转的路径是从浏览器在次发起的,是浏览器端路径,这时必须写在   /工程名/资源

     请求转发是服务器内部跳转,这时它与浏览器无关 写法   /资源

  • 相关阅读:
    The required MAP capability is more than the supported max container capability in the cluster. Killing the Job. mapResourceRequest: <memory:2048, vCores:2> maxContainerCapability:<memory:1024, vCores
    centos6.8安装cdh6.0.0
    oracle拼接sql
    数据插入不覆盖更新,设置定时任务
    支持向量机在 R 语言中的实现和使用
    怎么彻底去掉office365
    汽车电子软件规范学习
    ISO/IEC TS 17961 C Secure Coding Rules
    UML图
    Gitflow工作流程
  • 原文地址:https://www.cnblogs.com/MessiAndDream/p/5880172.html
Copyright © 2020-2023  润新知