Servlet(二)

目录

1.Cookie 和 Session

1.1HttpServletRequest 类中的相关方法

1.HttpSession getSession()

2.Cookie[] getCookies()

1.2HttpServletResponse 类中的相关方法

1.void addCookie(Cookie cookie)

1.3HttpSession 类中的相关方法

1.4Cookie 类中的相关方法

1.5网页登录

1.流程图

 2.步骤

2.上传文件

2.1方法

1.HttpServletRequest方法

2.Part类方法


1.Cookie 和 Session

Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定

1.1HttpServletRequest 类中的相关方法

1.HttpSession getSession()

参数如果为 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对象,返回

2.Cookie[] getCookies()

请求cookie的数据,返回数组,每个元素是cookie对象,有两个属性

1.2HttpServletResponse 类中的相关方法

1.void addCookie(Cookie cookie)

添加cookie信息到响应报文中.添加的键值对,会作为http响应的set-cookie字段中表示

1.3HttpSession 类中的相关方法

方法

描述

Object getAttribute(Stringname)

该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null.

void setAttribute(Stringname, Object value)

该方法使用指定的名称绑定一个对象到该 session 会话

boolean isNew()

判定当前是否是新创建出的会话

1.4Cookie 类中的相关方法

每个 Cookie 对象就是一个键值对

方法

描述

String getName()

该方法返回 cookie 的名称。名称在创建后不能改变。(这个值是 SetCooke 字段设置给浏览器的)

String getValue()

该方法获取与 cookie 关联的值

void setValue(StringnewValue)

该方法设置与 cookie 关联的值。

1.5网页登录

1.流程图

Servlet(二)_第1张图片

 2.步骤

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实现




    
    登录


    

Servlet(二)_第2张图片

Servlet(二)_第3张图片 

 

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!");
        }


    }
}

Servlet(二)_第4张图片

Servlet(二)_第5张图片 

 

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+"次访问页面

"); } }

Servlet(二)_第6张图片 

Servlet(二)_第7张图片 

 

 

2.上传文件

2.1方法

1.HttpServletRequest方法

方法 描述
Part getPart(String name) 获取请求中给定名字的文件
Coolection getParts() 获取所有文件

上传文件前端用form表单,要使用特殊的类型form-data,提交文件时,文件内容以form-data构造的HTTP请求中,服务器通过getPart中获取

2.Part类方法

方法 描述
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("上传成功");
    }
}

你可能感兴趣的:(servlet,前端,java)