目录
1.Cookie 和 Session
1.1HttpServletRequest 类中的相关方法
1.HttpSession getSession()
2.Cookie[] getCookies()
1.2HttpServletResponse 类中的相关方法
1.3HttpSession 类中的相关方法
1.4Cookie 类中的相关方法
1.5网页登录
1.流程图
2.步骤
2.上传文件
2.1方法
1.HttpServletRequest方法
2.Part类方法
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定
参数如果为 true, 则当不存在会话时新建会话;
参数如果为 false, 则当不存在会话时返回 null
getSession():
1.创建会话
获取请求中的cookie的sessionId字段(相当于会话的身份标识)
1.判断是否服务器存在,不存在,进入创建会话逻辑
2.创建会话:创建HttpSession对象(作为value),生成sessionId(作为key),把键值对,存到服务器内存中
3.服务器会返回一个HTTP响应,把sessionId通过Set-Cookie字段返回给服务器,浏览器就保存到sessionId到cookie.
2.获取会话
1.获取请求中的sessionId
2.判断是否在服务器存在过
3.如果有,查询HttpSession对象,返回
请求cookie的数据,返回数组,每个元素是cookie对象,有两个属性
添加cookie信息到响应报文中.添加的键值对,会作为http响应的set-cookie字段中表示
方法 |
描述 |
Object getAttribute(Stringname) |
该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null. |
void setAttribute(Stringname, Object value) |
该方法使用指定的名称绑定一个对象到该 session 会话 |
boolean isNew() |
判定当前是否是新创建出的会话 |
每个 Cookie 对象就是一个键值对
方法 |
描述 |
String getName() |
该方法返回 cookie 的名称。名称在创建后不能改变。(这个值是 SetCooke 字段设置给浏览器的) |
String getValue() |
该方法获取与 cookie 关联的值 |
void setValue(StringnewValue) |
该方法设置与 cookie 关联的值。 |
1.约定交互接口
1.登录交互
a.请求:
POST/login
Content-Type:application/x-www-form-urlencoded
username=zhang&password=123
b.响应
302
Location:index
2.主页的交互
a.请求
GET/index
b.响应
200
Content-Type:text/html
三次交互:
1.第一次:浏览器从服务器拿到登录页面
2.第二次:点击登录后,给服务器发送一个登录请求,服务器会响应主页
3.第三次:浏览器收到302后,向服务器发送请求,访问主页
会话可以保存任何信息,也可以实现记录当前用户访问的次数
1.编写页面,用form表单构造post请求
通过input实现
登录
2.编写servlet处理登录请求(处理用户请求)
1.获取信息
2.判断输入信息是否正确
3.登录成功
1.创建会话,保存身份信息
2.在会话中存入身份信息,和登录次数
3.跳转页面
4. 登录失败
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username=req.getParameter("username");
String password=req.getParameter("password");
//username放在equals中,如果为空直接返回false,避免因为为空引起异常
if("zhang".equals(username)&&"123".equals(password)){
HttpSession httpSession= req.getSession();
httpSession.setAttribute("username",username);
httpSession.setAttribute("count",0);
resp.sendRedirect("index");
}else{
resp.getWriter().write("login failed!");
}
}
}
3.编写服务器返回主页的逻辑
1.得到会话
2.从HttpSession得到用户名和count
3.count自增后放回到会话中
4.设置类型
5.输出
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession httpSession=req.getSession(false);
String username= (String) httpSession.getAttribute("username");
Integer count= (Integer) httpSession.getAttribute("count");
count++;
httpSession.setAttribute("count",count);
resp.setContentType("text/html;charset=utf8");
resp.getWriter().write("欢迎你!"+username+"第"+count+"次访问页面");
}
}
方法 | 描述 |
Part getPart(String name) | 获取请求中给定名字的文件 |
Coolection |
获取所有文件 |
上传文件前端用form表单,要使用特殊的类型form-data,提交文件时,文件内容以form-data构造的HTTP请求中,服务器通过getPart中获取
方法 | 描述 |
---|---|
String getSubmittedFileName() | 获取提交文件名 |
String getContentType() | 获取提交的文件类型 |
long getSize() | 获取文件的大小 |
void write(String Path) | 把提交的文件数据写入磁盘文件 |
上传文件
前端:
Title
后端:
上传文件要加注解
@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Part part= req.getPart("MyImage");
System.out.println(part.getSubmittedFileName());
System.out.println(part.getContentType());
System.out.println(part.getSize());
part.write("d:/java1/bbb.jpg");
resp.setContentType("text/html;charset=utf8");
resp.getWriter().write("上传成功");
}
}