一. Url 重写
- 使用继承 HttpServlet 创建 Servlet 类, 接收 Http请求, 当需要接收 GET 请求时, 重写 doGet()方法, 接收 POST请求时,重写 doPost 方法. 如果想两种请求都支持, 重写两个方法或重写 service 方法.
- 注意: 重写 doGet方法和重写 doPost方法时 不要在方法内部调用 super.doGet() 或 super.doPost, 如果调用了 父类的 doGet()或 doPost(), 会调用父类的方法, 而父类的方法则会返回无法访问 HTTP method GET is not supported by this URL 或 HTTP method POST is not supported by this URL
HttpServlet 中的源码中就是这么写的, 如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_get_not_supported");
if(protocol.endsWith("1.1")) {
resp.sendError(405, msg);
} else {
resp.sendError(400, msg);
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_post_not_supported");
if(protocol.endsWith("1.1")) {
resp.sendError(405, msg);
} else {
resp.sendError(400, msg);
}
}
- Cookie
- Cookie是自动地在 Web 服务器和浏览器之间来回传递的一小块信息, 可以设置 cookie 的有效期限.
- 对于 web 浏览器而言, 每台 Web服务器 最多可以支持20个 cookie.
- 用户可以通过设置浏览器来拒绝接收 cookie,
- cookie 可以设置 domain, path, maxAge 等属性, maxAge 决定 cookie 的有效期, domain 和 path 决定 cookie 的访问权限(跨域 cookie 访问), 详细再查. 后端向前端发送 cookie 要用 response调用 add方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookieTest = new Cookie("study", "test");
resp.addCookie(cookieTest);
}
如果想立刻销毁一个已存在的 cookie, 需要创建一个同名的 cookie, 然后设置 cookie 的 maxAge 属性为0, 在 add 到 response 中
Cookie cookieDie = new Cookie("study", "");
cookieDie.setMaxAge(0);
resp.addCookie(cookieDie);
- HttpSession
- 这是 javaWeb 中非常重要的一个域对象, 前端与后台建立连接后, 同一用户, 只能生成一个 session, 并且只能访问它自己的 session 对象, 这是后台技术, cookie 是属于前端技术
- session 对象, 是用户第一次访问后台时自动创建的, 可以使用 request.getSession 方法获取当前的 session 对象, 如果当前没有则创建一个 session, 还有一个带有 boolean 类型参数的方法getSession(true), 返回当前 session, 若没有创建一个, getSession(true) 等价 getSession()
- session 存储信息使用 session.setAttribute, 取信息使用 getAttribute.
- session 存储的信息都是存在内存中的, 所以尽量不要存储太多信息
- session 可以存储对象, 这个对象需要实现 Serializable 接口, 以便于必要时存储到文件中,或数据库中
- session 内部是由 Map 实现
- 每一个 session 可使用 getSessionId获取当前 session 唯一的 id
- session 有可以在 web.xml 中使用 session-timeout统一配置 session 的有效期限
- session 可以使用 setMaxInactiveInterval 方法设置特定 session 的有效期限, 并且有 invalidate 方法,强制 session 过期. session.setMaxInactiveInterval(0);如果参数为0 表示永远不会过期, 但这不合理, 内存将永远不会释放, 除非卸载或停止服务.