Session与JSP与EL表达式

今日内容

  • Session

  • JSP

  • EL

  • JSTL

     

Session

#### 概念

它属于服务器端的一种会话机制,在一次会话的多次请求中实现数据的共享,将数据保存在服务器端的对象中。

HttpSession

  • 快速入门:

    • 常用的api方法:

    • 获取session:request.getSession()

    • 三个方法:

      • setAttribute(String name,Object value) 存储值

      • getAttribute(String name): ------>Object value 获取指定的值

      • removeAttribute(String name): 删除会话中指定的值

  • 原理:Session对象的实现需要依赖于Cookie

  • 注意:

    • 两次打开客户端,服务器端不关闭,两次是否获取的是同一个session?

      • 默认情况下:不是

      • 需要手动指定cookie中的JSESSIONID,通过响应头的形式发送给客户端,设置cookie的存活时间

      • 步骤:

         Cookie cookie = new Cookie("JSESSIONID", session.getId());
         cookie.setMaxAge(60);
         response.addCookie(cookie);
    • 客户端不关闭,服务器端关闭,两次获取的session对象是不是同一个对象?

      肯定不是,tomcat服务器内部做了优化,自动完成两项工作

      • session的钝化:序列化

      • session的活化:反序列化

    • session对象的销毁时机?

      • 服务器关闭

      • session对象的存活时间 默认时间为30分钟

        修改session默认存活时间

        <session-config></session-config>

      • 手动失效 invalidate() 销毁session对象

    • session特点:

      • session数据是保存在服务器端,cookie是保存在客户端中

      • session数据存储没有大小限制,cookie有,默认大小为4kb,同一个 域名下总cookie数量限制在20个以内

      • session数据是较为安全的,cookie数据相对不安全。

JSP

概念

Java Server Pages: 支持Java语言编写的运行在服务端上的页面。

JSP =HTML+JAVA

简化Servlet代码

原理

  • JSP本质上就是一个Servlet

JSP脚本:

  • 概念:JSP定义使用 Java代码的方式、规范

  • 第一种方式: <% java代码 %> 。被tomcat解析之后生成的代码是存放在哪个位置 service()方法中

  • 第二种方式: <%! java代码 %>。被tomcat解析后生成的代码文件,位置在Servlet类的成员位置。可以定义成员变量也可以定义成员方法。

  • 第三种方式: <%= java代码 %> 。 被tomcat解析后生成 的代码信息,会出现在页面中 通过打印流写入到页面中

JSP九大内置对象

  • 在jsp页面中不用创建可以直接使用的对象,称之为内置对象

  • 九大内置对象:

    内置对象 真实对象类型 作用

    • request HttpServletRequest 获取请求资源,request域对象(一次请求多个资源共享)

    • response HttpServletResponse 响应,响应的数据封装到响应对象

    • session HttpSession 实现多个用户之间数据共享

    • out JspWriter 输出对象,把信息输出到页面中

    • config ServletConfig 配置Serlet信息

    • exception Throwable 异常对象 (当前页面需要声明 isErrorPage = true)

    • pageContext PageContext 当前页面实现数据共享

    • application ServletContext 全局域对象 代表整个web应用

    • page Object(当前Servlet对象--->当前页面) 当前页面

  • JSP指令

  • 作用:配置当前jsp页面,可以导入一些外部资源

  • 语法格式:

    • <%@ 指令名称 属性名= 属性值 属性名2 = 属性值2 ....%>

  • 分类:

    • page -----> 配置当前的页面

      • contentType:等同于 response.setContentType("text/html;charset=utf-8")

        设置响应体的mime类型以及编码字符集

      • 设置当前页面的编码 可以使用pageEncoding = UTF-8

      • import : 导包 导入外部的一些类库资源

      • errorPage : 指定当前页面发生异常跳转的目标页面,会自动跳转过去

      • isErrorPage:确定是否使用exception内置对象 true-->使用 false-->不用,同时标识本页面为错误页面

    • include: ----> 包含其他页面信息

      • 语法格式: <%@ include file = "资源路径" %>

      • 结合使用 <jsp:include file = "资源路径">

    • taglib: 引入外部的标签库资源

      • 语法格式: <%@ taglib prefix = "前缀" uri = "资源路径" %> 前缀可以自定义,但是一般使用默认的

      • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • 注释:

    • html注释

      • 格式: <!-- html注释内容 -->

    • jsp注释: 一般使用jsp注释

      • 格式: <%-- java代码、html代码 --%> 客户端是不显示的,服务器端对于jsp注释是不发送的。

MVC:开发模式

  • 概念:

    • M:Model 模型-----> JavaBean

      • 用于封装数据、处理业务逻辑(三层架构)--->Service

    • V: View 视图-----> JSP

      • 展示数据

    • C: Controller 控制器------>Servlet 中枢大脑

      • 获取表单输入的数据

      • 关联模型和视图

      • 给客户端响应一些业务结果(需要首先把数据传输给视图)

EL表达式

  • 概念:Expression Language 表达式语言 只能在JSP页面上使用

  • 作用:简化jsp页面中的java代码

  • 语法: ${表达式}

  • 注意事项:

    • 对于jsp页面默认是支持el表达式。如果想要忽略el表达式

      • 第一种 使用 isELIgnored = “true” 禁止当前页面使用EL表达式

      • 第二种:

         \${表达式} 忽略掉当前的EL表达式   如  ${3 > 4 ? true : false}
  • 具体的使用:

    • 运算:

      • 运算符:

        • 算术运算符 + - * / %

        • 比较运算符 > < >= <= != ==

        • 逻辑运算符 && (and) 与 || (or ) 或 !(not) 非

        • 空运算符 empty

          • 功能:判断域中存储的对象是否为空 对象为null或者给对象为容器,容器的长度为0

          • 语法格式: ${empty 目标对象}:判断 字符串、数组、集合是否为null或者长度为0------>或

          • 不为空 ${not empty 目标对象}:判断字符串、数组、集合不为null并且长度也不为0---->与

          • ${empty 目标对象} 如果为空返回true 如果不为空返回false

          • ${not empty 目标对象} 如果为空返回false,如果不为空返回true

      •  

    • 从域中取值 request、ServletContext session pageContext

      • 大小范围 : ServletContext > session > request > pageContext

      • 在EL表达式中有对应的名字 applicationScope > sessionScope > requestScope > pageScope

    • el表达式只能从域中取值

      • 语法格式: ${域名称.key名称}

    • EL取值时可以省略域名称

      • 语法格式: ${key名称} 取值顺序:从最小的域中到最大的域中查找,直到查到为止。

        如果没有查到,不显示,也不报错。

      • 获取域中存储的对象中属性值:

        语法格式:${对象名称.属性名称}

        注意事项:映射JavaBean中的方法后面的名字 如getAge()----> Age---->age

        获取集合中对象的属性值

        list集合: ${key名称.get(索引).属性名}

        map集合: ${key名称.get(key名称).属性名}

        • 优化做法:

          • list集合: ${域名城.key名称[索引]}

          • map集合: ${域名城.key名称["key名称"]}

            ${域名城.key名称.key名称}

      • 隐式对象获取方式: 可以通过pageContext获取到其他八大内置对象

      • EL表达式中有11个隐式对象

编译器代码

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().write("hello,word");
	}

}
public class User implements Serializable {

	/*private Integer age;
	private String name;
	private String password;
	private Date birthday;*/
	
	 private Integer age;
	 private String name;
	 private String password;
	 private Date birthday;
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public User(Integer age, String name, String password, Date birthday) {
		super();
		this.age = age;
		this.name = name;
		this.password = password;
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "User [age=" + age + ", name=" + name + ", password=" + password + ", birthday=" + birthday + "]";
	}
	 
	 

}

EL表达式

%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="" %>
<html>
<head>
    <title>入门</title>
</head>
<body>
<!--el表达式只能在jsp页面上使用  -->
    
     <hr>
     \${3 > 4 ? true : false} 
     
 <%--    <hr>
    ${3>4}
    <hr>
    \${3>4?true:false}
 --%>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2021/1/14
  Time: 16:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>算术运算符</title>
</head>
<body>
    <hr>
    ${3+4}
    <hr>
    ${3-4}
    <hr>
    ${3*4}
    <hr>
    ${3 % 4}
    <hr>
    ${3 / 4}

</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2021/1/14
  Time: 16:59
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>比较运算符</title>
</head>
<body>
    <hr>
    ${ 3 > 4 } <br>
    ${ 3 != 4} <br>
    ${ 3 < 4} <br>
    ${ 3 == 4} <br>
</body>
</html>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2021/1/14
  Time: 17:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>逻辑运算符</title>
</head>
<body>
   <%
       ArrayList<Object> list = new ArrayList<>();
       HttpSession session2 = pageContext.getSession();
       session2.setAttribute("list", list);
   %>
    <hr>
    ${3 > 4 && 3 < 4} <br>
    ${3 > 4 and 3 < 4} <br>
    ${3 > 4 || 3 < 4} <br>
    ${3 > 4 or 3 < 4} <br>
    ${!(3 > 4)} <br>
    ${not(3>4)} <br>
    <hr>

    <hr>
    ${ not empty list}
</body>
</html>
<%@ page import="java.util.Date" %><%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2021/1/14
  Time: 17:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式取值</title>
</head>
<body>
  <%--    <%
         session.setAttribute("username", "张三");
         pageContext.setAttribute("password", "123456");
         application.setAttribute("age", 18);
         request.setAttribute("birthday", new Date());
     %>
    <hr>
    姓名:${sessionScope.username}<br>
    <hr>
    密码:${pageScope.password} <br>
    <hr>
    年龄:${applicationScope.age} <br>
    <hr>
    生日:${requestScope.birthday} --%>
    
</body>
</html>
<%@ page import="java.util.Date" %>
<%@ page import="com.zhiyou100.pojo.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2021/1/14
  Time: 17:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>取值顺序</title>
</head>
<body>
   <%
      session.setAttribute("username", "张三");
      pageContext.setAttribute("password", "123456");
      pageContext.setAttribute("username", "李四");
      application.setAttribute("age", 18);
      request.setAttribute("birthday", new Date());
      User user = new User();
      user.setAge(18);
      user.setName("张三");
      user.setPassword("123456");
      user.setBirthday(new Date());
      session.setAttribute("user", user);
      ArrayList<User> list = new ArrayList<>();
      list.add(user);
      session.setAttribute("users", list);
      HashMap<String, User> map = new HashMap<>();
      map.put("one",user);
      session.setAttribute("map", map);

  %> 
 
  
  <h3>省略域名称</h3>
   姓名: ${username2}
  <hr>
  <h3>取出对象中的属性值</h3>
  ${user.birthday}
  ${user.age}
  <hr>
  <h3>获取集合中对象的属性值</h3>
  年龄:${users.get(0).age}
  <hr>
  <h3>优化list操作</h3>
  年龄:${users[0].age}
  <hr>
  <hr>
  <h3>优化map操作</h3>
  年龄:${map["one"].age} <br>
  年龄:${map.one.age}
  <hr>
  年龄 :${map.get("one").age}
</body>
</html>

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值