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

简介: Java学习路线-51:JSP 快速入门(1)

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 标签


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// java语句
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() +  request.getContextPath();
// http://localhost:8080/demo
%>
<%=basePath%>
<%
// 等价于
out.print(basePath);
%>
<%!
// 成员变量
int a = 5;
// 成员方法
public void getValue(){
    System.out.print("hi");
}
%>
<% int a = 10; // 局部变量 %>
访问局部变量:
<%=a%>
访问成员变量:
<%=this.a%>
<%
// 调用成员方法
getValue();
%>
列表循环
<% for(int i=0; i< 10; i++){ %>
<%=i%>
<% } %>

课时 3 JSP 和 Servlet 分工的案例

计算器示例


获取表单数据 form.jsp

把字符串转换成 int 类型

进行加法运算得到结果

保存数据结果到 request 中

转发到 result.jsp

处理流程


form.jsp -> servlet ->  result.jsp

代码文件

<form action="calculate" method="post">
  <input type="text" name="num1" />
  <input type="text" name="num2" />
  <input type="submit" />
</form>

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

<%=request.getAttribute("result")%>

课时 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 个 Cookie 最大 4kb

一个服务器最多给一个浏览器 20 个 cookie

一个浏览器最多保存 300 个 cookie

用途:

服务器跟踪客户端状态

购物车


JavaWeb 中使用:

(1)原始方法
response发送Set-Cookie响应头
request获取Cookie请求头
(2)便捷方法
response.addCookie()
request.getCookies()

示例

setCookie.jsp

<h2>设置Cookie</h2>
<%
Cookie cookie = new Cookie("key", "value");
response.addCookie(cookie);
%>

getCookie.jsp


<h2>获取Cookie</h2>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null){
    for(Cookie c: cookies){
        out.print(c.getName() + ": "+ c.getValue());
    }
}
%>

课时 7 Cookie 的生命

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

maxAge>0 会保存到客户端硬盘
maxAge<0 只会在内存中,浏览器关闭就删除
maxAge=0 删除cookie
eg:
cookie.setMaxAge(60)

课时 8 Cookie 的路径

path 设置需要归还的 cookie 作用域

默认值为当前路径的父级目录

eg:
cookie.setPath('/')
eg:
cookieA /demo
cookieB /demo/jsp/
cookieC /demo/jsp/html/
/demo/index.jsp -> 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 三大域对象:


request

session

application

2、HttpSession 底层依赖:

Cookie 或是 Url 重写


3、会话范围

用户首次访问服务器开始,到该用户关闭浏览器结束


4、Servlet 中获取 session


HttpSession = request.getSession()

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


<%
void session.setAttribute(String name, String value);
Object session.getAttribute(String name);
void session.getAttribute(String name);
%>

课时 11-12 HttpSession 第一例

创建和获取 session


setSession.jsp 创建 session



<h2>设置Session</h2>
<%
session.setAttribute("name", "Tom");
%>

getSession.jsp 获取 session



<h2>获取Session</h2>
<%=session.getAttribute("name")%>

课时 13 HttpSession 第二例

登录


思路


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

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


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


login.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// 如果有msg就显示
String msg = (String)session.getAttribute("msg");
if(msg == null){
    msg = "";
}
%>
<h2>登录</h2>
<div style="color: red"><%=msg%></div>
<%
  // 清空session中的msg
  session.removeAttribute("msg");
%>
<form action="/demo/login" method="post">
    <input type="text" name="username"><br/>
    <input type="text" name="password"><br/>
    <input type="submit">
</form>

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


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
// 从session中获取
// String username =(String)session.getAttribute("username");
// 从cookie中获取
String username = null;
Cookie[] cookies = request.getCookies();
for (Cookie c :cookies){
    if(c.getName().equals("username")){
        username = c.getValue();
        break;
    }
}
if(username == null){
    request.getSession().setAttribute("msg", "用户未登录");
    response.sendRedirect("login.jsp");
}
%>
<h2>欢迎<%=username%></h2>

课时 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 最大不活动时间

<session-config>
    <!-- 单位:分钟 -->
    <session-timeout>30</session-timeout>
</session-config>

课时 16 session 之 url 重写

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


// 如果cookie中没有会加到url上
response.encodeURL()
相关文章
|
1天前
|
Java
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
17 3
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
|
1天前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
15 5
|
1天前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
14 1
|
1天前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
13 2
|
1天前
|
Java
校园帮【JSP+Servlet+JavaBean】(Java课设)
校园帮【JSP+Servlet+JavaBean】(Java课设)
7 1
|
1天前
|
Java
新闻发布系统【JSP+Servlet+JavaBean】(Java课设)
新闻发布系统【JSP+Servlet+JavaBean】(Java课设)
10 2
|
1天前
|
Java
学校人员管理系统【JSP+Servlet+JavaBean】(Java课设)
学校人员管理系统【JSP+Servlet+JavaBean】(Java课设)
11 2
|
1天前
|
Java
学生信息管理系统【JSP+Servlet+JavaBean】(Java课设)
学生信息管理系统【JSP+Servlet+JavaBean】(Java课设)
13 1
|
1天前
|
Java
图书信息管理系统【JSP+Servlet+JavaBean】(Java课设)
图书信息管理系统【JSP+Servlet+JavaBean】(Java课设)
8 0
|
1天前
|
Java
个人信息管理系统【JSP+Servlet+JavaBean】(Java课设)
个人信息管理系统【JSP+Servlet+JavaBean】(Java课设)
10 0