zoukankan      html  css  js  c++  java
  • Java实战之04JavaWeb-01Servlet

    一、Http协议

    1.什么是http协议?

    http协议就是描述客户端与服务器端交互过程的

    2.http的请求

    3.http的响应

    二、Servlet的简介

    1.Servlet的概述

    Servlet:Server Applet,运行在服务器端的java程序。Servlet是javaEE的规范(接口),如果想将我们写的程序让客户端访问到,创建一个类实现Servlet接口。Servlet作用是动态生成页面。

    狭义的servlet:单指Servlet接口

    广义的servlet:所有实现了Servlet接口的类都叫servlet

    2.Servlet的快速入门

    (1)开发步骤:

    1)创建一个类实现Servlet接口

    2)实现Servlet接口尚未实现的方法(重点实现service方法)

    3)在web.xml中配置servlet

    4)客户端访问

    (2)代码实现

     1 public class QuickServlet implements Servlet{
     2     
     3     private ServletConfig config = null;
     4     
     5     @Override
     6     public void service(ServletRequest req, ServletResponse res)
     7             throws ServletException, IOException {
     8         //通过jdbc访问数据库 获得数据 进行拼接
     9         //Sql = "select emial from user where username=?"
    10         String email = "";
    11         System.out.println("this is my first servlet!!!");
    12         res.getWriter().write("<h1 style='color:red'>");
    13         res.getWriter().write("this is my first servlet!!!");
    14         res.getWriter().write("hello:"+email);
    15         res.getWriter().write("</h1>");
    16         
    17         System.out.println(config);
    18     }
    19 
    20     @Override
    21     public void init(ServletConfig config) throws ServletException {
    22         this.config = config;
    23         System.out.println("servlet init1。。。。");
    24     }
    25         
    26     @Override
    27     public void destroy() {
    28         System.out.println("servlet destory。。。");
    29     }
    30     
    31     @Override
    32     public ServletConfig getServletConfig() {
    33         return null;
    34     }
    35 
    36     @Override
    37     public String getServletInfo() {
    38         return null;
    39     }
    40 }
    1 <servlet>
    2       <servlet-name>QuickServlet</servlet-name>
    3       <servlet-class>cn.itcast.servlet.QuickServlet</servlet-class>
    4       <load-on-startup>3</load-on-startup>
    5 </servlet>
    6 <servlet-mapping>
    7       <servlet-name>QuickServlet</servlet-name>
    8       <url-pattern>/quick</url-pattern>
    9 </servlet-mapping>

    (3)访问的过程

    在客户端输入地址:

    页面展现:

    (4)访问过程中Servlet对象谁创建,service方法谁调用的?

    整个访问过程,servlet对象tomcat创建 service方法tomcat调用,在service方法时request和response参数对象tomcat负责传递的

    三、Servlet的API方法

    1.init方法

    public void init(ServletConfig config)

    init方法是Servlet的初始化方法,Servlet对象创建时调用的方法

    其中的参数:ServletConfig代表是Servlet的配置对象,内部封装的是此Servlet 的配置信息

    2.destroy方法

    public void destroy()

    destory是Servlet销毁的方法,Servlet对象销毁的时候执行

    3.service方法

    public void service(ServletRequest req, ServletResponse res)

    servlet的核心方法,程序代码放置到service方法中,每一次都会执行

    其中的参数:

    ServletRequest:代表请求,内部封装的是请求的信息

    ServletResponse:代表响应,内部封装的要响应给客户端的信息

    ****Servlet的生命周期(面试题出现)

    何时创建Servlet对象:

    默认第一次访问时创建Servlet对象,会将servlet放置到web容器的内存中, 等待为后面的访问服务,某一个Servlet对象只有一个。执行init方法

    何时销毁Servlet对象:

    服务器关闭或web应从服务器中移除Servlet销毁,销毁时会执行destory方法

    必然执行的方法:

    service方法,每次客户端请求都会执行一次。

    四、Servlet相关的配置文件

    1.Servlet的基本配置(重点)

    <servlet>

    <servlet-name>随意写</servlet-name>

    <servlet-class>Servlet的全包名</servlet-class>

    </servlet>

    <servlet-mapping>

    <serlvet-name>与上面的name一致</servlet-name>

    <url-pattern>/servlet对外访问的虚拟路径</url-pattern>

    </servlet-mapping>

    url-patten的配置:

    1)完全匹配:访问虚拟的资源与配置的完全一样

    2)目录匹配:格式:/开始 *结束

    示例:/aaa/bbb/*

    3)扩展名匹配:格式: 以*开始  以扩展名结束

    示例:*.abc

    注意:第二种与第三种不要混用 /aaa/bbb/*.abc  错误的

    2.服务器已启动就创建servlet对象的配置

    <load-on-startup>数字(servlet创建的顺序)</load-on-startup>

    1  <servlet>
    2       <servlet-name>QuickServlet</servlet-name>
    3       <servlet-class>cn.itcast.servlet.QuickServlet</servlet-class>
    4       <load-on-startup>3</load-on-startup>
    5   </servlet>

    数字的配置几?只要是正整数就行 数字越小越早创建 但是建议不要配置成1

    3.欢迎页面

    1  <!-- 欢饮的文件列表 -->
    2   <welcome-file-list>
    3     <welcome-file>index.html</welcome-file>
    4     <welcome-file>index.jsp</welcome-file>
    5   </welcome-file-list>

    4.缺省Servlet(了解)

    在url-pattern中配置成/ 缺省的servlet,所有的servlet资源都不匹配时找缺省的servlet。

    1  <servlet-mapping>
    2     <servlet-name>Servlet</servlet-name>
    3     <url-pattern>/</url-pattern>
    4   </servlet-mapping>

    问题:挡手动配置缺省的servlet 发现静态资源不能访问了

    原因:tomcat的默认全局的配置文件指定了系统缺省的servlet,自定义一个缺省 的servlet,把默认全局缺省的servlet覆盖了,工程中所有的资源都是servlet 帮助返回给客户端(包括静态资源)

    注意:静态资源访问过程:

    在页面访问index.html静态资源

    tomcat会按照index.html名字找一个servlet,找不到,会找缺省 servlet

    DefaultServlet内部帮你找一个名字叫index.html的静态资源,

    第一种结果:找到index.html资源 缺省的servlet逐行输出静态资源

    第二种结果:找不到 返回一个默认的错误页面404

    总结:所有的web资源 都是servlet响应的

    五、ServletConfig对象

    1.ServletConfig的概述

    代表是Servlet对象的配置对象,ServletConfig对象内部封装的是该Servlet对象的配置信息,一个Servlet就有一个对应的ServletConfig对象。当Servlet对象创建时,web容器会调用init方法,同时会创建该Servlet对象的配置对象ServletConfig作为参数传递给init方法。

    2.获得ServletConfig对象

    通过GenericServlet的下面的方法

    在自定义的Servlet中直接使用 getServletConfig();

    3.ServletConfig对象的作用

    1)获得servlet的名字

    <servlet-name>Servlet的名称</servlet-name>

    2)获得该servlet的初始化的参数

    getInitParameter(name);

    getInitParameterNames();

     1   <servlet>
     2     <servlet-name>Servlet5</servlet-name>
     3     <servlet-class>cn.itcast.servlet.Servlet5</servlet-class>
     4     <init-param>
     5         <param-name>aaa</param-name>
     6         <param-value>AAA</param-value>
     7     </init-param>
     8     <init-param>
     9         <param-name>bbb</param-name>
    10         <param-value>BBB</param-value>
    11     </init-param>
    12   </servlet>

    3)可获得ServletContext对象

    ServletContext context = config.getServletContext();

    六、ServletContext对象(重点)

    1.ServletContext概述

    中文译成 Servlet上下文对象,代表的是一个Web应用的环境对象,内部封装的与web应用整体相关的数据。服务器一启动就会创建ServletContext对象,一个web应用只有一个ServletContext对象。

    2.获得ServletContext对象

    1)config.getServletContext();

    2)getServletContext();

    3.ServletContext的作用

    (1)获取web应用的初始化参数

    1  <context-param>
    2       <param-name>xxx</param-name>
    3       <param-value>YYY</param-value>
    4   </context-param>

    (2)ServletContext对象可以作为域对象存储数据

    域对象:区域对象,存数据

    只要是域对象,必然有下面三个方法

    setAttribute(name,value)---向域对象中设置值

    getAttribute(name)---从域中获取值

    removeAttribute(name)---从域中删除某个数据

    (3)获得web应用中的资源的绝对路径

    资源在服务器上的绝对路径  context.getRealPath(相对于web应用根目录地址);

    1   ServletContext context = getServletContext();
    2         
    3     String pathA = context.getRealPath("/a.txt");
    4         
    5     String pathB = context.getRealPath("/WEB-INF/b.txt");
    6         
    7     String pathC = context.getRealPath("/WEB-INF/classes/c.txt");
  • 相关阅读:
    20162317袁逸灏 第四周实验报告:实验一 线性结构
    仿ArrayList功能的bag类
    算法复杂度课后作业
    20162317 2017-2018-1 《程序设计与数据结构》第3周学习总结
    学号 2017-2018-1 《程序设计与数据结构》第1周学习总结
    Android:有关下拉菜单导航的学习(供自己参考)
    Android:有关菜单的学习(供自己参考)
    Java:类集框架中集合的学习
    20162305李昱兴 2017-2018-1 《程序设计与数据结构》第1周学习总结
    第十六周 数据库课堂实践 20162305 李昱兴
  • 原文地址:https://www.cnblogs.com/minihouseCoder/p/5623592.html
Copyright © 2011-2022 走看看