servlet成员变量的线程安全问题
成员变量,
局部变量不会有安全问题
多用方法,来独立使用变量,优先使用局部变量,不行再全局
登录功能!
http:无状态
意思是完全独立的访问
会话跟踪
cookie
1.创建容器
Cookie cookie=new Cookie("username", uname);
2.响应给浏览器,存储到cookie
resp.addCookie(cookie);
3.缺点
-
不安全
-
数量有上限
-
中文不方便
-
不能操作对象
注意点;cookie的访问跳转路径必须写成在创建cookie的路径下面不然拿不到值
比如把servlet的访问路径改成不是cookie路径的就不能拿到值
来到date页面是拿不到cookie值的
session
它的数据是存在 服务器的,访问服务器开始就生效到会话结束,可以当作关闭浏览器的时候就关闭,但是实际上是在关闭浏览器的时候是丢失了上一次的存储地址,相当于门票,就获取不到上一次的存储的所有数据
在当前会话中对其存储数据之后每次访问都会携带数据,
1.创建语法
req.getSession;可以得到一个对象
session.setAttiubute(自定义名字,要放入的对象)
2.可以结合过滤器
filterlter
1.过滤器思想
1.跟渔网一样可以筛选自己想要的
2.请求会被拦截,通过过滤器的条件选择才能进入服务器进行操作,
3.过滤器也会拦截服务器的响应,写在放行代码的后面的代码就是处理响应的代码也就是响应的时候才执行
4.过滤器需要在web.xml写配置文件来交给tomcat来管理,同样需要配置关联名字和全限定名路径,
<filter> <filter-name>Myfilter</filter-name> <filter-class>cn.itsource.servlet.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>Myfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<url-pattern>/*</url-pattern> </filter-mapping>这个表示的是过滤路径
用通配符*表示拦截所有的访问,
然后使用dofilter的方法来筛选通过过滤器,
2.过滤器的参数
doFilter(ServletRequest requset, ServletResponse respaon, FilterChain chain)
ServletRequest :请求参数;在判断用户是否登录,免除过滤的时候有用处,通过第一次登录获取的对象存入session在过滤器的请求对象获得 session里面的对象来判断是否已经登录
ServletResponse :响应参数
这两个使用HTTPservlet的 时候需要强制转换类型
3.登录的时候失败了需要响应并且把响应数据打印到登录页面
则需要在后台 创建一个属性,存放错误时的响应,当账号密码错误的时候就携带数据到登录页面,然后打印,