day32 servlet文档格式.docx
- 文档编号:22110183
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:346.83KB
day32 servlet文档格式.docx
《day32 servlet文档格式.docx》由会员分享,可在线阅读,更多相关《day32 servlet文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求。
Servlet的作用:
接收用户的请求、处理请求、响应结果!
Serlvet它是JavaWEB三大组件之一,也是最重要,难度最大的一个!
3.Servlet入门案例
Servlet是一个规范(接口!
),意味着我们想要编写一个Servlet,那么必须实现该接口(接口中的方法!
)
操作步骤:
第一步:
编写一个类实现Servlet接口
第二步:
重写service(ServletRequestrequest,ServletResponseresponse)方法
第三步:
编写web.xml配置文件
4.Servlet入门案例执行流程
5.Servlet入门案例总结(web.xml文件的配置)
<
servlet>
<
servlet-name>
abc<
/servlet-name>
servlet-class>
com.itheima.web.servlet.HelloWorld<
/servlet-class>
/servlet>
servlet-mapping>
url-pattern>
/xxx<
/url-pattern>
/servlet-mapping>
===============================================
servlet标签:
配置Servlet处理类(servlet-class)和对应的名称(servlet-name)!
其中:
servlet-name的值是任意的!
建议写成Servlet的类名!
(符合大部分程序员的习惯!
自动生成的也是这么回事!
servlet-class的值是Servlet处理类的全限定类名(包含包结构的类全名)
【检验:
按下ctrl,鼠标移上去出现一个小手!
】
servlet-mapping标签:
配置当前编写的servlet处理类对应的路径(url-pattern)
使用servlet-name的配置与servlet配置项产生关联!
(此处的servlet-name配置项的值必须与servlet配置项的servlet-name的值一致!
在url-pattern的位置编写一个访问的入口地址!
(这个稍后详细介绍!
6.Servlet获取请求参数(http:
//localhost:
8080/day32_Servlet_306/xxxx?
username=jack&
password=123)
Servlet获得请求参数必须借助一个对象!
ServletRequest!
Stringparameter=request.getParameter(Stringname);
//以String形式返回请求参数的值,如果该参数不存在,则返回null。
7.用户登录案例:
(要求:
今天下去之后每人写三次!
用户登录案例的执行流程!
代码实现!
8.用户登录案例总结(WEB阶段通用开发流程:
必须背下来!
见图解!
9.关于实现Servlet的三种方式
第一种方式:
编写一个类去实现Servlet接口(必须实现该接口里面的方法!
voiddestroy()
ServletConfiggetServletConfig()
StringgetServletInfo()
voidinit(ServletConfigconfig)
voidservice(ServletRequestreq,ServletResponseres)
第二种方式:
编写一个类去继承GenericServlet抽象类(必须实现抽象方法service(ServletRequestrequest,ServletResponseresponse))
abstractvoidservice(ServletRequestreq,ServletResponseres)
第三种方式:
编写一个类去继承HttpServlet抽象类(它没有抽象方法!
【这个是以后开发常用的!
重写doGet(HttpServletRequestrequest,HttpServletResponseresponse)或者doPost(HttpServletRequestrequest,HttpServletResponseresponse)方法即可
三者的关系:
抽象类HttpServlet继承了抽象类GenericServlet
抽象类GenericServlet实现了Servlet接口
补充:
Servlet实例对象都是Tomcat负责创建!
10.Servlet的生命周期
默认情况,当用户第一次发送请求,由服务器容器Tomcat来负责创建Servlet实例对象!
并调用init(ServletConfigconfig)来完成初始化操作!
该方法在整个Servlet生命周期中只会执行一次!
然后紧接着会调用service(ServletRequestreq,ServletResponseresp)来处理用户的请求
该方法在整个Servlet生命周期中会被执行N次!
让服务器正常关闭或者项目移除,会执行销毁方法destroy()方法,该方法只会执行一次!
1.时序图描述servlet执行过程
2.
补充:
利用反射来演示服务器底层是怎么工作的(了解)
利用反射调用Servlet的方法
//第一步:
创建CServlet的对象
Classclazz=Class.forName("
com.itheima.web.servlet.CServlet"
//利用空参构造创建实例化对象
Objectobj=clazz.newInstance();
//第二步:
通过反射调用init方法
//1.得到init方法对象
Methodm=clazz.getDeclaraeMethod("
init"
ServletConfig.class);
//2.调用方法
m.invoke(obj,config);
//第三步:
通过反射调用service方法
//1.现获取service方法对象
Methodm2=clazz.getDeclaraeMethod("
service"
HttpServletRequest.class,HttpServletResponse.class)
//调用方法
m2.invoke(obj,req,resp)
//第四步:
通过反射调用destroy方法
//1.得到destroy方法对象
destroy"
null);
m.invoke(obj,null);
5Servlet线程安全问题
servlet对象特点:
在tomcat服务器中是单实例多线程的!
(利用反射来来调用的方法)
举例:
intcount=1;
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
resp.setContentType("
text/html;
charset=utf-8"
);
resp.getWriter().write("
您是第"
+count+"
个访问的用户"
//注意write的大小写
//System.out.println("
try{
Thread.sleep(5000);
//线程休眠
}catch(InterruptedExceptione){
e.printStackTrace();
}
count++;
/*运行结果:
您是第1个访问的用户
您是第2个访问的用户
您是第3个访问的用户
您是第4个访问的用户
您是第5个访问的用户
您是第6个访问的用户
您是第7个访问的用户
您是第9个访问的用户
您是第11个访问的用户
您是第12个访问的用户
您是第13个访问的用户
您是第13个访问的用户*/
}
6Servlet自动加载
默认情况下,第一次访问servlet时创建servlet对象。
创建对象的过程中会调用构造方法和inti方法。
如果init方法的业务逻辑需要消耗比较长的时间,用户的第一次访问servlet时需要等待较长的时间。
改变servlet对象创建的时机:
tomcat服务器启动的时候创建servlet对象。
<
LoadDemo2<
gz.itcast.e_load.LoadDemo2<
!
--正整数:
数值越大,创建对象的优先级越低-->
load-on-startup>
1<
/load-on-startup>
7Init方法问题
在GenericServlet中,有两个init方法。
有参数的init方法:
该方法是servlet的四个生命周期方法中的一个。
由tomcat服务器默认调用的初始化方法。
在GenericServet的实现中,该方法会调用无参数的init方法。
无参数的init方法:
该方法的是Sun公司设计出来用于给开发者去覆盖,用于实现初始化逻辑的方法。
结论:
如果要编写servlet的初始化逻辑,只需要覆盖无参数的init方法即可!
Servlet中重要对象:
1)HttpServletRequest对象:
封装请求信息
2)HttpServletResponse对象:
封装响应信息
3)ServletConfig对象:
封装一个servlet配置参数信息
4)ServletContext对象:
封装web应用环境信息
11.ServletConfig对象
servlet容器使用的servlet配置对象,该对象在初始化期间将信息传递给servlet!
用于获取当前Servlet初始化的信息!
StringgetInitParameter(Stringname)//根据参数名称获得初始化的值(在web.xml文件中进行配置)
EnumerationgetInitParameterNames()//获得所有初始化参数的名称(在web.xml文件中进行配置)
ServletContextgetServletContext()//获得ServletContext对象!
(明天讲!
)【重点!
StringgetServletName()//获得当前Servlet的名称
/**
*ServletConfig对象
*servlet容器使用的servlet配置对象,该对象在初始化期间将信息传递给servlet!
*@authorNeverSayNever
*@date2017年12月26日
*@versionV1.0
*/
publicclassDServletimplementsServlet{
publicvoidinit(ServletConfigconfig)throwsServletException{
//获得初始化参数age
intage=Integer.parseInt(config.getInitParameter("
age"
));
System.out.println(age);
//获得所有初始化参数的名称
Enumeration<
String>
initParameterNames=config.getInitParameterNames();
while(initParameterNames.hasMoreElements()){
System.out.println(initParameterNames.nextElement());
//获得当前Servlet的名称
System.out.println(config.getServletName());
//获得ServletContext对象!
【重点掌握!
ServletContextservletContext=config.getServletContext();
//获得项目的路径
System.out.println(servletContext.getContextPath());
12.load-on-startup配置项
配置这个配置项,能够让Servlet在服务器启动的时候就被创建!
(值为一个非负整数即可,值越小优先级越高!
演示请看DServlet的配置
13.web.xml文件中的url-pattern的配置
可以为一个Servlet配置多个url-pattern
/xxx:
完全匹配!
【一般使用这种方式】
/*:
通配符匹配(匹配所有)
/abc/*:
目录匹配
*.xxx:
扩展名匹配
注意*不能放中间!
Sevlet缺省路径
description>
/description>
display-name>
CServlet<
/display-name>
com.itheima.web.servlet.CServlet<
/<
/:
表示servlet的缺省路径。
在tomcat服务器中配置了一个DefaultServlet,叫默认Servlet,该默认Servlet的url-pattern就是/。
默认Servlet的作用,用于解析web应用下的静态资源。
问题:
浏览器输入一个资源名称时,查找资源的顺序是如何?
1)首先,在当前web应用下的web.xml文件中查找是否有匹配的url-pattern
2)如果匹配到,执行对应的servlet(动态资源)
3)如果没有匹配到,就交给tomcat服务器的默认Servlet去处理
4)默认Servlet会到当前web应用下读取对应名称的静态资源文件。
5)如果读到对应的静态资源文件,那么就把内容返回给浏览器
6)如果读不到对应的静态资源文件,那么就返回404的错误页面。
先找动态资源,再找静态资源!
14.WEB阶段路径问题!
路径分为客户端路径和服务器端路径
客户端路径:
超链接、重定向、表单、location.href
绝对路径:
带有盘符!
http:
8080/day32_Servlet_306/URLServlet
相对路径:
不带/的:
相对的是当前文件(url.html页面)【注意,分析它们之间的相对关系!
访问url.html路径:
http:
8080/day32_Servlet_306/url.html
访问Servlet路径:
发现,它们在同一级,所以直接写Servlet的访问路径url-pattern的内容
带/的:
相对的是当前的服务器(将/理解为webapps目录)【开发常用!
服务器端路径:
【今天不讲,request那天讲!
举例
form表单:
body>
//第一种相对路径
formaction="
demo01ParamServlet"
method="
post"
>
//第二种绝对路径
8080/exercise_01/demo01ParamServlet"
用户名:
inputtype="
text"
name="
username"
value="
jack"
/>
br/>
密码:
password"
1234"
爱好:
checkbox"
hobby"
抽烟"
checked="
checked"
/>
抽烟
<
喝酒"
喝酒
烫头"
烫头<
submit"
post提交"
/form>
/body>
对应的web.xml配置文件:
Demo01ParamServlet<
exercise_01.Demo01ParamServlet<
/demo01ParamServlet<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day32 servlet