Javaweb学习笔记

ServletContext

1、ServletContext
web容器启动时,为每一web程序创建一个对应的ServletContext对象。作用:共享数据,可以在一个Servlet中拿到另外一个Servlet中的内容。
测试:

public class SetServletContext extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username="姜楠";
        context.setAttribute("username",username);
    }
}
public class GetServletContext extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = (String)context.getAttribute("username");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().write("名字:"+username);
    }
}

分别在web.xml中配置后,先打开SetServletContext,后打开GetServletContext才能拿到内容。

2、ServletContext应用
1)获取初始化参数

  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/maven</param-value>
  </context-param>

获取url:

String url = context.getInitParameter("url");
resp.getWriter().write(url);

2)请求转发

RequestDispatcher requestDispatcher = context.getRequestDispatcher("/get");//转发的url
requestDispatcher.forward(req,resp);//实现请求转发

输入此Servlet的url会获取到/get路径下的数据。

3)获取资源文件
在resources下新建properties文件
注意文件的路径

 InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties properties=new Properties();
        properties.load(is);
        resp.getWriter().write(properties.getProperty("username")+properties.getProperty("password"));

Response

重定向
使用sendRedirect()

HttpServletRequest

request代表客户端的请求,用户通过http协议访问服务器,HTTP请求中的所有信息会被封装到request中,通过request的方法,获取客户端的所有信息

保存会话的两种方式

Cookie:
1、从请求中拿到cookie
2、服务器端响应给客户端cookie

 //解决乱码问题
      resp.setContentType("text/html");
      resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");
        //服务器从客户端获取Cookie
        Cookie[] cookie=req.getCookies();//这里返回数组,不止有一个cookie
        PrintWriter printWriter= resp.getWriter();
        //判断cookie是否为空
        if(cookie!=null)
        {
            printWriter.write("上一次访问时间:");
            for(int i=0;i<cookie.length;i++)
            {
                if(cookie[i].getName().equals("LastLoginTime"))
                {
                     long lastLoginTime=Long.parseLong(cookie[i].getValue());
                     Date date=new Date(lastLoginTime);
                     printWriter.write(date.toLocaleString());
                }
            }
        }
        else {
            printWriter.write("这是第一次访问本网站");
        }
        Cookie cookie1=new Cookie("LastLoginTime",System.currentTimeMillis()+"");
        resp.addCookie(cookie1);
    }

在浏览器中查看结果
在这里插入图片描述
服务器设置新的cookie!

在这里插入图片描述
请求获取cookie,此cookie是上一次访问该网站cookie。

可以给cookie设置最大存活时间cookie.setMaxAge(),例如10秒钟,此时响应头中会添加新的信息
在这里插入图片描述
10秒内刷新浏览器会获取到该cookie,10秒后刷新该cookie会消失,请求中不包含cookie。

Session

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");
        //获取session
        HttpSession session= req.getSession();
        //向session中添加
        session.setAttribute("name","姜楠");
        String id = session.getId();
        if(session.isNew())
        {
            resp.getWriter().write("session是新创建的,id:"+id);
        }
        else
        {
            resp.getWriter().write("session已在服务器中创建,id"+id);
        }
    }
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        HttpSession session=req.getSession();
        System.out.println(session.getAttribute("name"));
    }

Session与cookie的区别:
cookie是将用户数据存储在用户浏览器,服务器通过请求可以获取cookie,session是将用户数据存储在服务器中,分发给用户一个sessionid,服务通过识别sessionid从而获取到用户数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值