Java Servlet组件
Java Servlet组件的原理及编程
Java Servlet 的配置和生命周期
Servlet的生命周期:
1,创建servlet对象时,会调用init方法进行初始化
2,任何来自客户端的请求,都会调用service方法服务
3,当servlet销毁之前,会调用destory方法进行销毁
Servlet原理
Servlet: Server服务器 let小型程序
运行在服务器端的小型程序。
请求是以线程的方式访问目标Servlet!
Servlet运行原理:
1,用户通过HTTP协议发送get请求,访问web容器
2,web容器将http请求封装成Request对象,并创建了response对象
3,判断servlet是否被创建,如果没有,初始化目标Servlet
4,调用servlet的service方法,并将request和response当成参数传进去
5,service会根据http请求的类型,自动调用doget/dopost方法
6,销毁request和response对象,并将数据通过http返回给用户
request常用的方法:
request.getMethod();获取请求类型
request.getRemoteAddr();获取客户端IP
request.getRequestURL();获取请求的url
request.getRequestURI();获取请求的资源
response常用的方法:
response.setCharactorEncoding("utf-8");设置编码
response.getWrite();获取字符输出流
Servlet简介
Servlet 是在服务器上运行的小程序。这个词是在 Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。 最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 开始支持标准的 Servlet API。
Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
1) 客户端发送请求至服务器端;
2) 服务器将请求信息发送至 Servlet;
3) Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
4) 服务器将响应返回给客户端。
Servlet流程处理
1、客户端发送请求到服务器
2、服务器获取URL中的URI(/ContextPath/ServletPath)
3、根据URI中的应用名获取ServletContext对象
4、通过ServletContext对象来匹配ServletPath和url-pattern
5、根据匹配的结果获取相应的 类全名
6、一次性加载类封装成ServletConfig对象
7、对象根据多态调用Service()方法
8、将返回结果给用户
Servlet生命周期
服务器只创建每个Servlet的单一实例,每个用户请求都会引发新的线程。 创建Servlet实例时,会调用init()方法,针对每个用户请求都会创建一个线程,该线程调用前面创建实例的service()方法,由service()方法依据接收到的HTTP请求的类型,调用相应的doXxx方法,比如doGet(),最后调用destroy()方法销毁。
doGet 和 doPost 方法的参数都是 HttpServletRequest 和 HttpServletResponse 对象。其中HttpServletRequest 对象代表了客户端的请求,servlet 通过这个对象获得客户 端 的 请 求 数 据; HttpServletResponse对象代表了servlet对客户端请求的响应,sevlet用这个对象向客户端返回数据。
Servlet优点
高效 传统的CGI程序以进程方式运行,而Servlet以线程方式运行。
方便 Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表 单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
功能强大 可以完成很多传统的CGI程序很难做到的事情。
可移植性好 Servlet API具有完善的标准。
Servlet交互
浏览器与Web服务器的动态交互
Method属性指定了数据传送方式,可以是GET或POST
各种输入控件,接受用户输入。
提交按钮,点此Button将把FORM内的数据传送到服务器
GET方式将数据接在URL后面传送给服务器端程序, 如:http://url?name1=abc&name2=def
POST方式将数据放在HTTP请求的请求头后面发送。
Servlet 接口
javax.servlet 包的接口为:
ServletConfig
用来封装web.xml中对当前Servlet的配置信息
getInitParameter()---可以获取初始化参数
web.xml
<init-param>
<param-name/>
<param-value/>
</init-param>
ServletContext
代表当前Servlet运行的上下文环境,
Web容器会为每一个Web工程创建一个对应ServletContext对象
setAttribute()
getAttribute()
removeAttribute()
ServletRequest
为Servlet所发送的请求,用ServletRequest封装
setAttribute()
getAttribute()
removeAttribute()
getParameter()
常用子接口HttpServletRequest
ServletResponse
Servlet对客户端所做的响应,用ServletResponse描述
getWriter():获取PrintWriter输出流给客户发送的响应内容
setContentType:设置响应内容的响应类型和字符集信息
sendRedirect:设置重新请求路径
子接口HttpServletResponse
Servlet结构
Servlet的创建:
1,写一个类,继承HttpServlet,覆写 service/doget/dopost方法
2,直接创建Servlet
Servlet部署
1,在web.xml中进行配置
<servlet>
<servlet-name>名字</servlet-name>
<servlet-class>包名+类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>名字</servlet-name>
<url-pattern>虚拟URL:/根目录</url-pattern>
</servlet-mapping>
2,使用注解的方式进行配置
@WebServlet(name="",urlPatterns={"url","url"})
@WebServlet("url")
Servlet会话技术
掌握Servlet跳转方式
forward跳转:用户发送请求后,服务器获取请求并处理,在服务器内部跳转到指定请求路径上,并响应到浏览器的一个过程。
redirect跳转(重定向):用户发送请求后,服务器获取请求并处理,将结果响应给客户端浏览器,浏览器检测到响应的请求中有一个特殊的头信息location,并指向一个地址,浏览器会自动发送第二次请求到服务器,并响应到客户端。
cookie的创建获取
session的创建过程
Session的创建过程: session的创建采用赖汉式,当用户获取session的时候,服务器会首先到客户端获取cookie name值为jsessionid的cookie, 如果找到,获取对应的value并在服务器端返回对应的session,如果当前session是有效的,则返回给用户。反之当服务器在浏览器中未找到name=jsessionid的cookie,服务器会调用 getSession创建session,并将session的id写入到浏览器cookie中
Servlet作用域
作用域就是能够保存命名属性的内存空间 主要包括 生命周期 和 共享范围
Servlet下载文件思路:
* 1,获取文件在服务器端的路径和文件的名称
* 2,需要告诉浏览器,以下载文件的方式运行
* 3,创建输入流和输出流、缓冲区
* 4,输入流读取文件、输出流响应文件