JSP基础
通过客户端下载的程序 客户端应用程序(APP)
B/S
浏览器通过url访问页面的程序 网页链接程序
好处
B/S 在网页端口无需下载就可以直接访问 同时网页端也替你更新好了内容
坏处
C/S 在客户端需要更新 和 卸载 但是访问速度快
bin 启动 停止tomcat
logs 日志文件和错误文件
conf 可以修改端口号 可以修改端口号 但是不能修改8000 因为有保护协议 同时也不能相同
lib jar 包存放在jar包lib下
声明语法:<%! %> //可以再JSP页面中声明方法
表达式:<%= %> // 用于输出
小脚步:<% %> // 在页面中接受 或者 调用sevice方法
<!-- --> 在客户端F12中用户可以看到你的注释
<%-- --> 在客户端无法看到
域名系统(Domain Name System,DNS)DNS:通过本地internate 访问
其他机器的网络时, 需要知道地址IP,通过域名系统解析将地址转换为 自定义的英文名提供访问
第二章
request
在request中适合使用转发跳转页面因为,转发适合request的一次请求
并且转发后url不会发生改变
request请求中最重要的是转发的解码
使用setCharacterEncoding("UTF-8") 方式解码
生命周期在 forward后 一次转发
response
主要在与重定向 跳转页面并不带有任何附属的内容
同时url 必须会被改变
主要是响应页面
setContentType("text/html;charset=utf-8"); 设置上下文为中文
在ajax中有极大的帮助
session
会话级别
生命周期在一个浏览器开启和结束等同于数据一直存在于当前浏览器下
application
生命周期:应用级别 等同于服务器关闭数据将一直存在
中文乱码的处理方式:
Get
get提价方式 解码方法 get方式提交时request.setCharacterEncoding(“UTF-8”)
没有任何作用
只设置单个变量
String name = request.getParamenter(“name”)
name = new String(name.getBytes(“ISO-8859-1”),“UTF-8”)
或者配置字符集在 书本JSP 47页
POST
直接使用request.setCharacterEncoding(“UTF-8”)
第三章
生命周期
page 当前页面中传递有效
request 一次请求后无效
session 一次会话后无效
application 一次服务器关闭后无效
九大内种对象
page
request
session
application
pageContext
Execption
out
config
response
cookie 会话跟踪技术
保存信息 并不安全,生命周期:同于会话
但是保存数据库的范围不同
cookie 保存在客户端
session 保存在服务端
JavaBean
java实体类: 私有属性 公有方法 有参无参构造函数
三层架构
sequenceDiagram
表示层->>业务层逻辑层: 客户请求到逻辑层!
业务层逻辑层->>数据库访问层: 客户信息通过了逻辑层的判断!
数据库访问层->>业务层逻辑层: 服务器响应数据库中操作的结果!
业务层逻辑层->>表示层: 用户看到结果!
分页
就是为了减少数据库内容的损失时
原因是: 在查询所有内容的时候由于数据量过于较大 导致访问速度较慢
使用分页极大提高访问速度
重要的语法
分页第一步
1.limit 公式 (当前页-1)*页大小,页大小
2.总页数:总页数%页大小 == 0 ?总页数/页大小 :总页数/页大小+1 ;
3.调用
// 总页数
int count = us.findCount();
// 当前页
int pageSize = 1;
// 获取页
String page = request.getParameter("page");
// 判断获取页是否为空
if (page != null) {
// 并将获取页中的值强制转换为当前页
pageSize = Integer.parseInt(page);
}
// 如果当前页 是负数 或者 是0
if (pageSize < 0) {
// 让变成初始页
pageSize = 1;
}
// 如果当前页 大于或者等于 总页数(总页数在第二步被处理了别乱)
if (pageSize >= count) {
// 总页数赋值给 当前页
pageSize = count;
}
传递参数累计内容
request.setAttribute("pageSize", pageSize);
// 直接传递最后一页
request.setAttribute("count", us.findCount());
// 获取当前页中查询得到的结果
request.setAttribute("list", us.findByLimit(pageSize));
servlet
JSP是servlet在页面的展示
等同于 servlet 附属 JSP
servlet 提供了两种方法一种是doGet 获取get求取 一种是doPost获取Post请求
在post方法中直接调用get方法
Servlet使用Java类 访问页面 并提供url
重点在于配置xml
<servlet>
<servlet-name>类的名称</servlet-name>
<servlet-class>类的地址</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>名称</servlet-name>
<putter-url>/固定的url地址<putter-url>
</servlet-mapping>
主要学习了 url网址之间使用 java类嵌入jsp代码 并调用
serlvet被销毁才算一个周期
默认继承HttpServlet抽象类
最后的两个方法
getInitParameter() 获取初始化参数
getServletConntext().getInitParameter(); 获取上下文参数
EL和JSP
最重要一点,在创建实体类
如果之前一张表是一个实体类,那么现在一个sql语句查询得到的结果集是个实体类
在使用EL调用getAttr方法时直接使用${name} 其中键的值 如果name不存在可能会报错,
但是name值为空 则什么多不输出为 "",
两种获取数据的方式:
${name.age}
${name["age"]}
在使用EL调用实体类的中的方法的时候
${stu.age}
看样子是调用私有属性 其实调用了方法
在内部是这样的
如果说 getAge()
自动去掉 get 并a小写 ()抹除 以此类推
如果stu.age 没有这样的方法则会报错
EL表达式的好处是
自动类型转换
直接获取attribute中key的值
遇到空值在tomcat不报错
El(Expression Language)表达式语言
在JSP页面中,通过在作用域中存储的key展示value,可进行自动类型转换
语法:
${ EL Expression }
*可以是表达式,也可以是变量名
${varName} // 基本数据类型和String
${Object,attrName} // 对象名。属性名
${list[i].attrName} // 取list中下标的元素。属性名
${map.key} //取map中key的value
EL会按照以下顺序在作用域中依次查找,找到即返回,最终找不到返回null
page → request → session → application
pageScope
requestScope
sessionScope
applicationScope
等于 ==(eq) String推荐使用eq,基本数据类型推荐==
大于 >(gt)
小于 <(lt)
大于等于 >=(ge)
小于等于 <=(le)
不等于 !=(ne)
并且 &&(and)
或者 ||(or)
取反 !(not)
null empty
JSTL和JSP
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 使用流程控制语句的时候导入
JSTL重大作用
1.JSTS标签与HTML类似
2.JSTL标签都是一标签库的prefix前缀为开头
3.前缀和标签之间使用 ":" 隔开
4.不同的JSTL都有各自必须使用的属性
简单if
<c:if test="">
</c:if>
多重if
<c:choose>
<c:when test=""> // if
</c:when>
<c:when test=""> // else if
</c:when>
<c:otherwise> // else
</c:otherwise>
</c:choose>
循环
items 要进行迭代的集合:${list}
var 表示每一个迭代变量。形式为String:"varName"
varStatus 表示迭代的状态,可以访问到迭代自身的信息。index,count,current
begin 如果指定了items,那么迭代就从items[begin]开始进行迭代;如果没有指定items,那么就从begin开始迭代。它的类型为整数。
end 如果指定了items,那么就在items[end]结束迭代。
step 迭代的步长,访问集合元素每次间隔的长度。
<c:forEach items="" var="" varStatus="" begin="" end="" step="">
</c:forEach>
<c:set var="balance" value="123456.1234" />
<%@ taglib uri="http://java.sun.com/jsp/jstl/format" prefix="fmt"%> 用于数字和时间格式
<fmt:formatNumber> 使用指定的格式或精度格式化数字
maxFractionDigits保留小数 123456.123
<fmt:formatNumber type="number" maxFractionDigits="3" value="${balance}" />
type="currency"人民币格式 ¥123,456,789.12
<fmt:formatNumber value="${balance}" type="currency"/>
type显示的类型date/time/both(默认) pattern样式
<fmt:formatDate value="" type="" pattern="">
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 字符串格式操作
fn:contains() 测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串,大小写不敏感
fn:startsWith() 测试输入字符串是否以指定的前缀开始
fn:endsWith() 测试输入的字符串是否以指定的后缀结
fn:indexOf() 返回指定字符串在输入字符串中出现的位置
fn:join() 将数组中的元素合成一个字符串然后输出
fn:length() 返回字符串长度
fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:substring() 返回字符串的子集
fn:toLowerCase() 将字符串中的字符转为小写
fn:toUpperCase() 将字符串中的字符转为大写
fn:trim() 移除首尾的空白符
Servlet中方法都对应着 数据库中的增删改查
doDelete 删除
doPut 修改 用于存取文件
doGet 查询
doPost 添加
ajax上篇
Ajax名为:异步无刷新技术
JSON 目的将对象转换为字符串(JSON是个对象)
七个ajax原生方法,属性
open(()
String method[请求方式], //创建一个新的http
String url[请求地址]
boolean async[是否异步]
);
String sendData(data); // 回调函数
onreadystatechanage 状态是否改变
readyState:xmlHttpRequest的状态信息
0. 对象未完成初始化
1. 对象开始发送请求
2. 对象请求发送完成
3. 对象请求响应
4. 对象得到响应
status
200 页面正常
404 请求资源不存在
500 服务器内部错误
responseTest:获取文本形式的响应内容
send() // 发行的参数
JSON格式
简单JSON对象
{"data":"success","code":"1"}
数组JSON
[{
"id":''1","username":"仲憨批","password":"111","gender" : "女","birthday" : "2000-01-01","email":"1000@qq.com"
}]
对象JSON
[student1{
"id":''1","username":"仲憨批","password":"111","gender" : "女","birthday" : "2000-01-01","email":"1000@qq.com"
}student2{
"id":''1","username":"仲憨批","password":"111","gender" : "女","birthday" : "2000-01-01","email":"1000@qq.com"
}]
json可以转换为字符串 同时 也可以转换为JSON对象
fastJson.jar包的方法
JSON.toJSONString(Object)
将对象或者数组或者集合放进去自动成为JSON字符串
ajax下篇
最常用的ajax
$.ajax({
url:"",
data:{
},
type:"POST",
dataType:"JSON",
success:function(res){
}
});
ajax简化的语法
$.get(`固定的url`,{ 传递的参数},使用function,'转换的类型') // 解析json格式的内容并判断
JSON,Text,Script,HTML
$.get('index',
{'email':$('#btn').val()},
function(){
},
'JSON');
--------------------------------------------------------------------------------------
$.post(`固定的url`,{ 传递的参数},使用function,'转换的类型') // 解析json格式的内容并判断
JSON,Text,Script,HTML
$.post('index',
{'email':$('#btn').val()},
function(){
},
'JSON');
--------------------------------------------------------------------------------------
$.getJSON(`固定的url`,{ 传递的参数},使用function) // 解析json格式的内容并判断
$.getJSON('index',
{'email':$('#btn').val()},
function(){
}--sx );