JavaWeb-03

Servlet实现记录你是当前第几个访问者

 注意事项:
    1.防止线程安全问题
    2.在使用同步代码块选择锁对象,通常会使用当前servlet程序对象

servletConfig对象

1
2
3
4
5
6
7
8
9
10
11
12
13
<servlet>
<servlet-name>configServlet</servlet-name>
<servlet-class>b_servletconfig.configServlet</servlet-class>
<!-- Servlet程序的初始化参数 -->
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>12345</param-value>
</init-param>
</servlet>
1
2
3
4
5
6
7
在web.xml文件中利用<intt-param>标签来定义Servlet初始化参数,主要包含两个子标签
<param-name> <param-value>
当Tomcat服务器程序启动,WEB容器在创建servlet时,会把初始化参数封装到ServletConfig对象中,
这个ServletConfig对象,会作为Servlet对象的初始化方法init的参数

【注意】
在一个Servlet 对应一个ServletConfig

ServletContext

1
2
3
4
5
6
7
8
表示当前整个WEB应用,一个WEB应用有且只有一个ServletContext对象

1.获取WEB应用的路径
ServletContext context = this.getServletContext();
context.getContextPath();
request.getContextPath();

2.WEB应用的全局参数
1
2
3
4
5
<!--这是针对整个WEB项目的初始化参数-->
<context-param>
<param-name>AAA</param-name>
<param-value>aaa</param-value>
</context-param>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
context.getInitParameter(String parameter);

3.ServletContext是一个域对象

request,session域

可以利用ServletContext域对象,完成整个WEB项目中的数据共享传递
不仅能传递基本数据类型,也可以传递类对象类型
setAttribute(String name, Object value);
getAttribute(String name);

4.转发和重定向
WEB服务器接收到客户端的请求之后,让Tomcat服务器去调用另一个WEB资源,这称之为转发

request域转发
request.setAttribute(String name, Object value)
//转发的方法
req.getRequestDispatcher(String uri).forward(HttpServletRequest req, HttpServletResponse resp)
uri:服务器端要访问别的WEB资源路径,这里是服务器端的地址,一般用 / 来头,表示WEB项目的根目录
HttpServletRequest req:原本用户请求当前页面的request对象
HttpServletResponse resp: 原本用户请求当前页面生成的response对象

重定向
response.sendRedirect(String url);
这个url是相对于webapps的,是提供给浏览器使用的URL

推荐写法
response.sendRedirect(request.getContextPath() + "重定向地址");

【注意】
在重定向的情况下,request域不能使用

会话控制

软件中的会话:
    打开浏览器——>访问服务器上的内容——>关闭浏览器
    
登录业务场景:
    打开浏览器 ->访问登录页面->输入用户名 密码 验证码->发送给服务器->服务器验证信息->返回给浏览器->浏览器加载页面
    
发现:
    一处登录,处处使用
    
    购物车场景:
        在手机淘宝app选购,加入购物车,网页的也能看到。
        这里的购物车数据在哪里保存
会话控制技术:
    管理 浏览器客户端 和 服务器 之间进行会话过程产生的会话数据

会话控制技术

Cookie技术:会话数据保存在浏览器客户端,也就是用户本地
Session技术:会话数据保存在服务器上

Cookie技术

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
核心技术:
1.创建Cookie对象
Cookie(String name, String value);
2.设置Cookie
setvalue(String name) //通过name来设置Cookie的value
setPath(String path);//设置Cookie的有效范围
setMax(int time); //设置最大有效时间
3.发送Cookie到浏览器保存
response.addCookie(Cookie c); //发送Cookie给浏览器
4.服务器接受浏览器访问时带来的Cookie数据
Cookie[] request.getCookies();

Cookie有一定的局限性
1.限制数据类型 必须是String
2.不能保存中文
3.Cookie保存数据容量较小,只有4KB

【但是有前提,需要开启Cookie才可以使用Session】
Session的特点:
会话数据保存在服务器上,可以生成临时或者永久temp文件

Session技术

1
2
3
4
5
6
7
8
9
10
11
12
13
HttpSession
1.获取Session对象
HttpSession getSession();
HttpSession getSession(boolean create);
2.设置Session有效时间
void setMaxInactiveInterval(int interval);//设置Session的有效时间
void invalidate(); //销毁Session
String getId(); //获取Session的ID

3.Session也是一个域对象,这里可以保存数据属性到Session
void setAttribute(String name, Object value); //设置Session里面保存是会话数据内容,可以保存一个对象
Object getAttribute(String name);//获取到Session里面的数据
void removeAttribute(String name); //清空Session里面的数据