JSP

页面文件,不需要修改过代码就得去重启服务器

image-20210830192219853

JSP执行过程

image-20210830193017355

JSP文件内容

他实际上就是一个Servlet,他是通过上面使用的方法使内容输出到页面上的,这些可以通过查看这个JSP文件生成的java代码就可以发现

JSP语法

  • 标签

    JSP的标签和html的标签是一样的

  • JSP注释

    <%-- 注释的内容   --%>
    
  • Java代码块

    <% java代码 %>
    
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>语法</title>
    </head>
    <body>
        <%
            System.out.println("Hello jSP");//输出在控制台上面,普通的输出语句
            /*
            out是JSPWriter对象,输出在页面上
             */
            out.println("helloJSP");//显示在页面上,但是在页面上还是不能实现换行,要想换行,还是的使用<br>进行换行,需要放在字符串后面:out.println("helloJSP<br>");
        %>
    </body>
    </html>
    
  • JSP表达式

    /*
    语法糖
    */
    <%=表达式%>
    
    <%--    相当于out.println("helloJSP");--%>
        <%="hello"%>
    
  • 声明

    <%!声明的变量或方法%>
    
    <%--jsp中的声明:如果加!代表的是声明的成员变量
        			不加!代表的是声明的是局部变量--%>
    <%!String s="abc";%>
    

JSP指令

  • page指令

    <%@ page 属性名="属性值" 属性名="属性值"...%>
    
    <%@ page contentType="text/html;charset="UTF-8" language="java" %>
    

image-20210830195602389

  • include指令:可以包含其他页面

    有点相对于一个java类从开一个java类中获取他的变量等内容,比如导入共同的内容:导入footer和header的页面

    <!@ include file="包含的页面" %>
    
 <%@include file=“head.jsp”%>
<%@include file=“foot.html”%>等
  • taglib指令:可以引入外部标签库

    <%@ taglib uri=标签库的地址 prefix =前缀名称%>
    

JSP九大隐式对象(内置对象)

  • 九大隐式对象:有一些对象是不需要自己去创建的,而是在这个页面中本身就携带的对象,我们可以对这些对象直接的使用,一共有九个,我们可以借助下面的对象名就能够直接使用,并不需要自己去创建

image-20210830200748170

内置对象名称 说明
request 请求对象
response 响应对象
pageContext 页面上下文对象
session 会话对象
application 应用程序对象
out 输出对象
config 配置对象
page 页面对象
exception 异常对象
  • PageContext对象
    • 是JSP独有的, Servlet中没有。
    • 四大域对象之一的页面域对象 ,还可以操作其他三个域对象中的属性。
    • 还可以获取其他八个隐式对象。
    • 生命周期是随着JSP的创建而存在,随着JSP的结束而消失。每个JSP页面都有一个PageContext对象。

request请求对象

request与Response请求对象详细介绍

Cookie和Session对象

其他内置对象

四大域对象

image-20210830201420875

MVC模型

  • M(Model) :模型。用于封装数据,封装的是数据模型!
  • V(View) :视图。用于显示数据,动态资源用JSP页面,静态资源用HTML页面!
  • C(Controller) :控制器。用于处理请求和响应,例如Servlet !

image-20210830201929242

JavaWeb四层结构详解

案例

登录功能

  • 1.创建–个web项目。
  • 2.在web目录下创建一个index.jsp.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>JSP</title>
  </head>
  <body>
  <% Object username = session.getAttribute("username");
      if (username == null){
  %>
      <a href="/demo/login.jsp">请登录</a>
  <%} else {%>
      <a href="/demo/addStudent.jsp">添加学生</a>
      <a href="/demo/listStudentServlet">显示学生</a>
  <%}%>
  </body>
</html>
  • 3.在页面中获取会话域中的用户名,获取到了就显示添加和查看功能的超链接,没获取到就显示登录功能的超链接。
  • 4.在web 目录下创建一个login.jsp。实现登领面。
<%--
  Created by IntelliJ IDEA.
  User: yyadmin
  Date: 2021/8/30
  Time: 20:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>学生登录</title>
</head>
<body>
    <form action="/demo/loginStudentServlet" method="get" autocomplete="off">
        姓名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <button type="submit">登录</button>
    </form>
</body>
</html>
  • 5.创建LoginServlet ,获取用户名和密码。
  • 6.如果用户名为空,则重定向到登录顽面。
  • 7.如果不为空,将用户名添加到会话域中,再重定向到首页。
@WebServlet("/loginStudentServlet")
public class LoginStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取用户名和密码
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //2.判断用户名
        if (username == null || "".equals(username)){
            //2. 1用户名为空重定向到登录页面
            resp.sendRedirect("/demo/login.jsp");
            return;
        }
        //2. 2用户名不为空将用户名存入会话域中
        req.getSession().setAttribute("username",username);
        //3.重定向到首页index. jsp
        resp.sendRedirect("/demo/index.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

添加功能

  • 1.在web目录下创建一 个addStudent.jisp,实现添加学生的表单项。
<%--
  Created by IntelliJ IDEA.
  User: yyadmin
  Date: 2021/8/30
  Time: 20:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加学生</title>
</head>
<body>
    <form action="/demo/addStudentServlet" method="get" autocomplete="off">
        学生姓名:<input type="text" name="username"><br>
        学生年龄:<input type="number" name="age"><br>
        学生成绩:<input type="number" name="score"><br>
        <button type="submit">保存</button>
    </form>
</body>
</html>
  • 2.创建AddStudentServlet ,获取学生信息并保存到文件中。

  • 3.通过定时刷新功能2秒后跳转到首页。

package com.yy.Servlet;

import com.yy.bean.Student;
import com.yy.bean.Student1;

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

/**
 * @author Marston
 * @date 2021/8/30
 */
@WebServlet("/addStudentServlet")
public class AddStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取表单数据
        String username = req.getParameter("username");
        String age = req.getParameter("age");
        String score = req.getParameter("score");
        //获取学生对象并赋值
        Student1 stu = new Student1();
        stu.setUsername(username);
        stu.setAge(Integer.parseInt(age));
        stu.setScore(Integer.parseInt(score));
        //封装学生对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\testNomal\\FileTest\\stu.txt",true));
        bw.write(stu.getUsername()+","+stu.getAge()+","+stu.getScore());
        bw.newLine();
        bw.close();
        //通过定时刷新功能响应给浏览器
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("添加成功。2秒后返回首页...");
        resp.setHeader("Refresh","2,URL=/demo/index.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

查询功能

  • 1.创建ListStudentServlet ,读取文件中的学生信息到集合中。
  • 2.将集合添加到会话域中。
  • 3.定向到listStudent.jsp页面上。
@WebServlet("/listStudentServlet")
public class ListStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建字符输入流对象,关联对其的文件
        BufferedReader br = new BufferedReader(new FileReader("E:\\testNomal\\FileTest\\stu.txt"));
        //创建集合对象
        ArrayList<Student1> list = new ArrayList<>();
        //循环读取文件中的内容
        String line;
        while ((line=br.readLine()) != null){
            Student1 stu = new Student1();
            String[] arr = line.split(",");
            stu.setUsername(arr[0]);
            stu.setAge(Integer.parseInt(arr[1]));
            stu.setScore(Integer.parseInt(arr[2]));
            list.add(stu);
        }
        //将集合对象存入回话域
        req.getSession().setAttribute("students",list);
        //重定向到学生列表页面
        resp.sendRedirect("/demo/listStudent.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
  • 4.在web目录下创建一个listStudent.jsp.
  • 5.定义表格标签。在表格中获取会话域的集合数据,将数据显示在顽面上。
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.yy.bean.Student1" %><%--
  Created by IntelliJ IDEA.
  User: yyadmin
  Date: 2021/8/30
  Time: 21:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查看学生</title>
</head>
<body>
    <table width="600px" border="1px">
        <tr>
            <th>学生姓名</th>
            <th>学生年龄</th>
            <th>学生成绩</th>
        </tr>
        <% ArrayList<Student1> student1s = (ArrayList<Student1>)session.getAttribute("students");
            for (Student1 s : student1s){
        %>
        <tr>
            <td><%=s.getUsername()%></td>
            <td><%=s.getAge()%></td>
            <td><%=s.getScore()%></td>
        </tr>
        <%}%>
    </table>
</body>
</html>
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐