JSP 指令标识

page

用于设置当前页面配置信息;如导入包、设置编码等。

<%@ page import="包名"%>

include

引用其他页面,方便代码维护

<%@ include file="index.jsp" %>

JSP 脚本表示

声明标记<%! %>

声明的内容会在全局部分进行定义

    <%!
        //这里是全局变量
        int num = 0;
        public int count(){
            num++;
            return num;
        }
    %>

表达式<%= %>

直接输出变量或者方法的返回值

<body>
    <%!
        int num = 0;
        public int count(){
            num++;
            return num;
        }
    %>
    <h1>这是第<%= count() %>次访问本页面</h1>
</body>

脚本<% %>

这里的代码都是局部变量的声明

JSP三种注释

<!-- 这是html注释 -->
<%-- 这是jsp注释 --%>
<% 
    //这是java注释
    /*
        这是java多行注释
    */
%>

JSP 内置对象

request

表示一次请求;HttpServletRequest类

  • 指定每个请求的编码,防止中文乱码问题
request.setCharacterEncoding("utf-8");
  • getParameter 获取请求传输过来的数据

    String 变量 = request.getParameter("属性");

<form action="sfz.jsp" method="post">
    <input type="text" name="ID">
    <input type="submit" value="提交">
</form>
<% 
    request.setCharacterEncoding("utf-8");
    String id = request.getParameter("ID"); 
%>
<div>身份证号码为:<%=id %></div>
  • setAttribute 数据存储
  • getRequestDispatcher 将请求发给其他 jsp 页面,该对象的 forward 方法用于请求转发
<%
    String id = request.getParameter("id");
    //将数据存入request中
    request.setAttribute("id", id);
    //将请求发给其他jsp
    request.getRequestDispatcher("test2.jsp").forward(request, response);
%>
  • getAttribute 通过关键值取出数据,数据为 Object 类型,强制转换即可
<%
    String id = (String)request.getAttribute("id");
    out.print(id);
%>
  • getParameterValues 获取客户端传来的多个同名参数,以数组形式保存
<%
    String[] names = request.getParameterValues("name");
    //数组输出
    out.print(Arrays.toString(names));
%>

response

表示一次响应;HttpServletResponse类

  • sendRedirect

    重定向,创建一个新的请求传给页面,无法转发数据

response.sendRedirect("xxx.jsp");

转发 与 重定向 的区别

  • 转发是将同一个请求传给下一个页面。重定向是创建一个新的请求传给下ー个页面,之前的请求结束生命周期。

    转发:同一个请求在服务器之间传递,地址栏不变,也叫服务器跳转。

    重定向:由客户端发送一次新的请求来访问跳转后的目标资源,地址栏改变,也叫客户端跳转。

如果两个页面之间需要通过 request来传值,则必须使用转发,不能使用重定向。

session

  • 表示一次会话,客户端与服务端之间发生的一系列连续请求和相应的过程,打开浏览器到关闭浏览器的一个过程,并保存用户信息;HttpSession类

    服务器无法识别每一次 HTTP 请求的出处(不知道来自于哪个终端),它只会接受到一个请求信号,所以就存在个问题:将用户的响应发送给其他人,必须有一种技术来让服务器知道请求来自哪,这就是会话技术。

  • 会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。

属于同一次会话会有一个标识符:sessionID,他是 String 类型。

  • 新建对象
HttpSession session = req.getSession();
  • 获取 session ID
int getId();
  • 设置 / 获取 失效时间
void setMaxInactiveInterval(3);
void getMaxInactiveInterval(3);
  • session 立即失效
void invalidate();
  • 存储值
String setAttribute("属性名", String);
  • 获取值
Object getAttribute("属性名");
  • 删除值
void removeAttribute("属性名");

cookie

Cookie是服务端在HTTP响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了某个Cookie,在之后的请求和响应过程中,会将此 Cookie来回传递,这样就可以通过 Cookie这个载体完成客户端和服务端的数据交互。

  • 创建 cookie
Cookie cookie = new Cookie("name", "wdnmd2");
response.addCookie(cookie);
  • 输出 cookie
//获取cookie的name
String getName();
//获取cookie的value
String getValue();
//创建cookie
Cookie cookie = new Cookie("name", "wdnmd2");
response.addCookie(cookie);
//获取cookie
Cookie[] wdnmd = request.getCookies();
//判断是否为空
if(wdnmd != null) {
    //输出cookie
    for(Cookie a:wdnmd) {
        out.write(a.getName() + ":" + a.getValue() + "<br />");
    }
}
  • 设置 / 获取 cookie有效时间
//设置
void setMaxAge(int age);
//获取
int getMaxAge();
Cookie cookie = new Cookie("name", "wdnmd2");
cookie.setMaxAge(100);
int MaxAge = cookie.getMaxAge();

session 与 cookie 的区别

  1. session
    • 保存在服务器,服务器重启则消失
    • 保存的数据为 Object
    • 会话结束则销毁
    • 保存重要信息
  2. cookie
    • 保存在浏览器
    • 保存的数据为 String
    • 可以长期保存在浏览器中,与会话无关
    • 保存不重要信息

config

当前 JSP 对应的 Servlet 的 ServletConfig 对象,获取当前 Servlet 的信息

  • xml 配置

    
        configNB
        com.wdnmd.Servlet
    
        
            name
            xiaoming
        
        
            age
            18
        
    
    
    
        configNB
        /add
    
  • Servlet 类获取

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          //获取当前config配置
        ServletConfig config = this.getServletConfig();
          //获取数据
        String name = config.getInitParameter("name");
        String age = config.getInitParameter("age");
          //输出
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.write(name);
        out.write(age);
    }
    }
    
  • 全局参数配置 xml

    
      password
      123123
    
  • Servlet 类获取全局数据

    ServletContext context = this.getServletContext();
    String password = context.getInitParameter("password");
    out.write(password);

out

向浏览器输出数据;JspWriter;

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("wdnmd");

exception

表示 JSP 页面发生的异常;Exception

JSP内置对象作用域

  • pageContext:只在当前页面生效
  • request:只在当前请求生效
  • session:只在当前会话生效
  • application:在当前整个Web服务器生效

application > session > request > pageContext

访客统计案例

<%
    Integer num = (Integer)application.getAttribute("num");
    if(num == null) {
        num = 1;
        application.setAttribute("num", num);
    }
    else {
        num++;
        application.setAttribute("num", num);
    }

    out.write("你是本站第" + num + "名访客");
%>

EL表达式

Expression Language 表达式语言,替代 JSP 页面中数据访问时的复杂编码,可以非常方便的取出域对象(pageContext、request、session、application)保存的数据,前提是需要先 setAttribute ,EL 相当于简化 getAttribute

$("变量名");
//变量名就是对应 setAttribute 的 key 值
  • El 表达式对于四种域对象的查找顺序

    pageContext > request > session > application

    按以上顺序找,找到则立即返回数据;如果到 application 也没找到,则返回 null

<%
    session.setAttribute("num", 25);
    pageContext.setAttribute("num", 10);
%>
${num}
//结果:10
  • 指定作用域查找

    page Context: ${pageScope.name}

    request: ${requestScope.name}

    session: ${sessionScope.name}

    application ${applicationScope.name}

<%
    session.setAttribute("num", 25);
    pageContext.setAttribute("num", 10);
%>
${sessionScope.num} - ${pageScope.num}
//结果:25 - 10
  • 执行表达式
<%
    pageContext.setAttribute("num1", 25);
    pageContext.setAttribute("num2", 10);
    pageContext.setAttribute("bool1", true);
    pageContext.setAttribute("bool2", false);
%>
${num1 > num2} - ${bool1 && bool2}
//结果:true - false

javaBean

javaBean 可以将现实中的一个实体,包括属性和操作封装成一个对象。 JSP 中通过 jsp:useBean 、 jsp:setProprety 、 jsp:getProprety 对它进行实例化、赋值和存取操作。

通过 JavaBean 可以很好地实现逻辑封装、代码重用、和维护。

JavaBean 作为一个特殊的类,需要满足一下规范:

  1. JavaBean 类是一个 public 类;
  2. JavaBean 类若有构造方法,必须是无参构造方法;
  3. JavaBean 所有的属性定义为私有(private);
  4. JavaBean 类中定义的属性用 setXxx() , getXxx() 方法进行操作;

jsp:useBean

  • 语法

jsp:setProperty

获取表单数据存储到类

  • 语法

jsp:getProperty

获取Bean对象存储的数据,或者类方法数据

  • 语法

    如果调用是类的方法则需要在类方法前面加 get 关键词

    //求总分
    public double getcount() {
      return yuwen + shuxue + yingyu;
    }
    
    //求平均分
    public double getavgScore() {
      return getcount() / 3;
    }

    然后调用的时候不需要添加 get 关键词

    平均分:
    总分:

jsp:forward

将数据转发到其他页面

  • 语法

    带一些设定的变量

    
      
      
    

jsp:include

引入其他页面

  • 语法

Servlet

  • Servlet 在 Java Web 应用中的作用是

    1. 处理请求
    2. 返回响应
      • 通过 response 中的 printwriter 对象直接输出
      • 跳转页面
  • Servlet 生命周期过程包括:

    1. 加载:一个类对 java 虚拟机正常加载(第一次请求时)
    2. 实例化:创建 Servlet 对象(第一次请求时)
    3. 初始化:调用 Servlet 的初始化方法(第一次请求时)
    4. 服务:doset、dopost 处理请求的方法等(每次执行)
    5. 销毁:destroy 在服务器停止时 Servlet 将自己的实例销毁(服务器停止时)
  • Servlet 过程测试

package com.wdnmd.Servlet;

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

@WebServlet("/test")
public class test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    static {
        System.out.println("Servlet被加载了...");
    }

    public test() {
        System.out.println("Servlet被实例化了...");
    }

    public void init(ServletConfig config) throws ServletException {
        System.out.println("Servlet被初始化了...");
    }

    public void destroy() {
        System.out.println("Servlet被销毁了...");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet执行了 doGet...");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet执行了 doPost...");
    }

}

JSTL

JSP Standard Tag Library JSP标准标签库,JSP为开发者提供的一系列的标签,使用这些标签可以完成一些逻辑处理,比如循环遍历集合,让代码更加简洁,不再出现JSP脚本穿插的情况。

实际开发中EL和STL结合起来使用,JSTL侧重于逻辑处理,EL负责展示数据。

STL的使用

  1. 需要导入jar包(两个 jstl.jar standard.jar)存放的位置 web/WEB-INF/lib

    点我下载

  2. 在JSP页面开始的地方导入STL标签库

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JDBC

导入 jar 包 mysql-connector-java-8.0.21.jar

下载地址:点我进入

操作系统选择 Platform Independent ,下载 zip 压缩包,提取压缩包里面的 jar 文件即可

  • 将 jar 包添加至项目

    前往项目的 WEB-INF - lib 文件夹,将 jar 包拷贝到此文件夹下

    右键 jar 包,选择 Build Path - Add to Build Path来添加到构建路径

连接数据库 Class

package com.wdnmd;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

// 连接 mysql 数据库
public class DB {
    //驱动类名
    private static final String DRVERNAME = "com.mysql.jdbc.Driver";
    //数据库地址
    private static final String URL = "jdbc:mysql://localhost:3306/javaWeb";
    //数据库账号
    private static final String NAME = "javaWeb";
    //数据库密码
    private static final String PASSWORD = "20181119";

    //加载驱动
    static {
        try {
            Class.forName(DRVERNAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //获取数据库连接
    public static Connection GetConnection() {
        Connection conn= null;
        try {
            conn = DriverManager.getConnection(URL, NAME, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    //测试连接
    public static void main(String[] args) {
        Connection conn = GetConnection();
        System.out.println("连接对象为:" + conn);
    }
}
说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...