zoukankan      html  css  js  c++  java
  • Servlet入门(二),超级详细!!!看完就会!!!!

    上一篇的内容见:

    Servlet入门(一),超级详细!!!看完就会!!!!

    四.Servlet入门

    2.标准Java Web工程结构

    这些都不用我们自己来手动创建,只要使用eclipse创建标准的java工程,eclipse就会自动帮我们创建好了.

    webapps:web应用程序发布的目录 

    web应用目录:一般是工程的名字,里面是WEB-INF和METE-INF文件夹

    index.html或index.jsp:默认首页.创建在WebContent目录下.

    工程目录中也多了index.html

    eclipse会将我们自己工程中创建的文件自动的和Tomcat发布的目录进行同步

    我们可以在index.html中编写内容

    这时通过网址:localhost:8080/FirstServlet/

    显示的就是我们的默认首页index.html

    WEB-INF:用于存放配置文件以及相关的类,jar包等

    3.Servlet开发与基本配置

    1)Servlet开发步骤

    Step1.创建Servlet类,继承HttpServlet

    Step2.重写service方法,编写程序代码

    Step3.配置web.xml,绑定URL

    4.请求参数的发送与接收

    什么是请求参数?

    -请求参数是浏览器通过请求向tomcat提交的数据

    -请求参数通常是用户输入的数据,待Servlet进行处理

    请求参数的格式 

    请求参数一次可以传递多组数据,每组数组采用键值对的方式出现,多组数据之间采用&连接:

    参数名1=参数值1&参数名2=参数值2&参数名3=参数值3....

    在准备好的带有表单的页面中,在表单form标签中添加action属性,属性值一般就是访问servlet的完整地址.

    实际开发过程中属性值url中的http://localhost:8080可以省略,直接写/工程名/url-pattern即可.

    在浏览器中输入:localhost:8080/FirstServlet/Student.html

    (ip地址:端口号/工程名/页面名) 

    可以看到之前准备好的表单页面,在表单中填好相应信息后,点击提交.

    会跳转到servlet设置好的页面上,同时,地址栏中的url后面会看到请求参数的信息.

    接收请求参数

    5.Get与Post请求

    它们的目标都是将我们的请求发送并且被Servlet处理 .

    在我们的表单发送的时候,默认都是用get方法.

    如果要更改,需要在form表单上添加method属性.

    使用post时,点击提交表单后,跳转的地址后面的参数就都没有了. 

     那我们要在哪里才能看到参数呢?

    在浏览器中按F12,打开控制台页面,进入network,刷新,就可以看到当前页面的地址

    点击Form Data旁边的 view source,可以看到post发送数据的格式和get是一样的,只是发送的方式不同.

    get方法,除了能在地址栏中看到参数外,也可以在控制台中的Query String Parameters中看到

    service是请求处理的核心方法,无论是get还是post请求都会被service()方法处理.

    通过request.getMethod()方法可以获得现在使用的是哪中请求方法,得到的内容是GET或POST

    但是,在实际的开发工作中,因为get和post的处理逻辑是不同的,我们要将它们分开处理.

    这时service方法的权利就有点过大了,因为所有的请求都会被service接收到.

    因此.sevelet专门针对get和post 提供了相应的处理方法doGet()doPost()

    除了方法名不同外,其他全部与service方法一致.

    service就相当于一个分拣员,得到请求后,判断是采用哪种请求方法,如果是get方法就交给给doGet()处理.如果是post方法,就交给doPost()处理.

    get与post的应用场景 

    6.Servlet生命周期

     1 装载 - web.xml(Tomcat解析web.xml,知道servlet的存在)

      Tomcat启动时,servlet会扫描我们web应用中的web.xml文件,在web.xml中对servlet进行了声明并且绑定了url.

      这时只是解析了web.xml,并没有创建servlet

    2 创建 - 构造函数(第一次访问我们的servlet的时候,创建我们的servlet对象,并执行它的构造函数)

      在我们第一次访问servlet所绑定的url的时候,Tomcat会创建我们的servlet类对象(只是单纯的new),默认的执行构造函数

    3 初始化 - init()  调用init方法进行初始化

      Servlet会执行它自己带的init()方法来将我们的servlet初始化.之后servlet就创建成功了

    4 提供服务 - service()

      我们之后再访问servlet的时候,servlet会通过service或者是doGet,doPost方法来为我们提供服务

    5 销毁 - destroy()

      如果我们的Tomcat重启或关闭了,servlet会自动执行destroy()销毁方法

    ==============================================================================================================

    我们可以在我们的servlet代码中增加构造方法,以及重写init和destroy方法

    重写init:source→Override/Implement Methods...→选择GenericServlet类里的init(Config)方法

    重写destroy:source→Override/Implement Methods...→选择GenericServlet类里的destroy()方法

    我们启动Tomcat.但是,此时发现控制台并没有任何的输出,这时因为servlet是在第一次被访问的时候才会进行创建和初始化.

    在启动时,它其实只是在web.xml文件中进行了解析,Tomcat在这个时候是知道有这个servlet存在的,但不会对它进行任何初始化工作

    在我们通过浏览器访问servlet之后,可以看到控制台这时输出了相应的内容

    当我们再次访问servlet的时候,只是进行了service方法进行了相应的输出,并没有再创建对象和初始化 

     通过这个例子,我们可以看出 在Tomcat的全局中有且只有一个servlet对象,当这个servlet对象在第一次访问servlet时被创建以后,

    之后的所有请求都会被这一个servlet对象所处理.

    当我们的代码被修改并保存的时候,可以看到控制台打印servlet正在销毁,这是因为保存的时候,会重启Tomcat,自动执行destroy方法

    当我们重启后,再访问servlet,可以看到,此时对象又被重新创建并初始化提供服务了.这整个过程就是servlet的完整生命周期.

    7.注解配置Servlet

    在之前的学习中,我们没编写一个servlet文件都要在web.xml中进行配置.虽然这是必经的过程,但是这样在开发过程中比较麻烦.

    在jdk1.5以后推出了一个全新的技术.当当~它就是---- 注解!

    注解用于简化web应用程序的开发和配置.

    在servlet 3.X 以后也引入了 "注解Annotation"特性

    Servlet有且只有一个核心注解:@WebServlet

    当我们把@WebServlet写到代码中,就起到了对Servlet文件进行配置的作用,从而避免在web.xml中多次书写Servlet相关配置

    =============================================================================================

    使用方式也很简单,只要在我们的Servlet类上,写上@WebServlet,并导入对应的包,在@WebServlet中写好相应的参数

    这里面写的地址就是之前我们写在web.xml文件的servlet映射中的url地址. 

     在web应用启动时,Tomcat会扫描当前所有的字节码文件(.class),看到这个servlet类上写了@WebServlet并且配置了对应的url,就把这个规则加载进来,

    即便没有在web.xml中进行配置也没有关系,因为通过注解也可以知道映射所在url,所以WebServlet就像一个标志一样,它告诉Tomcat我们当前的类就是一个servlet,

    把它绑定到/anno上就可以了.

    下面我们来验证一下.

    启动Tomcat,打开浏览器,访问localhost:8080/FirstServlet/anno

      可以看到内容显示出来了,但是中文部分变成了问号.

    在代码中添加一句设置字符编码的就可以解决这一问题了.但要注意设置编码这一句要写到输出语句的上面.否则无效.

     

     8.启动时加载Servlet

    web.xml使用<load-on-startup>设置启动加载

    <load-on-startup>0~9999<load-on-startup>

    推荐范围是0~9999,其中0优先级最高,如果在当前的系统中有多个Servlet都要启动时加载,0就是最先被执行的

    启动时加载在工作中常用于系统的预处理,把这些费时费力的工作放到系统启动时来进行,这样用户在访问Servlet的时候就会快很多

    我们在工程中理解一下这个问题:

    Step1 首先创建一个工程job-servlet,在工程目录的src目录中创建一个类CreateServlet

    场景是:现在我们开发一个系统,在系统启动的时候要自动完成初始化数据库,导入数据以及统计分析这三个工作

    这里的CreateServlet负责创建数据库,现在我们希望在程序启动的时候让这个Servlet自动的完成这个工作.

    点击source→override/implement Methods→选择GenericServlet这个类里的init(),来重写init()方法

    在Tomcat启动时,如果我们设置了启动时加载,它就会自动运行init方法中编写的代码.

    然后在web.xml中配置Servlet的自动启动

     配置好后,将这个工程发布到Tomcat,启动Tomcat,可以看到控制台中"正在创建数据库"已经被打印出来

     Step2 再创建一个类ImportServlet

    场景是:用于在数据库创建成功后,对数据进行自动导入.

    点击source→override/implement Methods→选择GenericServlet这个类里的init(),来重写init()方法

    然后在web.xml中配置这个Servlet的自动启动,并把load-on-start的数字设置为1,这样就符合了它们的运行顺序

    配置好后,启动Tomcat,可以看到控制台中"正在导入数据"已经被打印出来

     Step3 再创建一个类AnalysisServlet

    场景是:用于导入数据成功后,分析数据.

    点击source→override/implement Methods→选择GenericServlet这个类里的init(),来重写init()方法

    然后在web.xml中配置这个Servlet的自动启动,并把load-on-start的数字设置为2,这样就符合了它们的运行顺序,依次执行

    配置好后,启动Tomcat,可以看到控制台中"正在分析结果"已经被打印出来

     这里不像以前一样给servlet绑定url.是因为这些servlet主要是做程序刚开始运行初始化的工作,不需要写service,doGet,doPost这些方法.

    也就不需要绑定url.可以将service,doGet,doPost这些方法写在其他的servlet中

    除了使用web.xml来配置 load-on-start外,还可以采用注解来配置.

    但要注意的是,使用注解的方式配置 load-on-start,需要强制在参数中加上urlPatterns这个参数,这个url地址也许在实际使用过程中不会用到,

    但是一定要设置, load-on-start才会生效.

     重新启动Tomcat,可以看到生效了

    下一篇:JSP入门   

  • 相关阅读:
    波形相加
    2003-2011电赛题目
    个人课程总结
    程序员的修炼之道:从小工到专家阅读笔记03
    程序员修炼之道:从小工到专家阅读笔记02
    计算最长英语单词链
    学习进度十五
    程序员修炼之道:从小工到专家阅读笔记01
    学习进度十四
    用户体验评价
  • 原文地址:https://www.cnblogs.com/superjishere/p/12525806.html
Copyright © 2011-2022 走看看