cookie和session区别
有个博主写的非常好
cookie的使用:
1.创建cookie的对象并设置key赋值value,可以通过cookie.setMaxAge();设置存活时间,浏览器关闭也会存活
2.respond.addCookie(cookie),发送给浏览器,request.getCookies(),获取cookie数组,得到cookie的value值。
3.浏览器再次访问服务器,会带着cookie数据
4.cookie数据保存在浏览器中。
5,cookie获取数据时,只能获取到当前目录和其上级目录下发的cookie,下发时也只能从上级目录往下级目录发
session的使用:
1.request.getSession();获取session对象
2.request.setAttribute();绑定数据
3.jsp页面通过el表达式,sessionScope.key,就能找到session的value
4.session对象存活在服务器中,比cookie更安全
过滤器
使用步骤:
1,创建FilterServlet类
2,写web.xml写拦截请求,
<filter>
<filter-name>a</filter-name>
<filter-class>com.buka.edu.filter.FilterServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>a</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>
3. <filter-name>'' "</fliter-name>,""中间的字母顺序或者数字顺序,代表拦截器的先后,<url-pattern>/user/*</url-pattern>表示带user/的请求都会被拦截
4.具体执行过程代码如下:
public class FilterServlet implements Filter {
public void destroy() {//doFilter执行后最后执行
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
User user= (User) request.getSession().getAttribute("user");//如果获取了user说明已经登陆
if(user!=null)
{
chain.doFilter(req, resp);//放行
}
else
{
request.setAttribute("me","请登录");
request.getRequestDispatcher("/index.jsp").forward(request,response);//转发到登录页面
}
}
public void init(FilterConfig config) throws ServletException {//过滤器最先执行
System.out.println("正在扫描是否登录");
}
}
5.应用场景:
当判断一个系统是否登录时,可以使用。
ServletContext()的使用
1,创建对象
ServletConText servletcontext=getServletContext();
2,绑定数据
servletContext.setAttribute(":root",servletContext.getContextPath());//绑定了项目的相对路径
3.如何设置它的优先级
在web.xml中,主要看它在哪个servlet里了,举个例子:
<servlet>
<servlet-name>search</servlet-name>
<servlet-class>com.buka.edu.servlet.SearchOneServlet</servlet-class>
<load-on-startup>1</load-on-startup>//设置优先级
</servlet>
Servlet数据共享
1,pagecontext简称page范围,其共享范围仅限一个jsp页面,相当与内部的局部变量
2.request范围:是一次请求过程的范围,如果重定向后绑定的数据会消失
3,session范围:是一个用户会话的过程范围,浏览器不关闭与服务器的多次请求范围
4.application(==servletcontext)范围,是最大的共享范围,一个web应用的全体servlet,jsp共享的范围,适合保存公共静态数据)
使用建议:
1.数据共享范围越小越好,常用的是request
2,与当前用户有关的数据,共享到session,比如用户的登陆状态
3。全局数据,可以共享到application
el表达式,会从小到大的顺序依次拿绑定的数据,拿不到就换下一个。
监听器
作用:本身也是servlet,服务器启动最开始执行的,可以监听多种servlet对象,比如说servletcontext,request,session.
1,配置xml
<listener>
<listener-class>具体类</listener-class>
</listener>
2.servletlisten代码如下
public class ListenDemo implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext=sce.getServletContext();//这个对象也可以获取ServletContext()
servletContext.setAttribute("root",servletContext.getContextPath());
System.out.println(servletContext.getAttribute("root"));
}
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("我后执行");
}
3.应用场景:
当项目最开始要使用servlet上下文时,可以把他放到监听器中创建
如何使用一个servlet实现多个请求
1.代码如下:
StringBuffer url= request.getRequestURL();//获取链接
String newurl=url.substring(url.lastIndexOf("/"));//截取最后的请求
if(newurl.equals("/getAll"))//符合哪个,就走哪个
{
}
else if()
{
}
2.好处:xml文件只写一个请求就ok
Servlet的注解
@WebServlet("/getAll") @WebServlet(urlPatterns = {"/getAll","/update"})//拦截多个请求 @WebFilter @WebServlet("/hello",name="login") @WebFilter(value = {"/user/*"},servletNames = "login")//过滤名字时login的servlet @WebListener 好处:不用写麻烦的xml了
Servlet 初始化数据
1.xml文件配置如下
全局变量 <context-param> <param-name>abc</param-name> <param-value>123</param-value> </context-param><servlet> <servlet-name>hello</servlet-name> <servlet-class>com.buka.edu.servlet.HelloServlet</servlet-class> <init-param>//servlet初始化可以得到的数据 <param-name>asd</param-name> <param-value>123456</param-value> </init-param> </servlet>
2.获取数据代码
在Helloservlet类中创建init方法 public void init() { System.out.println( this.getInitParameter("asd"));//this代表调用的servlet对象 System.out.println(getServletContext().getInitParameter("abc"));//通过上下文获取全局变量 }