JavaWeb-Servelet

Web服务器是通过HTTP协议处理请求的计算机系统,擅长提供静态的Web页面,而不做动态内容和不在服务器上保持数据,因此如果我们需要一个动态页面就需要一些辅助程序来完成。

动态计数:CGI((Common Gateway Interface),PHP((HyperText Preprocessor),ASP((Active Server Page) ),JSP((Java Server Pages)。

Servlet是Java Servlet的简称,称为服务连接器,用Java编写的服务器端程序。

Servlet与CGI对比:

Java Servlet有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省资源。

传统的CGI,每个请求都要求启动一个新的进程,开销大,效率低,性能损耗比较大。

如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;

而对 于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的 选择。

Servlet的任务:

读取浏览器发送的显示数据。

读取浏览器发送的隐式的HTTP请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式 等等。 

处理数据并产生结果,这个过程可能需要访问数据库;执行业务层逻辑;调用 Web 服务,或者直接计算得出 对应的响应。 

发送显示数据到客户端

发送隐式的HTTP响应到客户端。。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。 

servlet是没有main()方法的,它受控于另外一个Java应用,这个Java应用成为容器。

利用容器提供的方法,能够轻松让Servlet与Web服务器对话,无需自己建立ServerSocket,监听端口,创建流等操作。容器知道自己与Web服务器之间的协议,所以Servlet不必担心Web服务器以自己之间的API

容器控制着Servlet的生与死。

容器会自动地为它接受的每个Servlet请求创建一个新的线程。针对客户端请求,如果Servlet已经运行完相应的HTTP服务方法,该线程就会结束。

容器可以将JSP代码翻译成Java代码。

servlet程序的结构

servlet的依赖

创建Servlet三种方式:

1.实现Servlet接口;

2.继承GenericServlet类

3.继承HttpServlet方法。

Servlet生命周期可被定义为从创建直到毁灭的整个过程。

init():它在第一次创建Servlet时被调用,在后续每次用户请求时不在调用。

service():只要执行实际任务的主要方法。容器调用该方法来处理浏览器的请求,并把格式化的响应写给客户端。每次服务器收到一个Servlet请求时,服务器会产生一个新线程并调用服务。

destroy():可以让servlet关闭数据库连接、停止后台线程、把cookie列表写入到磁盘,并执行其它类似的清理活动。

注意:在web.xml中metadata-complete=“true”的时候表示忽略所有的注解标识。如果想用注解配置servlet的时候,就需要将其变成true.

一个Web应用程序总是包含一个或多个表单,供用户输入值。

当用户提交表单时,在表单中输入的值就会被当作请求参数发送到服务器。

从req中获取URL中的参数,在通过Post方法进行展示。

还有一个读取所有表单参数的方法getParameterNames(),返回枚举,包含未指定顺序的参数名。

得到枚举之后,可使用hasMoreElements()方法来确定循环的终止,用nextElement()方法来获取每个参数的名称。

Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

过滤器通过 Web 部署描述符(web.xml)中的 XML 标签来声明,然后映射到您的应用程序的部署描述符中的 Servlet 名称或 URL 模式。

当 Web 容器启动 Web 应用程序时,它会为您在部署描述符中声明的每一个过滤器创建一个实例。

过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。

web.xml 中的 filter-mapping 元素的顺序决定了 Web 容器应用过滤器到 Servlet 的顺序。若要反转过滤器的顺序,您只需要在 web.xml 文件中反转 filter-mapping 元素即可。

Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。

向servlet中添加cookie

读取Cookie,需要通过调用HttpServletRequest的getCookies()方法创建一个Cookie对象的数组。然后循环遍历数组,并用getName()和getValue()方法来访问cookie和关联的值。

删除Cookie只需要将setMaxAge()中的参数设置为0就可以了。

HTTP是一种无状态协议,默认情况一下,一个 WEB服务器是无法区分一个HTTP请求是否为第一次访问。

因此出现了会话跟踪技术:

1.URL重写:可以在URL末尾追加一些额外数据来标识session会话,服务器会把该session会话标识符与已存储的有关session会话数据相关联。但是URL有长度限制,它还会动态生成每个URL为页面分配一个session。

2.隐藏的表单字段:一个Web服务器可以发送一个隐藏的HTML表单字段。将标识为一个session放入隐藏域来进行追踪。但是隐藏域技术仅当网页有表单时有效。

3.Cookie:一个Web服务器可以分配一个唯一的session会话ID作为每个Web客户端的cookie,对于客户端的后续请求可以使用接收到的cookie来识别。但是,cookie有很多浏览器不支持。

4.HttpSession:HttpSession对象是在用户第一次访问网站的时候自动创建的。不同于URL重新、 隐藏域或cookie, 放入到HttpSession 的值, 是存储在内存中的, 因此,不要 往 HttpSession放入太多对象或大对象。 尽管现代的 Servlet容器在内存不够用的时候会将保存在 HttpSessions 的对象转储到二级存储上, 但这样有性能问题, 因此小心存储。 放到HttpSession的值不限于String类型。所有保存在HttpSession的数据不会被发送到客户端,不同于其它会话管理技术, Servlet容器为每个 HttpSession 生成唯一的标识, 并将该标识发送给浏览器, 或创建一个名为JSESSIONID的cookie, 或者在 URL后附加一个名 为jsessionid 的参数。 在后续的请求中,浏览器会将标识提交给服务端,这样服务器就可以识别该请求是由哪个用 户发起的。 Servlet容器会自动选择一种方式传递会话标识,无须开发人员介入 。

监听器Listeners:

ServletContextListener能对ServletContext的创建和销毁做出响应。

ServletContextAttributeListener能对ServletContext范围的属性被添加,删除,替换做出响应。

HttpSessionListener:主要监听HttpSession的创建和销毁.

HttpSessionAttributeListener:它会响应HttpSession范围的属性的添加,删除,替换。

ServletRequestListener:会对ServletRequest的创建和销毁时间进行响应。

当一个ServletRequest范围的属性被添加,删除,或者替换时,ServletRequestAttributeListener接口会被调用。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值