课堂代码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的。
${requestScope.name} 等价于 request.getAttribute("name"),一般是从服务器传递结果到页面,在页面中取出服务器端保存的值!
【资料链接】
【资料链接】