Servlet总结

回顾内容:
Servlet 的应用:
一个标准Servlet程序的执行过程
Servlet他是一个普通java类,并且是一个实现了一个Servlet接口的Servlet类!
1)地址栏输入URLhttp://localhost:8080/web名称/xxxServlet
2)首先在web.xml中找是否有url-pattern和当前映射一致,
3)如果一致,那么就执行当前url-pattern-Servlet类
4)执行Servlet的配置信息里面的Servlet-class,通过反射获取当前这个类的对象,获取当前类中的成员方法(doGet()..)—tomcat运行的
5)如果在web.xml中找不到对应的url-pattern,返回给404状态码+404错误页面

Servlet的映射路径:

xxxServlet
/XXXServlet

映射路径分为两种:
1)精确匹配:以斜杠开头 /hello /hello/westos..
优先级要高于模糊匹配.
2)模糊匹配:
具体分为两种:
a:/* /任意路径
b:.(action .do .html) :以号开头 ,任意路径后面必须有指定的后缀结尾

/* 它的优先级要高于带指定的后缀的优先级

缺省路径:
在tomcat server.xml文件中有一个DefaultServlet这个名词它对应的url-pattern :/

    http://localhost:8080/web项目/hello.html

    首先,在web.xml找是否有对应的映射路径是hello.html
    有,就直接执行对应servlet程序
    如果没有,就在servetl.xml找到对应的DefaultServlet,通过这个Servlet的url-pattern :/在当前web项目的根目录中有没有一个静态资源文件是hello.html,有就直接执行静态文件,如果在当前根目录中也没有找到对应的静态资源文件,那么404错误页面

    结论:先找动态页面,然后静态页面

Servlet它是一个单例的,创建对象以及初始化的过程只执行一次,逻辑方法Service()是可以被多次调用的!

解决Servlet并发访问问题,给成员变量(被共享的数据)所在的代码加上同步代码块或者同步方法…
Servlet自动加载:是在某个Servlet的配置信息中加上参数:1
参数值,越大,创建Servlet对象优先级越低的.

init()/init(ServletConfig config) :第二个init是我们Serlvet生命周期中重要的初始化方法,serlvettomcat-init带参数的方法一定会被tomcat执行

第一个init()方式才是开发者真正需要自己去完成的逻辑代码!

ServletConfig对象:配置对象-在某个Servlet配置里面去配置一些参数
FirstServlet
org.westos_01.FirstServlet
初始化参数

初始化的参数名称
参数值

Servlet程序中获取ServletConfig对象: -一个serlvet对应一个ServletConfig对象
ServletConfig config = this.getServletConfig() ;
获取参数的方法:
String value = config.getInitParam(“参数名称”) ; //通过参数名称获取参数值
getInitParamNames() :获取当前所有的参数名称-返回的是一个Enumation

ServletContext对象—web工程–网站-只有一个全局的上下文对象:ServletContext
作用:
1)配置全局参数-
如何获取ServletContext对象
在GenericSerlvet-public SerlvetContextgetServletContext(){
context = this.getServletConfig().getServletcontext() ;
return context ;
}

简写方式:
ServletContext context = this.getServletContext();
2)作用2:获取上下文路径
在重定向中应用最广
response.sendRedirect(“/web工程名称/adv.html”) ; //硬路径

                String path = context.getContextPath() ; //当前web工程的项目名称:/web工程名称
            response.sendRedirect(request.getContextPath+“/adv.html”)

3)作为域对象:
a)HttpServletRequest:请求对象
b)ServletContext:上下文对象
c)HttpSession:session对象

setAttribute(“参数名称”,参数值(Object obj)’);将参数保存在域对象中
getAttribute(“name”):从域对象获取参数,通过参数名称获取参数值

ServletContext其他作用:
web动态开发,页面跳转分为两种请情况
面试题:

1)重定向:
a:重定向(浏览器行为)跳转页面的时候,地址栏发生变化
b:一次重定向有2个请求对象
c:重定向是可以跳转到外部工程的资源文件中
d:request域对象可以获取到参数数据

2)请求转发:
a:请求转发(服务器行为)跳转页面的时候,地址栏不发生变化
b:请求转发,只有1次请求
c:
使用请求转发,它只能转发到当前项目下的资源文件中,不能转发到外部工程里面
d:使用rquest域对象获取不到参数数据

请求转发的简写方式:

/**
* 请求转发的简化方式
*/
request.getRequestDispatcher(“/hello.html”).forward(request, response);

会话管理:

    什么是会话?

1)生活中的会话:
我:你好
小明:我很好

2)程序中的会话:
应用场景: -打开浏览器-登录某个网站-浏览网站的内容(军事新闻…)
–直接关闭浏览器-下次打开的时候-会显示刚才网站页面

浏览器和服务器之间产生的会话数据-是什么技术保存呢?

应用场景:-打开浏览器-登录x宝浏览很多商品信息将一些商品信息添加到购物车–直接关闭浏览器-下次打开的时候-购物车就存储了刚才添加商品–进行购物

到底什么技术将会话数据进行保存?

使用域对象保存:

1)ServletContext对象–登录 context.setAttribute(“name”,”张三”) ;
第二次登录-context.setAttribute(“name”,”eric”) ;
ServletContext对象如果设置同名的参数,下面的会覆盖掉上面的值;
ServletContext不行
2)Request域对象-登录
(使用request域对象设置参数据,最终获取参数据)
必须使用请求转发:
setAttribute(“name”,”张三”) ;

request.getAttibute(“name”) ;

不一定要使用请求转发来保存数据

只能通过Cookie技术
Session技术(数据保存在服务器端的)
Cookie技术:
数据保存浏览器端的

            使用cookie技术获取参数数据:

1)创建Cookie对象,
public Cookie(java.lang.String name,
java.lang.String value)
参数1:表示cookie名称
参数2:表示cookie名称对应的内容
2)发送cookie数据(服务器发送cookie数据到浏览器中)
set-cookie:请求头: 携带内容(最基本的方式)
简写方式:服务器发送Cookie
void addCookie(Cookie cookie)
3)服务器会携带cookie到浏览器(自发:浏览器自发的将cookie保存起来),方便下一次服务器传递数据
4)服务器获取cookie数据
原理:获取的请求头:cookie名称获取内容(最基本的)
简写方式:
Cookie[] getCookies()

Cookie技术的一些细节:
1)细节1:当前浏览器中发现中文cookie 数据,获取cooike名称对应的内容,需要进行解密(同时,对中文进行加密)
使用的是两个工具类:URLEncorder类和URLDecorder类
2)细节2:设置cookie的有效时间
public void setMaxAge(int expiry) :
参数分为三种情况:
1)如果参数为正整数,表示多少秒之后,cookie数据失效了(不存在了)
2)如果参数是一个负整数,一般情况指定-1,关闭浏览器,cookie就不存在了
3)如果参数是一个0,那么指定同名的cookie的名称,然后该cookie数据会被删除掉!
4)细节3:cookie的有效路径
public void setPath(java.lang.String uri):当前cookie的数据是在有效路径下才会起作用,否则,获取不到cookie数据

一般情况:一个站点可以存储多少个cookie数据,不超过300个,可能用到20个作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值