------- Android培训、java培训 期待与您交流! ----------
网络结构,
1,C/S client/server
特点:
该结构的软件,客户端和服务端都需要编写。
可发成本较高,维护较为麻烦。
好处:
客户端在本地可以分担一部分运算。
2,B/S browser/server
特点:
该结构的软件,只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。
开发成本相对低,维护更为简单。
缺点:所有运算都要在服务端完成。
JAVA WEB三大组件:Servlet、Filter、Listener
Servlet
1.作用:处理请求
2.做的事情:接受请求数据,处理请求,完成响应
3.方法:
a) 生命周期方法:
1.init();servlet对象创建之后立即执行,并只执行一次
2.service();会被调用多次,每次处理请求都调用这个方法
3.destroy();servlet对象被销毁之前调用,并只调用一次
b) getServletInfo();获取Servlet的信息
c) getServletConfig();获取Servlet的配置信息
4. Servlet是单例的,线程不安全的,其对象由服务器创建,由服务器调用相应方法
5. 在web.xml中配置Servlet:
web.xml
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>cn.itcast.web.servlet.AServlet</servlet-class>
<!-- 服务器启动时创建该Servlet对象,值越小越先创建 -->
<load-on-startup>0</load-on-startup>
<servlet-mapping>
<!-- 具体要访问的Servlet,必须与Servlet配置名称相同 -->
<servlet-name>xxx<servlet-name>
<!-- 地址栏访问的Servlet地址,必须以/开头,名称随便 -->
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
<!-- 可以有多个初始化参数 -->
<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
<init-param>
<param-name>p2</param-name>
<param-value>v2</param-value>
</init-param>
</servlet>
6. ServletConfig类:
一个ServletConfig对象对应一段web.xml中Servlet的配置信息
7. ServletContext类:
一个项目只有一个ServletContext对象,可以在多个Servlet中获取这个唯一的对象,使用它可以给多个Servlet传递数据,这个对象在Tomcat启动时创建,在Tomcat关闭时销毁
域对象:
ServletContext是JavaWeb四大域对象之一:
PageContext;
ServletRequest;
HttpSession;
ServletContext;
所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据。
Servlet也可以获取初始化参数,但它是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!
可以配置公共的初始化参数,为所有Servlet而用!这需要使用ServletContext才能使用!
例如:该配置信息独立于<servlet>标签之外
<context-param>
<param-name>paramName1</param-name>
<param-value>paramValue1</param-value>
</context-param>
8. Response的两个流ServletOutputStream和PrintWriter不能共存,会有状态异常
服务器处理请求的流程:
服务器每次收到请求时,都会为这个请求开辟一个新的线程。
服务器会把客户端的请求数据封装到request对象中,request就是请求数据的载体!
服务器还会创建response对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应。
response:其类型为HttpServletResponse
ServletResponse-->与协议无关的类型
HttpServletResponse-->与http协议相关的类型
> 重定向是客户端信息必须带项目名
> 转发是服务端信息,不用带项目名
AServlet重定向到BServlet时,BServlet不能获取保存在AServlet中的数据,因为重定向使用了一个新的request对象
* 请求转发和重定向的区别
> 请求转发是一个请求一次响应,而重定向是两次请求两次响应
> 请求转发地址栏不变化,而重定向会显示后一个请求的地址
> 请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目
> 请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名!
> 请求转发和重定向效率是转发高!因为是一个请求!
* 需要地址栏发生变化,那么必须使用重定向!
*需要在下一个Servlet中获取request域中的数据,必须要使用转发!