您当前的位置: 首页 >  Java

彭世瑜

暂无认证

  • 2浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java学习路线-51:JSP 快速入门

彭世瑜 发布时间:2020-05-17 21:21:13 ,浏览量:2

11-JSP 快速入门 第 1 章 : JSP 入门 课时 1 JSP 入门

Java Server Pages

jsp 本质就是 Servlet

jsp:在原有 html 基础上添加 java 脚本

分工:

jsp 显示数据

servlet 处理数据

jsp -> servlet -> jsp

jsp 组成:

1、html + java 脚本 + jsp 标签(指令)

2、9 个内置对象:

request
response
session
application
pageContext
config
out
page
exception

3、3 种脚本

 Java代码片段,多条代码
 Java表达式,一条代码
 声明成员
课时 2 JSP 中 Java 脚本的演示

html 中的 base 标签















访问局部变量:


访问成员变量:




列表循环
课时 3 JSP 和 Servlet 分工的案例

计算器示例

  1. 获取表单数据 form.jsp
  2. 把字符串转换成 int 类型
  3. 进行加法运算得到结果
  4. 保存数据结果到 request 中
  5. 转发到 result.jsp

处理流程

form.jsp -> servlet ->  result.jsp

代码文件

form.jsp


  
  
  

CalculateServlet.java

package com.pengshiyu.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CalculateServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取参数
        String s1 = request.getParameter("num1");
        String s2 = request.getParameter("num2");

        // 类型转换
        int num1 = Integer.parseInt(s1);
        int num2 = Integer.parseInt(s2);

        // 求和
        int result = num1 + num2;

        // 赋值
        request.setAttribute("result", result);

        // 转发
        request.getRequestDispatcher("/result.jsp").forward(request, response);
    }
}

result.jsp


课时 4 JSP 的原理

jsp 是一个特殊的 servlet

第一次访问 jsp 页面时,服务器会把 jsp 编译成 java 文件,一个 servlet 类 再把.java 文件编译成.class 文件 创建该类对象 最后调用它的 service()方法

第二次访问同一个 jsp 页面时,直接调用 service()方法

流程图

第一次访问:
客户端 -> 服务器 -> jsp -> java -> class -> 创建Servlet对象 -> 调用service()方法

第二次之后访问:
客户端 -> 服务器 -> jsp -> 调用service()方法

jsp 编译为 java 类

        jsp                 java类
===============================================
头                          定义9个内置对象
                            为9个内置对象赋值
===============================================

体
    html                   out.write()
                      原样搬运
                      out.print()
                      声明成员
                  注释不做翻译
===============================================
尾                         做异常处理

课时 5 JSP 中的注释
   html注释
  jsp注释,不会输出到html文件中
第 2 章 : Cookie 处理 课时 6 Cookie 入门

Cookie 是 http 协议

由服务器创建保存到客户端浏览器的一个键值对 服务器响应头

Set-Cookie: key1=value1; key2=valu2

客户端浏览器下次请求时会带上 Cookie 客户端请求头

Cookie: key1=value1; key2=valu2

规定:

  1. 1 个 Cookie 最大 4kb
  2. 一个服务器最多给一个浏览器 20 个 cookie
  3. 一个浏览器最多保存 300 个 cookie

用途: 服务器跟踪客户端状态 购物车

JavaWeb 中使用:

(1)原始方法
response发送Set-Cookie响应头
request获取Cookie请求头

(2)便捷方法
response.addCookie()
request.getCookies()

示例 setCookie.jsp

设置Cookie


getCookie.jsp

获取Cookie

课时 7 Cookie 的生命

maxAge:Cookie 保存的最大时间,以秒为单位

maxAge>0 会保存到客户端硬盘
maxAge cookieA
/demo/jsp/index.jsp -> cookieA、cookieB
/demo/jsp/html/index.jsp -> cookieA、cookieB、cookieC
课时 9 Cookie 的域

domain 指定共享域名

eg:
cookie.setDomain('.baidu.com')
cookie.setPath('/')

共享:www.baidu.com、zhidao.baidu.com
第 3 章 : HttpSession 课时 10 HttpSession 入门

HttpSession 用于会话跟踪,保存在服务器端

1、Servlet 三大域对象:

  1. request
  2. session
  3. application

2、HttpSession 底层依赖: Cookie 或是 Url 重写

3、会话范围 用户首次访问服务器开始,到该用户关闭浏览器结束

4、Servlet 中获取 session

HttpSession = request.getSession()

5、jsp 中的 session 是内置对象,可以直接使用


课时 11-12 HttpSession 第一例

创建和获取 session

setSession.jsp 创建 session

设置Session

getSession.jsp 获取 session

获取Session


课时 13 HttpSession 第二例

登录

思路

login.jsp
-> LoginServlet 登录失败跳转回 login.jsp
-> admin.jsp    未登录跳转回 login.jsp

使用 session 关闭浏览器后就消失

可以使用 cookie 设置保存时长,持久化到浏览器中

login.jsp





登录

LoginServlet.java

package com.pengshiyu.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        HttpSession session = request.getSession();

        if ("admin".equals(username) && "123456".equals(password)) {
            session.setAttribute("username", username);

            // 添加Cookie
            Cookie cookie = new Cookie("username", username);
            cookie.setMaxAge(60 * 60 * 24); // 保存一天
            response.addCookie(cookie);

            response.sendRedirect("session/admin.jsp");
        } else {
            session.setAttribute("msg", "账号或密码不正确");
            response.sendRedirect("session/login.jsp");
        }
    }
}

admin.jsp





欢迎

课时 14 HttpSession 原理

sessionId 保存到 cookie 中

request.getSession(false) // 不会创建sessionId
request.getSession(true)  // 会创建sessionId
request.getSession()      // 会创建sessionId
课时 15 配置 session 最大不活动时间

public interface HttpSession {
    long getCreationTime();

    String getId();  // 获取sessionId

    long getLastAccessedTime();

    ServletContext getServletContext();

    // 设置最大不活动时间,默认30分钟
    void setMaxInactiveInterval(int var1);

    int getMaxInactiveInterval();

    // 让session失效
    void invalidate();

    // 查看是否为新的,判断客户端第一次请求
    boolean isNew();


    Enumeration getAttributeNames();
    Object getAttribute(String var1);
    void setAttribute(String var1, Object var2);
    void removeAttribute(String var1);

}

web.xml 中配置 session 最大不活动时间


    
    30

课时 16 session 之 url 重写

如果浏览器的 cookie 被禁用了,可以将 sessionId 在 url 参数中传递

// 如果cookie中没有会加到url上
response.encodeURL()
第 4 章 : 验证码 课时 17 生成图片(VerfiyCode 类)
package util;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;

public class ImageUtil {
    public static void main(String[] args) throws IOException {
        // 创建图片缓冲区
        BufferedImage bi = new BufferedImage(50, 50, BufferedImage.TYPE_3BYTE_BGR);
        // 得到绘制环境
        Graphics2D g = (Graphics2D) bi.getGraphics();
        // 设置白色
        g.setColor(Color.WHITE);
        // 绘制矩形,相当于绘制背景色
        g.fillRect(0, 0, 50, 50);
        // 设置红色
        g.setColor(Color.RED);
        // 写字
        g.drawString("hello", 2, 35);
        // 保存输出
        ImageIO.write(bi, "JPEG", new FileOutputStream("1.jpg"));
    }
}

结合登录验证的完整代码

login.jsp(VerifyCodeServlet) -> LoginServlet -> admin.jsp

login.jsp





登录

用户名: 密码: 验证码: 换一张 function changeImage(){ let code = document.getElementById("code"); code.src = "/demo/code?" + new Date().getTime(); }

admin.jsp





欢迎

LoginServlet.java

package com.pengshiyu.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String verifyCode = request.getParameter("verify_code");

        HttpSession session = request.getSession();
        String code = (String) session.getAttribute("code");

        // 验证码校验
        if(!code.equalsIgnoreCase(verifyCode)){
            session.setAttribute("msg", "验证码不正确");
            response.sendRedirect("session/login.jsp");
            return;
        }

        if ("admin".equals(username) && "123456".equals(password)) {

            session.setAttribute("username", username);

            // 添加Cookie
            Cookie cookie = new Cookie("username", username);
            cookie.setMaxAge(60 * 60 * 24); // 保存一天
            response.addCookie(cookie);

            response.sendRedirect("session/admin.jsp");
        } else {
            session.setAttribute("msg", "账号或密码不正确");
            response.sendRedirect("session/login.jsp");
        }
    }
}

VerifyCodeServlet.java

package com.pengshiyu.servlet;

import util.ImageUtil;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class VerifyCodeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String code = ImageUtil.getVerifyCode(4);
        request.getSession().setAttribute("code", code);
        ImageUtil.writeImage(code, response.getOutputStream());
    }
}

ImageUtil.java

package util;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

public class ImageUtil {
    public static void writeImage(String text, OutputStream output) throws IOException {
        // 创建图片缓冲区
        BufferedImage bi = new BufferedImage(50, 20, BufferedImage.TYPE_3BYTE_BGR);
        // 得到绘制环境
        Graphics2D g = (Graphics2D) bi.getGraphics();
        // 设置白色
        g.setColor(Color.WHITE);
        // 绘制矩形,相当于绘制背景色
        g.fillRect(0, 0, 50, 20);
        // 设置红色
        g.setColor(Color.RED);
        // 写字
        g.drawString(text, 8, 16);
        // 保存输出
        ImageIO.write(bi, "JPEG", output);
    }

    public static String getVerifyCode(int length){
        String code  = "1234567890";
        StringBuilder sb = new StringBuilder();

        Random random = new Random();
        for(int i=0; i             
关注
打赏
1665367115
查看更多评论
0.2053s