JSP学习笔记

JSP学习笔记

前言

虽然说现在已经不会使用传统JSP制作项目,但jsp与servlet密不可分吗,而spring mvc 又是基于servlet 实现的,所以学一下对下面的进度还是有帮助的。

下面复习一下jsp的一些基础

session

数据交互的一个很好的工具,与之对应的是cookie

sessioncookie
定义存储在 Web服务器的内存中在整个用户会话储存在用户本地终端上的数据
区别可以存放对象只能存放字符
生存时间一段会话中,浏览器打开时间可自定义,基本不受限制
安全性较安全存放在本地,容易泄露

综上所述数据交互一般使用session较好,当然使用保存自动登录的用户名和密码还是要用cookie(要加密的),其次session还是要通过cookie实现的,算是cookie的高级实现,当然禁用cookie对session还是有一些麻烦,一般通过URL参数传输session_id实现,这就是另一个问题。

EL表达式 JSTL

由于前后端分离,在HTML页面中不推荐使用jsp语句编写java代码,所以在jsp基础中一般使用EL表达式获取值JSTL语句操作,虽然一般使用在静态页面中通过Ajax操作,但jsp还是要用到的吗o(* ̄︶ ̄*)o

EL表达式 语法    ${expression}

EL 提供.和[]两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
PagePageScope
RequestRequestScope
SessionSessionScope
ApplicationApplicationScope

JSTL JSP标准标签库

引用核心标签库语法 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

一般只用到核心标签库中的<c:if> <c:choose> <c:forEach> 这几个标签,基本上可以完成大多数的结构化程序的编写。

<c:if> 判断语法

<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>

test 判断条件
var 用于存储条件结果的变量
scope var属性的作用域 默认为page

由于这个不支持if-else的写法一般使用另一个<c:if>条件为这个var的取反,或者使用下面的这个选择语句

<c:choose> 选择分支语句

<c:choose>
<c:when test="<boolean>">
    ...
</c:when>
<c:when test="<boolean>">
    ...
</c:when>
...
...
<c:otherwise>
    ...
</c:otherwise>
</c:choose>

test 判断条件
when 等价于 switch中的case
otherwise 等价于 switch中的default

<c:forEach> 迭代循环语句

<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
...
</c:forEach>

items 要被循环的信息
begin 开始的元素(0=第一个元素,1=第二个元素)
end 最后一个元素(0=第一个元素,1=第二个元素)
step 每一次迭代的步长 默认为1
var 代表当前条目的变量名称
varStatus 代表循环状态的变量名称

通过使用这两个工具,我们就可以在jsp页面上取缔java代码,把代码格式弄得美观一些。

Servlet

这个应该是jsp中比较重要的一部分,它作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
在这里插入图片描述

一般创建 Servlet IDE会自动创造4个方法,分别是init()、destroy()、doget()、dopost()

这也是 Servlet 的生命周期

Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

service()是来处理来自客户端(浏览器)的请求,一般情况下是调用doGet()、doPost()方法

由于Servlet 包含的东西太多了,这里就不过多展开了,就记录一下一些问题

乱码

这个是在数据传输过程,只要有中文就可能碰到的问题,由于这些东西是外国人写的,使用的传输字符集是ISO-8859-1不支持中文,所以要进行转码,一般推荐转成utf-8,要用GBK也可以

字符集内容
Latin1(ISO-8859-1)单字节编码,向下兼容ASCII
GBK(汉字内码扩展)双字节编码,向下兼容GB 2312,向上支持 ISO 10646
UTF-8(万国码)可变长度字符编码,兼容ISO-8859-1,兼容ISO 10646

对于get明文传输中文的(不推荐)
可以使用 encodeURI() 编码、decodeURI() 解码
也可以使用java中的方法

    //get请求方式接收到的中文字符串
    String name = request.getParameter("userName");
    //将中文字符重新编码 默认编码问 ISO-8859-1
    String userName = new String(name.getByte("ISO-8859-1"),"utf-8");

对于post密文传输的
可以直接设置字符集
response.setCharacterEncoding("utf-8");

虽然传统jsp使用已经不是太多了,但学一下还是有些用处的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值