Java EE Web部分--05.JSP、EL、JSTL

学习目标

JSP (Java Server Pages)

EL ( Expression Language )

JSTL (The JavaServer Pages Standard Tag Library)

一、JSP

1、概述

JSP全名为Java Server Pages 、java服务器页面。既能写html代码、又能写Servlet、其本质是一个简化的Servlet。

创建:如图idea

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

Title


 

2、jsp原理

当我们通过浏览器访问到jsp页面、最终访问的是tomcat服务器中的jsp页面。下面我们可以通idea发布web项目。

当启动tomcat时可看到下面的信息

 C:\Users\root\.IntelliJIdea2018.2\system\tomcat\Tomcat_8_5_31_day10Ajax\work\Catalina\localhost\ROOT\org\apache\jsp

 

  打开index_jsp.java文件后,发现我们在JSP页面上写的代码都在_jspService方法中:

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

Title


<%--response.getWriter().println()任意数据response.getWriter().write//只能输出字符  字符数组 字符串
--%>
<%response.getWriter().println("hello jsp");response.getWriter().write(65);
%>

 

response.getWriter().write(65);输出的是A。A的ASCII是65。

3.2、脚本声明<%! java代码 %>

声明成员方法和属性  demo3.jsp

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

Title


<%--
成员变量 int num = 0;public void method(){}
--%>
<%!int num = 10;public void method(){}
%>

【被翻译后的代码】成员变量

3.3、脚本表达式<%=内容%>

脚本表达式的格式:<%= 内容 %> 等价于:out.print(内容)

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

Title


<%out.println("hello out");response.getWriter().println("response");
%>
<%="我爱JAVA"%>

@WebServlet("/loginServletin")
public class LoginInServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//解决中文乱码问题request.setCharacterEncoding("utf-8");//获取用户名和密码String username = request.getParameter("username");String password = request.getParameter("password");//使用service层来解决业务逻辑UserServiceIn serviceIn = new UserServiceInImpl();boolean result = serviceIn.login(username,password);if (result){//登陆成功  需要携带数据//使用 重定向
//            request.getRequestDispatcher("/success.html").forward(request,response);response.sendRedirect("/success.html");}else {//登陆失败  应用去login.html//希望用户得到 登陆错误信息//使用转发  servlet处理业务太多了,代码臃肿问题request.setAttribute("msg","用户名或者密码错误");request.getRequestDispatcher("/login.jsp").forward(request,response);}}
}

login.jsp登录页


<%
//    String str = (String) request.getAttribute("msg");
%>

当登录出错时会显示如下 

 

二、EL表达式

1、概述


<%--
EL表达式 page  request  session  application 四大域对象
--%>
<%pageContext.setAttribute("pageValue","page的值");request.setAttribute("requestValue","request的值");request.getSession().setAttribute("sessionValue","session的值");application.setAttribute("applicationValue","applicatin的值");
%>
<%--
EL表达式来域对象中取值
--%>
page中取值:${pageScope.pageValue}
request中取值:${requestScope.requestValue}
session中取值${sessionScope.sessionValue}
application中取值${applicationScope.applicationValue}

2.3、EL表达式搜索数据

EL表达式取值的时候也可以不指定域,如果取值的时候不指定域对象。就会按照从page域--->request域--->session域--->servletContext域从小到大逐级根据name属性值查找。


<%pageContext.setAttribute("pageValue","page的值");request.setAttribute("requestValue","request的值");request.getSession().setAttribute("sessionValue","session的值");application.setAttribute("applicationValue","applicatin的值");pageContext.setAttribute("value","page的值");request.setAttribute("value","requst的值");
%>
<%--
默认从最小的域对象的范围-->最大域对象。
--%>
page中取值:${pageScope.pageValue}
page:${pageValue}
request中取值:${requestValue}
session中取值${sessionValue}
application中取值${applicationValue}
相同key:${value}

2.4、EL表达式cookie中取值

语法格式:${cookie.cookie名称.value} 取出单个cookie的值

java代码:CreateCookieServlet.java

@WebServlet("/create")
public class CreateCookieServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//创建cookieCookie cookieName = new Cookie("name","lisi");Cookie cookiePsw = new Cookie("password","1234");response.addCookie(cookieName);response.addCookie(cookiePsw);}
}

demo7.jsp


用户名:
密码:

先访问:http://localhost:8080/CreateCookieServlet 生成cookie

再访问demo07.jsp页面,使用EL表达式获取用户名和密码

http://localhost:8080/CreateCookieServlet

 

3、EL运算符

3.1 算术运算

​ 顾名思义,算术运算是进行算术运算的符号,主要包括:加,减,乘,除。具体使用如下表:

运算符说明使用示例结果
+${n1+n2}30
-${n1-n2}-10
*${n1*n2}200
/或div${n1/n2} 
%或mod取余  

3.2 关系运算

关系运算符是判断两个数据的大小关系的,关系运算符有:==,!=,<,<=,>,>=。具体使用方法如下:

运算符说明使用示例结果
== 或 eq等于 equal${n1 == n2}false
!= 或ne不等于 not equal${n1 != n2}true
> 或 gt大于 greater than${n1 > n2}false
>= 或ge大于等于 greater than or equal${n1 >= n2}false
< 或 lt小于 less than${n1 < n2}true
<= 或le小于等于 less than or equal${n1 <= n2}true

3.3 逻辑运算

逻辑运算符包括:&& ,||,!使用方法如下:

运算符说明使用示例结果
&& 或 and逻辑与${true && false}false
|| 或 or逻辑或`${true 
! 或 not${!false}true

3.4 三元运算

<%--表达式1?表达式2:表达式3
--%>
三元运算符:
${n1>=n2?"正确":"错误!"}

3.5 empty运算

empyt运算符对以下数据运算返回true:1. 字符串:"";
2. 空集合(size=0):List  list = new ArrayList();
3. 空对象(null):Student stu = null;

小结:

EL表达式小结:

  • EL:Expression Language;

  • EL语法:${ }

  • 作用:简化脚本表达式的取值,简化<%= request.getAttribute("name") %> ===> ${name}

  • jsp的四大域对象

    • page域:pageContext pageContext.setAttrubute() pageContext.getAttribute() JSP特有 作用范围:当前的JSP页面

    • requst域:request request.setAttribute() request.getAttribute() 作用范围:一次请求和响应之间

    • session域: session session.setAttribute() session.getAttribute() 作用范围:会话期间(多次请求和响应)

    • servletContext域:application application.setAttribute() application.getAttribute() 作用范围:整个项目;

  • jsp从四大域中取值(指定域对象):

    • ${pageScope.name}

    • ${requestScope.name}

    • ${sessionScope.name}

    • ${applicationScope.name}

  • JSP搜索域对象中的值:page --- request --- session --- servletContext

    • ${name}

  • 运算

    • 算术运算

    • 关系运算

    • 逻辑运算:&& || !

    • 三元运算

    • empty运算:empty not  empty

      • 空字符串:""

      • 空对象:null

      • 空集合:list.size = 0;

三、JSTL标签库

1、概述

Apache Jakarta小组开发了一套用于解决这些常用问题的自定义标签库,
这套标签库被SUN公司定义为标准标签库(The JavaServer Pages Standard Tag Library),简称JSTL。

2、安装使用JSTL

JSTL标签是将一段java代码功能封装成一个标签来使用。所以,我们使用JSTL标签之前必须导入被封装的java代码---jar包。JSTL标签库主要依赖以下两个jar包:

在JSP页面中通过以下标签,通过taglib标签引入JSTL资源:

 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
注意】1. prefix:是jstl标签在使用的时候的前缀;
2. uri:是标签库的资源路径;

 

3、常用JSTL标签

JSTL核心标签库

标签名称作用
通常用于输出一段文本内容到客户端浏览器
用于设置各种Web域中的属性
用于删除各种Web域中的属性
用于捕获嵌套在标签体中的内容抛出的异常
用户java代码if(){}语句功能
用于指定多个条件选择的组合边界,它必须与c:when和c:otherwise标签一起使用
用户代替java代码for循环语句
用户迭代操作String字符
给请求路径添加参数
重写url,在请求路径添加sessionid
用于在JSP页面中导入一个URL地址指向的资源内容
用于将当前的访问请求转发或重定向到其他资源

 格式:

标签的作用相当于java中的if判断语句。if(条件判断){}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title


<%session.setAttribute("user","username");
%>





遍历

属性如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title


<%--
使用EL表达式和JSTL将数据遍历出来,填放在标签里面
--%>惊爆价:${product.price}商品名称:${product.name}

ProductServlet.java

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.IOException;
import java.util.ArrayList;
import java.util.List;@WebServlet("/produceServlet")
public class ProduceServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//去数据库查询商品信息Product product1 = new Product(9.9,"布娃娃");Product product2 = new Product(99,"苹果");Product product3 = new Product(12000,"电脑");Product product4 = new Product(8,"鼠标");Product product5 = new Product(20,"杯子");List list = new ArrayList<>();list.add(product1);list.add(product2);list.add(product3);list.add(product4);list.add(product5);//将数据存储在域对象中request.setAttribute("list",list);//使用转发  list.jsprequest.getRequestDispatcher("/list.jsp").forward(request,response);}
}

实体类Product

public class Product {private int id;private double price;private String name;public Product(double price, String name) {this.price = price;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Product{" +"id=" + id +", price=" + price +", name='" + name + '\'' +'}';}
}

演示二:map集合

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title


<%Map map = new HashMap();map.put("one","郭德纲");map.put("two","c罗");map.put("thr","小罗");map.put("four","贾宝玉");request.setAttribute("map",map);
%>明星人物key:${item.key}+value:${item.value}

choose标签作用

标签用于指定多个条件选择的组合边界,它必须与标签一起使用。

演示:choose.jsp




switchServlet.java

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.IOException;@WebServlet("/switchServlet")
public class SwitchServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//实现switch功能int temp = 7;//转发到servletrequest.setAttribute("temp",temp);//转发到choose.jsprequest.getRequestDispatcher("/choose.jsp").forward(request,response);}
}

访问URL:http://localhost:8080/switchServlet

 

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部