• Servlet 服务器端小程序



    1.tomcat安装及目录介绍
      JAVA_HOME
      CATALINA_HOME
      PATH=%JAVA_HOME%/bin;

    2.静态web项目、动态web项目
      WEB-INF
        lib
        classes
        web.xml
    3.外部动态web项目
      server.xml
      <host>
        <Context path="" docBase="" />
      </host>

    4.tomcat和eclipse的整合!tomcat镜像!


    5.http协议介绍及get与post请求、响应状态码
      格式:
        报文首部
          报文首行
          报文头部
        空行
        报文体

      请求报文:get请求、post请求
      响应报文
      get请求和post请求的区别
        1)get请求是通过url地址栏来传递参数的,而post请求通过报文体来传递参数的
        2)get请求可以在浏览器地址栏中看到请求参数,而post请求看不到
        3)get请求对传递的参数有限制,最多允许255个字符,所以数据比较大的话我们使用post请求!
        4.在表单中一般我们都使用post请求,除了在表单中,页面中的其它地方基本上都是使用get请求!

    6.servlet快速入门
      1)servlet是web的三大组件之一;web的三大组件是指:Servlet、Filter、Listener
      2)狭义的servlet:servlet
      3)广义的servlet:凡是实现了servlet接口的类都称之为servlet

    7.如何快速定义一个servlet?
      1)自定义实现类,实现servlet接口,实现接口就意味着实现servlet中的方法
      2)去web.xml中注册一下

    问题点:
      1)创建动态web项目的时候没有选择tomcat
      2)复制类的全路径的时候

      3)项目名书写:不要8.x

     

    servlet的配置
      <!-- 向服务器注册servlet -->
      <servlet>
      <!-- servlet-name是给我们使用的,我们使用这个servlet-name对servlet进行配置! -->
      <servlet-name>AServlet</servlet-name>
      <!-- servlet-class指定全类名,给服务器使用,服务器使用这个全类名创建一个servlet实例【对象】 -->
      <servlet-class>com.neuedu.servlet.AServlet</servlet-class>
      </servlet>

      <!-- servlet-mapping做请求映射 -->
      <servlet-mapping>
      <servlet-name>AServlet</servlet-name>
      <!-- 请求映射是通过这个url-pattern来实现的! -->
      <url-pattern>/BServlet</url-pattern>
      </servlet-mapping>

      注意点:
        1.<url-pattern>标签中指定的映射路径不必和<servlet-name>标签指定的内容保持一致!
        2.只有你浏览器地址栏中请求的url和我们这里<url-pattern>标签中的映射一致的时候,我们自定义的servlet类才会处理这个请求!

    生命周期

      servlet是由tomcat服务器来管理的!

      servlet生命周期:是指servlet对象由产生到销毁的过程!

      servlet生命周期涉及的几个方法:
        1.构造器方法:只会在第一次访问这个servlet的时候调用一次,调用一次就说明servlet是单例的,但是servlet是多线程的,非线程安全的,也就是说在servlet中我们尽量不要在service方法中操作全局变量!

        2.init方法:init方法只会在第一次访问servlet的时候调用一次,对servlet对象进行初始化操作!

        3.service:service方法会在每次访问这个servlet的时候都调用一次,而且我们的业务逻辑也是写在这个service方法!

        4.destroy方法::destroy方法只会在我们的项目卸载的时候调用一次,也就是说在服务器关闭的时候会在服务器关闭的时候调用一次!

    servletConfig

      ServletConfig:是一个接口,一个ServletConfig对象只代表当前的servlet类的配置信息。
        1) represent:
          * <servlet>
          <!-- servlet-name是给我们使用的,我们使用这个servlet-name对servlet进行配置! -->
          <servlet-name>AServlet</servlet-name>
          <!-- servlet-class指定全类名,给服务器使用,服务器使用这个全类名创建一个servlet实例【对象】 -->
          <servlet-class>com.neuedu.servlet.AServlet</servlet-class>
          </servlet>

        2).如何获取:
          由服务器创建,通过init方法的参数直接传递给我们,我们直接在init方法使用就可以了!

        3)功能:
          getServletName():获取当前servlet-name值,也就是获取servletname
          getInitParameter("password"):获取servlet的初始化参数!
          getServletContext():获取当前web应用!

    ServletContext
      1) 代表:代表的是当前web应用,也就是指的web.xml文件中的信息!

      2)获取:通过ServletConfig对象的getServletContext()获取!

      3) 功能:
        getInitParameter:获取整个web应用的初始化参数,也就是如下:
          <context-param>
          <param-name>user</param-name>
          <param-value>lisi</param-value>
          </context-param>
        获取资源的真实路径:getRealPath()
          虚拟路径:http://localhost:8080/servlet-demo1/index.html
          真实路径:E:LHF teachermarsworkspaceservlet-demo1WebContentindex.html

    MyGenericServlet
      1.定义一个抽象类实现servlet接口,保留service方法不去实现,其余方法都实现了!
      2.自定义抽象类子类,在web.xml文件中注册一下这个子类!

    HttpServlet
      public class AServlet extends HttpServlet {
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request,response);
        }
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }

      }  

    HttpServletRequest
      1)代表:代表浏览器向服务器发送的请求报文
      2) 获取:由tomcat服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法
      3) 功能:
        getParameter()获取请求参数
        getContextPath():获取当前项目名
        setAttribute/getAttribute:本身就是一个域对象!
        request.getRequestDispatcher("1.html").forward(request, response);可以实现转发功能

    HttpServletResponse
      1)代表:服务器响应给浏览器的响应报文
      2)获取:由服务器创建,然后做为参数传递给我们相对应的doGet或者doPost方法!
      3)功能:
        response.getWriter().println("<h3>hello world!</h3>");可以返回给浏览器一个页面或者一个页面片段!
        response.sendRedirect("/servlet1/1.html"); :可以做请求的重定向

    转发和重定向

      转发:当浏览器向服务器发送请求的时候,服务器自己不处理,而是调用其它的web资源进行处理!
      重定向:当浏览器向服务器发送请求的时候,服务器返回给浏览器一个特殊的响应,这个特殊的响应告诉浏览器再向另一个地址发送一个请求!

      转发和重定向的区别
                  发生在浏览器端还是服务器   浏览器的请求次数   浏览器地址栏是否发生变化    浏览器是否能够感知到
        转发[request]        发生在服务器端          1            不发生变化           感知不到
        重定向[response]    发生在浏览器端           2            发生变化           能感知到


    编码问题分析
      通信双方在进行通信的时候,实际上是将通信的内容【信息】是按照一定的规则转化为二进制进行通讯的
      而这个一定的规则就是字符的编码:ascii,gb2312,gbk,iso8859-1,utf-8;
      在请求到达的时候,另一方就需要解码!

      乱码原因:
        通信双方的编码方式和解码方式不一致造成的,
      解决办法:
        统一通信双方的编码方式和解码方式,都使用utf-8编码!

      编码分类:
        请求编码
          浏览器编码---》服务器解码iso8859-1 
        响应编码
          服务器编码----》浏览器解码 
        服务器端默认使用的是iso8859-1编码,而浏览器默认使用的是gb2312,当然我们也可以在页面中告诉浏览器用什么编码方式!

      请求编码
        get请求:
          统一浏览器和服务器端的编码格式为utf-8编码:在server.xml文件的connector标签中指定编码格式为utf-8编码:URIEncoding="utf8" 
        post请求:
          我们可以在post方法中在第一次获取请求参数之前通过request.setCharacterEncoding("utf-8");来设置解码格式!

      响应编码
          可以通过response.setContentType("text/html;charset=utf-8");设置服务器和浏览器的编码和解码格式!


    路径问题:

      绝对路径:绝对路径是以/开头的路径!
        相对于当前服务器的绝对路径:如果是服务器解析,那么/就代表当前服务器的绝对路径:http://localhost:8080
        相对于当前web应用的绝对路径:代表的是http://localhost:8080/项目名/

        如果是服务器端解析,代表的是:http://localhost:8080/项目名/
        如果是浏览器端解析,代表的是:http://localhost:8080


      相对路径:不是以/开头的路径是相对路径,相对的是当前web资源目录的路径!

      常见的路径:
        url-pattern:
        转发的路径:
          这两个的绝对路径由服务器解析,相对于项目的根目录    http://主机地址:端口号/项目名/

      重定向的路径:
        在实际开发中,我们使用的是绝对路径,不使用相对路径!开发中尽量不要使用硬编码的方式!
      页面中的路径:
        这两个路径由浏览器解析,相对于服务器的根目录
        http://主机地址:端口号/

      base标签

        base标签里面有一个href属性,这个属性允许我们用使用相对路径的方式使用绝对路径!
        我们再使用相对路径的时候,相对路径会以这个href属性值作为前缀!

  • 相关阅读:
    一个屌丝程序猿的人生(一百零二)
    一个屌丝程序猿的人生(一百零一)
    一个屌丝程序猿的人生(一百)
    一个屌丝程序猿的人生(九十九)
    JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术
    JavaEE开发之SpringMVC中的自定义拦截器及异常处理
    JavaEE开发之SpringMVC中的路由配置及参数传递详解
    JavaEE开发使用Maven管理的SpringMVC工程
    JavaEE开发之Spring中的条件注解、组合注解与元注解
    JavaEE开发之Spring中的多线程编程以及任务定时器详解
  • 原文地址:https://www.cnblogs.com/alternative/p/7353935.html
Copyright © 2020-2023  润新知