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入门   

posted @ 2020-03-20 16:52  阿江是个程序猿  阅读(840)  评论(0编辑  收藏  举报