javaweb之jsp详解

课堂代码jsp代码(java写到前端里)
<%@ page import="model.stu" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: 86173
  Date: 2024/8/1
  Time: 11:12
  To change this template use File | Settings | File Templates.
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



<%--把java加入前端里面 前端里的java的代码要用<% %>包起来--%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    System.out.println("8888888888888");
    List<stu> stulist = (List<stu>) request.getAttribute("stulist");
%>
<h1>学生信息管理展示</h1>
<table cellpadding="3" cellspacing="0" border="1" align="center">
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作1</th>
        <th>操作2</th>
    </tr>
    <%
        for (int i = 0; i < stulist.size(); i++) {
    %>
    <tr>
        <td>
            <%--            等于号是给值操作--%>
            <%=stulist.get(i).getId()%>
        </td>
        <td>
            <%--            等于号是给值操作--%>
            <%=stulist.get(i).getName()%>
        </td>
        <td>
            <%--            等于号是给值操作--%>
            <%=stulist.get(i).getAge()%>
        </td>
        <td><a href="delone?Sno=<%=stulist.get(i).getId()%>" onclick="return confirm('确认删除吗?');">删除</a></td>
        <td><a href="updateshow?id=<%=stulist.get(i).getId()%>">更新</a></td>
    </tr>

    <%
        }
    %>

</table>
</body>
</html>





课堂java代码,和jsp代码进行对比(前端写到java里)

package UI;

import model.stu;
import model.student;

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.Console;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
//登录成功的展示页面
/**
 * 服务器端渲染生成信息展示页面
 * 以表格的形式展示数据
 */
@WebServlet("/showlist")
public class ShowList extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //先请求
        req.setCharacterEncoding("utf-8");
        //再响应
        resp.setContentType("text/html;charset=utf-8");

        //1. servlet类
        List<stu> stulist = (List<stu>) req.getAttribute("stulist");

//        System.out.println("信息列表");
//动态生成前段页面
        PrintWriter writer = resp.getWriter();

        writer.write("<!Doctype html");
        writer.write("<html>");
        writer.write("<head>");
        writer.write("</head>");
        writer.write("<body style='background:lightyellow;'>");
        writer.write("<h1>学生信息展示页面</h1>");
        writer.write("<h3><a href='insert'>录入信息按钮</a><h3>");
        writer.write("<table cellpadding='3' cellspacing='0' border='1' align='center'>");
        writer.write("<tr><th>ID</th><th>姓名</th><th>年龄</th><th>操作1</th><th>操作2</th></tr>");

        for (int i = 0; i < stulist.size(); i++) {
            writer.write("<tr>");
            writer.write("<td>" + stulist.get(i).getId() + "</td>");
            writer.write("<td>" + stulist.get(i).getName()+ "</td>");
            writer.write("<td>" + stulist.get(i).getAge()+ "</td>");
            writer.write("<td><a onclick=\"if(confirm('确认删除么?'))return true;return false;\" href=delone?id=" + stulist.get(i).getId() +">删除</a></td>");
            writer.write("<td><a  href=updateshow?id=" + stulist.get(i).getId() +">更新</a></td>");
            writer.write("</tr>");
        }
        writer.write("</table>");
        writer.write("</body>");
        writer.write("</html>");
    }
}

1、什么是JSP
Java Server Pages:Java服务器端页面,也和servlet一样,用于动态web技术
和HTML很像
JSP页面中可以嵌入JAVA代码,为用户提供动态数据
2、JSP原理
JSP最终也会被转换成为一个Java类!
JSP本质上就是一个servlet
//Jsp三个方法
public void _jspInit(){
  //初始化
}
public void _jspDestroy(){
  //销毁
}
public void _jspService(HttpServletRequest request,HttpServletResponse response){
  //JSP服务
}
1)判断请求
2)内置一些对象
在JSP中一共预先定义了9个这样的对象,分别为request、response、session、application、out、pageContext、config、page和exception 。
这些对象在jsp中可以直接用
理解:jsp提供给我们让我们更简化的编写网页,但其本质就是一个servlet,是一个java。
JSP页面---->转换 将JSP页面转换为Java文件---->xxx_jsp.java ---->编译----->xxx_jsp.class(这就是一个servlet)
在jsp页面中,只要是java代码就会原封不动的输出,如果是HTML代码,就会转换为out.write(“ xxx”)相当于现在的页面是用java写出来的(本质),虽然我们写的是jsp(很像html)但是它会被jsp转化为servlet
3、JSP基础语法
1)依赖
<dependencies>
        <!-- Servlet 依赖 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- JSP依赖 -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <!--JSTL表达式的依赖 -->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- standard标签库 -->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
2)基础语法
jsp作为java技术的一种应用,它拥有一些自己扩充的语法(了解),java所有语法都支持
jsp表达式
<%--  jsp表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式%>
--%>
<%= new java.util.Date()%>
脚本片段
<%--  jsp脚本片段--%>
<%
  int sum = 0;
  for (int i = 1;i<100;i++){
    sum+=i;
  }
  out.println("<h1>Sum="+sum+"</h1>");
%>
html和java代码嵌套
<%
  int x = 10;
  out.println(x);
%>
<p>这是一个jsp文档</p>
  <%
  out.println(x);
  %>
<hr>
<%--在代码嵌入HTML元素--%>
  <%
    for (int i = 0; i < 5; i++) {
  %>
<h1>hello,java<%= i%></h1>
<%
  }
%>
JSP声明
<%!
    static {
    system.out.println("Loading Servlet!");
    }
    private int globalvar = 0;
    public void kuang(){
    system.out.println("进入了方法kuang!");
    }
 %>   
jsp声明:会被编译到JSP生成java的类中!其他的,就会被生成到_jspService方法中!
jsp的注释不会在客户端显示,但是html的注释会显示
4、指令
定制错误页面
<%--定制错误页面--%>
<%@ page errorPage="error/500.jsp" %>
<head>
    <title>Title</title>
</head>
<body>
<%
    int x = 1/0;
%>
  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<img src="../img/500.png" alt="500">
导包
<%@ page import="java.util.Date" %>
1
其他指令
<%--显式的声明这是一个错误页面--%>
<%@ page isErrorPage="true" %>
<%--包含其他页面,将两个页面合二为一--%>
<%@ include file="index.jsp"%>
九大内置对象
PageContext
Request
Reponse
Session 存东西
Application [ServletContext]存东西
config
out
page
exception
四个内置对象及其作用域
<%--内置对象--%>
<%
 pageContext.setAttribute("name1", "1号");   //保存的数据只在一个页面中有效
 request.setAttribute("name2","2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
 session.setAttribute("name3","3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
 application.setAttribute("name4","4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
<%--    通过pageContext取出我们保存的值
从底层到高层(作用域):page-->request-->session-->application 还找不到就null
脚本片段中的代码,会被原封不动生成到.JSP.java,要求:这里面的代码:必须保证Java语法的正确性
--%>
<%
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");//不存在,取不到
%>
<%--使用EL表达式输出  ${}--%>
<h1>取出的值为</h1>
<h2>${name1}</h2>
<h2>${name2}</h2>
<h2>${name3}</h2>
<h2>${name4}</h2>
<h2>${name5}</h2>
pageContext实现转发
 pageContext.forward("/index.jsp");
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的;
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,如:购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还能使用,比如:聊天数据。
6、JSP标签、JSTL标签、EL表达式
需要导入的依赖
 <!--JSTL表达式的依赖 -->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- standard标签库 -->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
1)EL表达式:${}
获取数据
执行运算
获取web开发的常用对象
2)JSP标签:
<%--jsp:forward page-""  : 转发到某一个页面--%>
<jsp:forward page="/jsptag2.jsp">
    <jsp:param name="name" value="xqh"></jsp:param>
    <jsp:param name="age" value="18"></jsp:param>
</jsp:forward>
<%--取出参数--%>
名字:<%=request.getParameter("name")%>
年龄:<%=request.getParameter("age")%>
3)JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签,可以供我们使用,标签的功能和java代码一样!
标签库:
核心标签
格式化标签
SQL标签
XML标签
4)JSTL标签库使用步骤
引入对应的taglib
使用其中的方法
if如果
<h4>if测试</h4>
<hr>
<form action="coreif.jsp"method="get">
<%--    EL表达式获取表单中的数据
        ${param.参数名}
--%>
    <input type="text"name="username"value="${param.username}">
    <input type="submit"value="登录">
</form>
<%--判断如果提交的用户名是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
    <c:out value="管理员欢迎你!"/>
</c:if>
<c:out value="${isAdmin}"/>
switch选择
<%--定义一个变量score,值为85  先判断第一个如果符合,直接满足第一个,不会往下判断--%>
<c:set var = "score" value="85"/>
<c:choose>
    <c:when test="${score>=80}">
        你的成绩不错
    </c:when>
    <c:when test="${score>=90}">
        你的成绩优秀
    </c:when>
    <c:when test="${score>=70}">
        你的成绩良好
    </c:when>
    <c:when test="${score<=60}">
        你的成绩很差
    </c:when>
</c:choose>
foreach遍历
<%
    ArrayList<String>people = new ArrayList<>();
    people.add(1,"张三");
    people.add(2,"李四");
    people.add(3,"王五");
    people.add(4,"赵六");
    people.add(5,"田七");
    request.setAttribute("list",people);
%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/> <br>

</c:forEach>

1.EL表达式代码(加入标签的使用)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="model.stu" %>
<%@ page import="java.util.List" %>
<%@ page import="model.User" %>
<%@ page import="dao.JdbcTool" %><%--
  Created by IntelliJ IDEA.
  User: 86173
  Date: 2024/8/2
  Time: 10:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <meta charset="utf-8">
</head>
<body>
<%
    List<stu> stulist= JdbcTool.select("select * from stu ", stu.class);


    System.out.println("进入showlist5");
//    List<stu> stulist = (List<stu>) request.getAttribute("stulist");
%>
<h1>学生信息管理展示</h1>
<table cellpadding="3" cellspacing="0" border="1" align="center">
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作1</th>
        <th>操作2</th>
    </tr>
<%--    <c:forEach items="${requestScope.stulist}" var="stulists">--%>
        <c:forEach items="${requestScope.stulist}" var="stulists">

        <tr>
            <td>
                    ${stulists.id}
            </td>
            <td>
                    ${stulists.name}

            </td>
            <td>
                    ${stulists.age}
            </td>
            <td><a href="delone?Sno=   ${stulists.id}" onclick="return confirm('确认删除吗?');">删除</a></td>
            <td><a href="updateshow?id=   ${stulists.id}">更新</a></td>
        </tr>

    </c:forEach>


</table>
</body>
</html>

2 普通jsp代码
 

<%@ page import="model.stu" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: 86173
  Date: 2024/8/1
  Time: 11:12
  To change this template use File | Settings | File Templates.
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


<%--把java加入前端里面 前端里的java的代码要用<% %>包起来--%>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%
    System.out.println("8888888888888");
    List<stu> stulist = (List<stu>) request.getAttribute("stulist");
%>
<h1>学生信息管理展示</h1>
<a href="logout">退出系统</a>
<a href="zhuce1">注册账户</a>
<%--<h1>学生信息展示页面</h1>--%>
<h3><a href='insert'>录入信息按钮</a>
    <h3>
        <table cellpadding="3" cellspacing="0" border="1" align="center">
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>操作1</th>
                <th>操作2</th>
            </tr>
            <%
                for (int i = 0; i < stulist.size(); i++) {
                    System.out.println("stulist.get(i).getId() = " + stulist.get(i).getId());
            %>
            <tr>
                <td>
                    <%--            等于号是给值操作--%>
                    <%=stulist.get(i).getId()%>
                </td>
                <td>
                    <%--            等于号是给值操作--%>
                    <%=stulist.get(i).getName()%>
                </td>
                <td>
                    <%--            等于号是给值操作--%>
                    <%=stulist.get(i).getAge()%>
                </td>
                <td><a href="delone?id=<%=stulist.get(i).getId()%>" onclick="return confirm('确认删除吗?');">删除</a></td>
                <td><a href="updateshow?id=<%=stulist.get(i).getId()%>">更新</a></td>
            </tr>

            <%
                }
            %>

            
        </table>
</body>
</html>






【资料】EL表达式中,param和requestScope的区别

在看param和requestScope之前,不妨先了解下在java下request的情况:
1. request对象通常用来接收客户端提交到服务端的数据,如:在servlet或者action中可以用request.getParameter()的方法获取获取参数内容;
2. requestScope通常是在servlet或者action的服务端中通过request.setAttribute()方法把数据放到request对象中供客户端获取,然后客户端获取的方法就是requestScope.getAttribute()。
1. getParameter:
可以获取URL中传递过来的String参数,如:http://www.baidu.com?username=abc 中的abc;
提示:对于POST/GET提交的表单,在服务器端我们都可以通过request.getParameter获取表单中的值。
当我们在进行一个请求重定向(redirect)的时候,我们可以通过request.setParameter传递参数,如果用request.setAttribute在重定向页面是取不到值的。
(待验证,因为HttpServletRequest中没有setParameter方法。)
2. getAttribute:
获取的是一个对象(Object)。
当我们进行一个请求转发(forward)的时候,可以使用request.setAttribute传递参数。
3. requestScope作为El表达式中的使用:
是EL表达式中的一个隐含对象,类似request,如:${requestScope.username} 表示在request域中取得username属性所对应的值,相当于request.getAttribute(“username”)。
4. param,El表达式中的使用:
${param.username} 可理解为:request.getParameter(“username”);
结论:
${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获取的内容,这些内容都是String的。
  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值