Servlet
基本概念:
1. 什么是Web?Web有什么用?
2. 什么是Web服务器?Web Server?
3. Web Server的作用?
4. 发展历史?
5. 什么是CGI?
6. Servlet的出现
7. Servlet的作用?
8. Web Server和Servlet的交互
9. Servlet API
什么是Web?Web有什么用?:
Web就是网络,一个大的网络,是由n个服务器和客户端组成的的计算机网络,有了这个网络,就可以实现各个计算机之间的通信
什么是Web服务器?Web Server?
在web这个网络中,有一些计算机承担主管的作用,很多的信息都放到一个或者多个电脑中,其他计算机如果想要这些信息,那么需要到主管这里请示,然后主管回复他们,这个主管就是web服务器,也就是Web Server,它一般是只两个意思,一个是硬件是服务器,另一个是软件是服务器,比如在硬件服务器上装上服务器端的软件,Tomcat等,它的好处就在于通用
Web Server的作用?
1. 负责各个计算机的通信 Socket
2. 线程,处理并发,多个计算机(多用户)与服务器通信的能力 Socket
3. 特定的协议
发现问题:如果自己架设个Web Server是不容易实现,需要做大量的工作,设计制作Web Server是由系统程序员使用c/c++开发的
发展历史?
专用服务器: 例如:QQ,MSN,需要在客户端装软件,程序员需要开发客户端程序
Web时代:互联网上用户需要客户端,程序员只需要在通用服务器上进行二次开发,例如:开发个网站等等,用户在客户端上只装个通用的客户端就行(BrowBer浏览器),这样就可以用很多的基于Web Server平台开发的程序,非常的方便
Web Server:1.使用80端口 2.业务层协议:http
BrowBer:浏览器,如IE
什么是CGI?
如果我们需要做个通用的软件,那么在Web Server平台上进行二次开发,这个工作是由应用程序员来做,我们使用的是JAVA
如果在Web Server平台上进行二次开发,需要使用一些技术,如:CGI,Servlet等
什么是CGI?
公共网关接口,工作方式:请求-响应特点:1.无连接,请求-响应-断开连接 2.http协议
为什么要使用http协议呢?如果是有限连接,由于大量的客户端要进行访问,所以资源不够,所以使用http协议无连接的方式,解决了大量客户端访问服务器的问题
CGI就是Web Server上的Web组件,它不能离开Web Server这个平台
Web Server相当于一个容器,运行环境,Web组件在这个平台上工作
CGI的作用:1.采取了一个工作方式:请求-响应(无连接)实现通信功能 2.完成业务计算
Servlet的出现:
CGI的问题:CGI是一个独立的进程,进行工作的,进程和进程间的通信不大容易实现,比较复杂
客户端—请求(request)—web server—交给CGI(独立进程)做业务计算—返回给web server—响应(reponse)—客户端
web server通过ipc为CGI提交服务,这样是比较困难的
JAVAEE规范:Servlet替代CGI
两者的区别:1.Servlet用java写的,CGI用c/c++写的 2.Servlet是多线程的,CGI是多进程的,多线程比多进程好实现 3.Servlet是常驻内存的,效率高
Servlet的作用?
工作在web server之上,完成业务计算,以请求响应的方式完成特定的工作
Web Server和Servlet的交互:
Web Server的容器提供一些公共的对象,给Servlet来使用
Servlet组件API,容器回调这些API
Servlet API:
容器回掉的API:
init():给Servlet做初始化的
Service(request):将请求的信息作为参数传递给Servlet
Destroy():卸载方法
从容器中读取Servlet信息的API:
GetServletconfig():得到Servlet的配置信息
GetServletinfc():得到Servlet的配置信息
使用Servlet子类创建Servlet类
1.Http和HttpServlet类
2.使用HttpServlet类的Servlet类
3.带包名的类的部署方法
4.Servlet处理表单
1。什么是http?有什么用?
基于请求/响应的协议,web server和浏览器通过http在internet上发送和接收消息
2.http请求
由三个部分组成:请求的方法uri协议和版本,请求头,请求正文(包含查询字符串)
3.http响应
由三个部分组成:协议状态代码描述,响应头,响应正文(html页面)
4.HttpServlet的作用?
负责根据用户发送的请求来响应并返回结果给容器,servlet容器读取Http请求,然后将这些内容打包到HttpRequest对象中,这样减轻了HttpServlet的工作量,现在只要调用HttpServletRequest的一些方法就能处理请求信息了,所以,httpServlet的作用就是得到http请求并作出响应并返回结果给容器的
5.HttpServletRequest的常用方法
getCookies():得到http请求中的Cookies
getHeader(String name):得到参数指定的http请求中的Header数据
getRequestURI():得到http请求中的URI
getQueryString():得到http请求中的查询字符串
getMethod():得到http请求中所使用的方法
6.HttpServletResponse的常用方法
addCookie(Cookie cookie):向http响应里加入Cookie
setHeader(String name,String value):设置http响应的Header
addHeader(String name,String value):向http响应加入Header
使用HttpServlet类的Servlet类
使用httpServlet类的好处在于,它是个抽象类,可以只写必要的方法
要么重写service方法,要么写dopost()和doget()方法,因为,dopost和doget这两个方法会从父类中了解到用户使用的请求方法,根据用户的请求方法调用对应的dopost或者doget,所以,如果不但写了这两个方法还重写了service方法,重写的service方法就失去了判断用户请求方法的功能
Servlet处理表单:
知识点:
1.在一个web应用中使用多个servlet类
2.在一个web应用中使用多个html页面
3.当htm文件的名字为index的时候,成为该web应用的主页
4.自动识别get和post方法
5.get结果在url中有参数,查询字符串 post结果在url中没有参数
get请求既能使用url也可以使用表单 post请求只能在表单中使用
总结HttpServlet的步骤:
1.继承HttpServlet
2.覆盖部分方法(最好不要将service,请求方法(doGet,doPost)同时覆盖)
3.读取请求信息,查询字符串,表单等,并响应一个html数据
getParameterNames():从请求中得到所有的参数名字
getParameterValues():从请求中得到所有的参数值
getParameter(String name):从请求中得到指定参数名所对应的值
4.得到输出流,并将结果发送给servlet容器
response.getWriter() print println PrintWriter
Servlet生命周期:
1.初始化阶段
2.响应客户请求阶段
3.终止阶段
初始化阶段:
用户-〉请求-〉到servlet容器-〉容器创建一些对象-〉servlet调用init()方法,只被调用一次
init()
init(ServletConfig config):如果覆盖这个方法,一定要调用一下父类的这个方法,让他做一些工作,然后使用Servlet.getServletConfig()得到config,这样才能拿过来接着用
filter:过滤器
1.servlet链的原理和产生的问题?
用户请求(url)-->servlet1(解密)-->servlet2(打包)-->servlet3(响应数据)
好处:简化,专用,复用,但是也有问题,耦合问题,每个servlet依赖于上一个servlet
filter可以解决这个问题,因为下一个filter不需要上一个filter传递url,他们依赖容器
2.什么是filter?有什么用?
用户请求(url)-->filter(n)-->servlet(n)
filter是在servlet,jsp,html请求之前和响应之后作一些处理的
作用:过滤,在执行servlet,jsp,html之前和之后执行这个过滤器,可以跟踪用户状态,身份验证,字符转换等
3.常用方法?如何使用filter?
必须实现filter接口
init():容器创建filter对象后,调用这个初始化方法,在这个方法里可以取初始化参数
doFilter():过滤方法,过滤指定的url,FilterChain参数可以调用下一个filter
destroy():容器在销毁filter对象前调用这个方法,用来释放资源的