java web 核心(上)
2020-08-09 本文已影响0人
极速魔法
http协议
应用层协议
http请求格式
请求行 【请求类型(post,get) 请求路径 协议版本】
请求头 key: value
空白行
请求体
http响应格式
响应行 【协议版本 状态码 状态信息(200 ok)】
响应头 key: value
空白行
响应体
Servlet
运行在服务器上的类,完成请求的响应处理
- 实现 Servlet接口,配置web.xml
- 继承GenericServlet,重写service方法
- 继承HttpServlet,重写至少一个方法
Servlet生命周期
- 实例化
- 初始化 init()
- 服务 service()
- 销毁destroy()
- 不可用,销毁实例标记为垃圾收集
实例化和初始化执行一次,服务被执行多次,destroy调用一次
GET POST
- get请求数据跟在url后面,提交少量数据,不安全
- post 安全,提交大量数据
ServletResponse
response.setContentType(“text/html;charset=utf-8”)
HttpServlet类
PrinterWriter writer=response.getWriter() //
post请求接收乱码
request.setCharacterEncoding(‘utf-8’)
ServletContext
多个Servlet信息共享
ServletContext context=getServletConfig().getServletContext();
// 获取 /工程名
context.getContextPath
重定向 302
response.sendRedirect(String location);
- 重定向URL地址改变
- 重定向过程中会将前面Request对象销毁,然后创建一个新的Request对象。
转发
一个组件将未完成的请求转交给其他组件
RequestDispatcher requestDispatcher = request.getDispatcher("/targetServlet") //传入转发路径
requestDispatcher.forwared(request,response) // 实现转发
- 转发URL地址不改变
- 共享Request ,Response对象
- 转发地址不能是其他项目
Cookie
cookie在服务端创建,服务端通过响应发送给浏览器 Set-Cookie:xxx,浏览器端保存.后面浏览器带着Cookie请求服务端。
Cookie cookie = new Cookie("name","value");
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();
cookie.getName()
cookie.getValue()
cookie默认保存在内存中
cookie.getMaxAge() // 获取cookie有效期
cookie.setMaxAge(3600) // 有效期3600s
cookie路径
cookie路径匹配,才会带入请求头中
cookie.setPath()
cookie缺点
- 保存4kb,保存在浏览器不安全
- 只能保存字符串类型
session
// session不存在则创建
HttpSession session=request.getSession();
// 判断是否是新创建的
session.isNew()
session.setAttribute(key,value);
session.removeAttribute(key)
默认失效时间30min
特点
- 数据安全
- 保存数据类型丰富
- 保存更多的数据
JSP(java server pages)
指令
<% @=指令 属性=属性值%>
<% @page contentType="text/html;charset=UTF-8" language="java"%>
<%@include file=""%> //静态包含
动作
<jsp:include page="" />
//转发
<jsp:forward page="" ></jsp:forward>
内置对象
String name=request.getServerName();
// 存储值,在同一个请求中
request.setAttribute("name","value");
String request.getParameter("name") //返回值是String
Objcet request.getAttribute("name"); //返回值是Object类型
responsen内置对象
// 每隔1秒刷新
response.addHeader("refresh","1")
session内置对象
一次会话包含多次请求,保存到服务器
application 内置对象
web全局变量,存储范围 application > session > request>pageContext(当前页面有效,转发无效)
exception内置对象
// 普通页面声明 error处理或者在配置文件中
<% @page errorPage="error.jsp" %>
web.xml
<error-page>
<exception-type>java.lang.Throwable</exception-type> <location>/error.jsp</location>
</error-page>
error.jsp
<% @page contentType="text/html;charset=UTF-8" language="java" %>
<% @page iserrorPage="true" %>
...
exception.getMessage();
javaBean
session.removeAttribute(“”)
// 删除对象
MVC
model,view,controller 分离,提高可维护性
in 在statement中如何传值