JSP,EL表达式,JSTL标签
题干:计算1到10的阶乘
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qd8pVIK4-1569671037732)(./阶乘.jpg)]
jsp脚本的应用
1.实现阶乘逻辑
2.在jsp中输出结果
1.jsp脚本
2.jsp内置输出对象
1.创建jsp页面,使用脚本定义阶乘的方法
2.使用脚本来执行刚才定义的方法并且把方法获取的结果通过jsp的内置对象out输出到页面上
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
计算1~10的阶乘
<%!
public int factorial(int n){
int sum = 1;
for(int i=1;i<=n;i++){
sum=sum*i;
}
return sum;
}
%>
计算1~10的阶乘
<%
int result = 1;
for (int i = 1; i <= 10; i++) {
result = factorial(i);
out.println(i+"的阶乘为:\t"+result+"
");
}
%>
题干:请将字符串(“张三”,“张三”,“李四”,“王五”)存储到四大域(pageContext,request,session,ServletContext)中,要求最终展示数据的时候,并且在jsp页面中进行展示,如果4个字符串的名字在存的时候key统一定义为username
掌握从域中存储数据和获取数据
1.数据该通过怎样的方式进入到域中
2.往域中存数据的时候能存哪些类型的数据
3.如果在不同域中存入相同key不同value的情况下如何获取对应的值
调用域对象的setAttribute(key,value)方法进行存值
在jsp页面中使用EL表达式进行值得获取
1.在jsp页面中通过脚本调用4大域对象的setAttribute(“username”,值)
2.使用el表达式 ${域.key} 获取对应的值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
//在域中存储数据
pageContext.setAttribute("username","张三");
request.setAttribute("username","张三");
session.setAttribute("username","李四");
application.setAttribute("username","王五");
%>
从域中获取值
${pageScope.username}
${requestScope.username}
${sessionScope.username}
${applicationScope.username}
${name}
注意:
如果不跟域的范围默认从最小的域开始逐层网上查找~
``
## 题目3(巩固训练)
题干:将若干教师对象存入ArrayList集合中,并将集合保存到request域中,最后打印第二个老师的相关信息,注意,实体类是Teacher,有name和major-subject两个属性
姓名:赵老师, 专业:javase
姓名:钱老师, 专业:javaee
姓名:孙老师, 专业:php
姓名:李老师, 专业:python
### 训练目标
使用EL表达式获取对象的属性值(包括特殊属性)
### 训练提示
1.数据该通过怎样的方式进入到域中?
2.如何获取域中存入的集合中指定元素的属性?
### 参考方案
### 操作步骤
1.需要定义Teacher类,将老师信息进行封装
2.将所有老师保存到集合中,将集合存入request域
3.使用el表达式获取集合,同时操作集合中的第2个元素,展示响应属性
### 参考答案
tearcher.jsp
<%@ page import="com.itheima.domain.Teacher" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
teacher
<%
ArrayList list = new ArrayList<>();
list.add(new Teacher("赵老师","JAVASE"));
list.add(new Teacher("钱老师","JAVAEE"));
list.add(new Teacher("孙老师","PYTHON"));
list.add(new Teacher("刘老师","GO"));
request.setAttribute("list", list);
%>
第二位老师的信息如下
姓名: ${list[1].name}
学科: ${list[1]["major_subject"]}
Teacher.java
package com.itheima.domain;
public class Teacher {
private String name;
private String major_subject;
public Teacher(String name, String major_subject) {
this.name = name;
this.major_subject = major_subject;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor_subject() {
return major_subject;
}
public void setMajor_subject(String major_subject) {
this.major_subject = major_subject;
}
}
## 题目4(综合扩展)
题干:现有一个JavaBean User对象 name属性值为张三 age属性值为20 sex属性值为1
现有需要,我需要在jsp页面中对用户信息进行页面的显示,其中sex为1代表性别女,sex为0代表性别男
现有代码模板,请完成上述功能
<%@ page import=“com.itheima.domain.User” %>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
package com.itheima.domain;
public class User {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public User(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
### 训练目标
jstl的标签
### 训练提示
1.使用EL表达式获取用户相关信息
2.将相关信息在页面上做显示
3.展示性别的时候要注意了,要根据sex的值做判断,0代表男,1代表女,所以要在这里做区分
4.展示性别的时候要根据性别在具体的表单标签上显示 支持else的逻辑么?如果不支持我们该怎么办呢?
### 参考方案
### 操作步骤
1.将实体类和jsp页面放入具体目录中
2.在姓名和年龄对应的input标签的value属性上设置值${user.name} 和${user.age}
3.设置性别第一件事先判断是男还是女,需要借助jstl的标签,判断的标准是,0男 1女
//男
//女
4.如果是男,则男对应的input需要设置checked属性,如果是是女则需要将女对应的input设置checked属性
性别为男的时候处理方式如下`
男
女
### 参考答案
show.jsp
<%@ page import="com.itheima.domain.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Title
<%
User u = new User("张三",20,"1");
request.setAttribute("user",u);
%>
现有user对象,请在下列表单中完成具体数据的填充
用户信息如下~
## 题目5(综合案例)
题干:现有下列数据,为方便,可以将每条数据封装到一个JavaBean中
Headset(int id,String brand,double price,String name,String desc)
(1,'森海塞尔',1899,'ie80','很好耳机'),
(2,'Beats',2288,'Beats Studio Wireless','装逼神器'),
(3,'森海塞尔',599,'Momentum In-Ear','还算不错的耳机'),
(4,'小米',129,'圈铁Pro','129 超高性价比'),
(5,'森海塞尔',89,'MX400 II','入门级耳机'),
(6,'森海塞尔',519999,'ORPHEUS二代','奢侈品')
需求:
1.将数据在jsp页面上已表格的形式展示出来
2.将展示的表格实现隔行换色的效果(奇数行红色,偶数行绿色)
效果图如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xgjzptw6-1569671037735)(./jstl.jpg)]
### 训练目标
1.使用el表达式获取值jsp上做展示
2.使用jstl的标签进行循环遍历
3.使用jstl的标签做逻辑判断
### 训练提示
1.如何使用el表达式获取指定对象的指定属性值?
2.如何使用jstl标签库中的标签进行循环遍历
3.在遍历每条数据的时候,如何使用jstl标签库中的标签进行逻辑判断
### 参考方案
### 操作步骤
1.创建list.jsp,通过脚本创建集合保存对应实体Headset数据
2.在页面中使用jstl的对获取的集合数据做循环遍历
3.嵌套表格并且把数据做对应显示
4.在循环遍历过程中判断,如果是奇数行,让对应的tr背景色变为红色,如果偶数行则变为绿色
### 参考答案
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.itheima.domain.Headset" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
jstl练习题
<%
ArrayList list = new ArrayList<>();
list.add(new Headset(1, "森海塞尔", 1899, "ie80", "很好耳机"));
list.add(new Headset(2, "Beats", 2288, "Beats Studio Wireless", "装逼神器"));
list.add(new Headset(3, "森海塞尔", 599, "Momentum In-Ear", "还算不错的耳机"));
list.add(new Headset(4, "小米", 129, "圈铁Pro", "129 超高性价比"));
list.add(new Headset(5, "森海塞尔", 89, "MX400 II", "入门级耳机"));
list.add(new Headset(6, "森海塞尔", 519999, "ORPHEUS二代", "奢侈品"));
request.setAttribute("list", list);
%>
表格展示
编号
品牌
型号
价格
描述
${s.count}
${headSet.brand}
${headSet.name}
${headSet.price}
${headSet.desc}
${s.count}
${headSet.brand}
${headSet.name}
${headSet.price}
${headSet.desc}
## 题目7(代码修正)
题干:下面代码存在问题,导致程序出现异常,请排查错误原因并改正,改正后保证代码能够正确运行!
运行结果:
页面显示空白,正常情况下页面应该显示4为偶数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
if标签
<%
request.setAttribute("number",4);
%>
${number}为偶数
### 训练目标
jstl在配合el表达式的时候注意事项
### 训练提示
访问jsp时看看页面源代码
### 参考方案
### 操作步骤
1.运行代码的时候右键看下源代码
2.查看讲课笔记,不要遗漏任何特殊符号~
3.jstl标签标签的test属性和el表达式之间有一个空格
4.去掉空格看看效果
### 参考答案
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
if标签
<%
request.setAttribute("number",4);
%>
<%--请记住:jstl标签属性和el表达式之间一定不要出现空格--%>
${number}为偶数
tml>
jstl在配合el表达式的时候注意事项
访问jsp时看看页面源代码
1.运行代码的时候右键看下源代码
2.查看讲课笔记,不要遗漏任何特殊符号~
3.jstl标签
4.去掉空格看看效果
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
if标签
<%
request.setAttribute("number",4);
%>
<%--请记住:jstl标签属性和el表达式之间一定不要出现空格--%>
${number}为偶数