Servlet

C/S架构(客户端与服务器)

B/S架构(浏览器与服务器)

Servlet:Server Applet的简称,是服务器端的程序(代码,功能实现),可交互式的处理客户端发到服务器端的请求,并完成响应操作。

Url-pattern:

后缀匹配:*.xxx只要以xxx结尾就匹配

通配符匹配:/* 匹配所有请求,包含服务器所有资源

通配符匹配:/ 匹配所有请求,包含服务器所有资源,不包括.jsp

Load-on-startup:

作用:Tomact在启动时自动对Servlet实例化,在进行初始化。

值为整数,表示Servlet被加载发先后顺序,值越小,优先级越越高,就越先被加载。如果没有设置或为负数只有被请求时在加载Servlet。

@WebServlet注解:

name:Servlet名字

value:配置url路径,可以多个

urlPatterns:配置url路径

loadOnSatrtUp:配置Servlet创建的时机

Request对象:

在Servlet中用来处理客户端请求需要用到doGet或doPost方法的request对象

request方法:

1.使用HttpServletRequest接口中的public String getParameter(String name)和public String[]getParameterValues(String name)方法可以获得客户端表单提交的值。

方法public String getParameter(String name)取得单值,方法public String[]getParameterValues(String name)取得多值。

  1. setCharacterEncoding(String charset) 指定每个请求编码

respone 对象:

respone对象用于响应客户请求并向客户端输出信息。

setHeader(name,value)设置响应信息

setContentType(String) 设置响应文件类型,响应式的编码格式(服务器和客户端同时设置)

setCharacterEncoding(String)设置服务器响应内容的编码格式

getwriter()获取字符输出流

转发:

转发的作用在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求处理

request.getRequestDispatcher(“目标地址”).forward(request,respone)

使用forward跳转是在服务器内部跳转,地址栏不变,属于同一次请求

存数据:request.setAttribute(key,value);

以键值对形式存取在request作用域当中,key为String类型,value为Object类型。

取数据:request.getAttribute(key)

通过String类型的key访问Object类型的value

重定向:

重定向作用在客户端,客户端将请求发生给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送请求。

sendRedirect跳转时,地址栏改变,代表客户端重新发送请求,属于两次请求

response.sendRedirect(“目标url”);

respone没有作用域,两次请求中都数据无法共享。

传递数据通过Url拼接进行数据传递,参数值只能是字符串(/Web/B?username=Tom)

获取数据:request.getParameter(“username”);

Servlet生命周期

  1. 实例化

当用户第一次访问servlet时,由容器调用Servlet的构造器创建具体的Servlet对象。服务器启动时就自动创建Servlet对象

<load-on-startup>1</load-on-startup>

  1. 初始化

在初始化阶段,init()方法会被调用。Initial()只被执行一次

  1. 服务

当客户端有一个请求时,容器就会将请求ServletRequest与响应ServletResponse对象传给Servlet,以参数的形式传递

  1. 销毁

当Servlet容器被停止时或者重新启动时都会引起销毁Servlet对象并调用destory方法

destory方法只被执行一次

Servlet线程安全问题

将变量变为私有变量,变成各个线程绑定的私有变量

状态管理

将多次交互所涉及的数据保存下来

  1. 状态管理分类

客户端管理:将状态保存到客户端,代表技术是Cookie技术

服务端管理:将状态保存到服务端,代表技术是session(服务器传递sessionId时需要使用Cookie的方式)和application.

Cookie:

Cookie cookie=new Cookie(name,value);//服务器创建cookie对象

//设置cookie访问路径
cookie.setPath("/webProject2/get");
//设置cookie有效期,>0有效期,单位秒。<0内存储存,默认-1,=0浏览器关闭
cookie.setMaxAge(60*60);

respone.addCookie(cookie);//将cookie响应给客户端。

  1. 获取cookie值

Request.getCookie()

修改cookie

只要名字和路径一致即可

如果改变cookie的name和有效路径 会新建cookie而改变cookie值,有效期会覆盖原有的cookie

Cookie编码与解码

Cookie默认不支持中文

编码:通过java.net.URLEncoder类中的encode(String str,String encoding)方法

解码:通过java.net.URLDecoder类中的decode(String str,String encoding)方法

Session

Session:

session用于记录用户的状态。Session指的是在一段时间内,单个客户端与web服务器的一连串相关的交互过程。

在一个seesion中,客户可能会多次请求访问同一个资源,也有可能访问各种不同的服务器资源(多次请求响应)

Session原理:

服务器会为每一次会话分配一个session对象

同一个浏览器发起的多次请求同属于一次会话

首次使用session时,服务器会自动创建Session,并创建Cookie储存SessionId发送给客户端

Session是由服务器创建的

Session作用域:拥有储存数据的空间,作用范围是一次会话有效

一次会话是使用同一个浏览器发送多次请求,一旦浏览器关闭,会话结束

可以将数据传入Session中,在一次会话的任意位置进行获取

可以传递任何数据(基本数据类型,对象,集合,数组 )

Session获取

HttpSession session=request.getSession();

Session保存数据

setAttribute(“key”,value);

获取

getAttribute(“key”)

移除

RemoveAttribute(“key”);

session生命周期

开始:第一次使用到Session的请求产生,则创建Session

结束:

浏览器关闭,则失效

Session超时,则失效

session.setMaxInactiveInterval();设置session的有效时间

手工销毁,则失效

Session.invalidate();//登录退出,销毁

浏览器禁用Cookie解决方法

实现url重写

String newUrl= resp.encodeRedirectURL("/webProject2/GetSessionServlet");//要跳转的路径
resp.sendRedirect(newUrl);

ServletContext对象

概述:

全局对象,也拥有作用域,对应每一个Tomcat中的web应用

当web服务器启动时,会为每一个web应用程序创建一块共享的存储区域

SercvletContex在web服务器启动时创建,服务器关闭时销毁。

获取ServletContext对象

GenericServlet的getServletContext

ServletContext作用

获取项目的真实路径

ServletContext.getRealPath(“/”)

获取项目的上下文路径(应用程序名称)

ServletContext.getContextPath();

ServletContext可以储存数据到全局容器中

servletContext.setAttribute("name","tom");存储数据

servletContext.getAttribute("name");获取数据

servletContext.removeAttribute("name");移除数据

ServletContext特点

唯一性:一个应用对应一个ServletContext

生命周期:只要容器不关闭或者应用不卸载,ServletContext就一直存在

过滤器

过滤器是处于客户端与服务器目标资源之间的一道过滤技术
作用:

执行地位在Servlet之前,客户端发送请求,会先经过Filter,再到达目标的Servlet中,响应时,会根据执行流程在反向执行Filter

可以解决多个Servlet共性代码的冗余问题

实现过程:

编写java类实现接口

在doFilter中编写拦截逻辑

设置拦截路径

过滤器配置:

在自定义的Filter类上使用注解@WebFilter(urlPatterns = "/目标路径")

过滤器链和优先级:

客户端对服务器请求之后,服务器会调用Servlet之前会执行一组过滤器(多个过滤器),那么这组过滤器就称为一条过滤链

每个过滤器实现某个特定的功能,当第一个Filter的都doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。调用了doFilter方法,Web服务器会检查FilterFilterChain对象是否还有filter,如果有,则调用第二个filter,如果没有则调用目标资源

过滤器优先级:

如果为注解的话,是按照类全名称的字符串顺序决定作用顺序

如果Web.xml,按照filter-mapping注册顺序,从上往下

web.xml配置高于注解方式

如果注解和web.xml同时配置,会创建多个过滤器对象,造成过滤多次

过滤器的拦截路径通常有三种方式

精确拦截:/具体路径

后缀:*.jsp

通配符:/*表示拦截所有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值