JAVA学习总结二十六
2016-07-17 22:12
288 查看
web服务器、web容器和web应用服务器的区别
web服务器主要作用于开启服务器,监听端口,接收请求、产生响应,只是只能产生静态html响应信息,极大影响响应信息灵活性。web容器时辅助应用的一种解决方案。允许将请求信息处理完成后,动态产生响应信息。
web服务器+web容器,合称web应用服务器。
servlet的API结构
ServletConfig:配置接口Servlet:业务接口
GenericServlet:适配器类,实现了ServletConfig和Servlet两个接口汇总大部分方法,但没有实现service方法,该方法由GenericServlet的子类根据自身协议特点实现
HttpServlet:专门针对http协议书写的子类,HttpServlet重写了service(),根据请求方式的不同,分别调用doXX();
servlet请求路径的问题:
在form的action属性中,直接写Servlet的url路径。默认是在当前目录下查找。一旦网页在子目录中,那么会在提交路径汇总加上子目录的名称。可以通过。。/回到上一级目录。如果目录比较深,频繁用。。/很繁琐,而且移植性不好。可以在url路径汇总,以/开始,表示回到webapps根目录,在加上部署名,再书写Servlet请求路径
<form action="/webTest/tt">(此处tt为XML中的<url-pattern>/tt</url-pattern>)
servlet的URL路径书写的方式:
精确映射:例如/abc,表示只能以/abc路径查找servlet扩展映射:例如*.action,表示凡是以.action结尾的请求,都能访问Servlet
路径映射:例如/abc/*,表示凡是在/abc/路径下的请求,都能访问Servlet
Servlet生命周期
启动tomcat,读取conf/server.xml文件,以确定启动端口和web应用程序的部署目录。读取部署目录中所有的web应用程序中的web.xml。以确定注册的web组件并解析。所以,一旦有一个web应用程序中的web.xml书写错误,那么解析失败,从而抛出解析异常。正确解析web.xml,可以确定部署的web组件信息。
加载并实例化Servlet。加上标签后规则如下:
在xml中中间书写1中间为1或0时,为WEB容器启动就实例化;1中间为负数或不写,为第一次访问时实例化
调用init()方法完成初始化。
当请求到达后,调用servlet()完成任务。
销毁阶段,调用destory()完成清理工作。
在整个生命周期汇总,1、2、3、4、6都只执行一次。只有5才是每次请求都会执行。而且servlet对象只有一个,是单实例多线程的类。
在注册Servlet时,可以加入
<init-param> <param-name>aaa</param-name> <param-value>111</param-value> </init-param>
进行servlet初始化信息的描述。可以通过ServletConfig配置对象中的getInitParameter()根据参数名称,得到参数值。但该初始化参数只能在当前Servlet中使用,不能再别的Servlet使用。
设置响应状态行
状态行分为:HTTP协议
状态码
状态描述
HTTP状态码
100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。200-299:表示客户请求成功。
300-399:表示用于已经移走的资源文件,指示新的地址。
400-499:表示由客户端引发的错误。
500-599:表示由服务器端引发的错误。
设置状态码
在使用PrintWriter向客户端输出信息之前,设置状态码通过响应对象HttpServletResponse的setHeader()可以设置响应头,但是响应头必须要被浏览器识别才有意义。所以通常会把响应头的设置封装成响应对象的方法,比如:setContentType(),addCookie()等。
由于只有Http协议才会有响应头,所以setHeader()只存在于HttpServletResponse中。
HttpServletResponse响应对象有两个方法可以向客户端输出数据。
getWriter(),得到打印字符流,可以向客户端输出文本数据
getOutputStream(),得到输出字节流,可以向客户端输出二进制数据。
重定向工作流程:
客户端访问服务器,服务器调用response.sendRedirect(/mytest/add),产生响应时,会产生302状态码,同时产生location响应头。客户端浏览器在接收到相应信息之后。发现是302状态码,那么就会读取location响应头的内容。然后将该内容更新浏览器地址栏,再向服务器发出第二次请求。
错误:java.lang.illegalStateException:Cannot call sendRedirect() after the response has been 不能重复请求
相关文章推荐
- java-WEB中的监听器Lisener
- Android Manifest 用法
- GUI - Web前端开发框架
- 什么是 GraphQL?
- Extjs4.0 最新最全视频教程
- Spark RDD API详解(一) Map和Reduce
- Spring Boot 开发微服务
- MyEclipse Web Project转Eclipse Dynamic Web Project
- axis备忘
- lwn拾遗:[sn3218 led drivers]-api解释-1
- 页面元素查找之Selectors API
- 创业如何选择WEB开发语言
- 一个小型js框架myJSFrame附API使用帮助
- Erlang实现的一个Web服务器代码实例
- 防止网页脚本病毒执行的方法-from web
- 自学成才的秘密:115个 web Develop 资源
- 详细分析交换机、路由器、集线器的区别和联系
- PowerShell打开或关闭光驱
- 使用批处理修改web打印设置笔记 适用于IE