Java开发交流群 677807540 大家可以一起
讨论技术欢迎加入
1.在web.xml设置异常出现的跳转信息
<error-page>
//出现空指针异常
<exception-type>java.lang.NullPointerException</exception-type>
//跳转到那个页面
<location>/error.jsp</locatiion>
</error-page>
2.jsp 注释的方式<%-- --%> java脚本
带有!的声明是全局变量,在service方法外面
不带有!的声明是局部变量,在service方法里面
带有=号表示输出方式,直接输出值生成的源码也在service里面
<%! %> <% %> <%= %>
3 使用include指定元素 file带便引入本页面的辅页
<%@ include file="data2.jsp"%>
4.jsp内建对象 这些对象我们可以直接使用,不需要通过类来拿取
在源码中这些对象已经准备好了,我们使用时唯一注意的就是对象名是固定得
不能够随便更改
对象名
pageContext request session application
config out page response exception(这个需要page 指令设置是否开启)
5.page指令元素
import:页面脚本导包,多个包用逗号隔开
pageEncoding:jsp转换为servicr的编码 默认是iso-8859*1不支持中文
contentType:软编码的一部分,一般在指令元素外再添加request.setCharacterEncoding("编码")
这俩句就是Servlet中的软编码,在jsp中不管是get和post都支持中文
session:默认是true,表示支持session会话跟踪机制,如果设置为false则打开jsp页面时不能自动创建当前的session
buffer:页面的缓存,默认8kb这些内容会保存在用户本地,提高浏览器速度
info:嵌套在jsp中的一段信息,一般保持用户的签名等,通过getServletInfo()取出
isELIgnored:是否忽略EL表达式,默认不忽略
isThreadSafe:当前线程是否是安全,默认true 单实例多线程,不安全!
更改为false,单线程模式,线程安全,底层实现了SingleThreadModel接口效率低下
errorPage:当前页面出现异常时自动跳转到哪个页面(错误友好化)
isErrorPage:当前页面是否可以使用exception内置对象来显示异常,true可以使用false无法使用
autoFlush:当前页面是否自动实时刷新,不读取缓存,设置刷新时间还可以自动根据时间刷新
6.所谓表达式,表示此技术偏重于数据的显示,一般是往外取值不会涉及到赋值,业务逻辑等操作
7.EL表达式拿取范围属性 ${范围.key},范围可以省略,省略后会自定从范围小的开始拿取, .后面肯定是key 不需要引号
四个范围 pageScope requestScope sessionScope applicationScope
8.接受客户端传来的值 <%=request.getParameter()%>
表单提交的或者是链接传来的值都是String类型的字符串
EL表达式 ${param.key} 这里的param不可以省略
9${empty sessionScope.key} 拿不到值返回true 拿到返回false
10.EL表达式并不是任何值都能直接显示,必须根据提供的范围从范围中拿取,如果无法拿取,则什么都不输出,也不会报错.
11.拿取web.xml中配置的全局参数
<%=application.getInitParameter()%> 这是java代拿取
EL表达式 ${initParam.key}
12.JSTL 变迁 jsp standard tag lib
范围赋值
<c: set var= "key" value="值" scope="范围" page request session application></c:set>
取值
<c:out value="直接输出/<%=str%>/${pageScope.key} default="如果取不到值者输出这里的内容"></c:out>
13.删除值
<c: remove var="要删除的key" scope="要删除的范围" 如果不给出范围则会根据key全部删除 />
14.重定向
<c: redirect url="目标地址的绝对路径"></c:redirect>
15.遍历
<c:forEach items(循环体)="${sessionScope.key}/<%=session.getAttribute("key")%"
var="每次遍历出来对象的key" step="每int个遍历出来一次/步长" begin="开始的索引值"
end="结束的索引值">
这里的范围一定是page 可以省略不写
<c:out value="${pageScope.对象的key.属性的key}"></c:out>
</c:forEach>
16.流程控制
<c:if test="条件">
<c:out value="输出"></c:out>
</c:if>
<c:choose>
<c:when test="条件">
<c:out value="z输出"></c:out>
</c:when>
<c:otherwise>
<c:out value="输出"></c:out>
</c:otherwise>
</c:choose>
17.引入外部页面 如果没有网这里会报错
<c:import url="网站地址"></c:import>
18.jsp内建动作 每个jsp页面一定都要写contentType 和<%=request.setCharacterEncoding("编码")%>
19.useBean 变迁不一定是新建一个新的对象,而式根据id提供的key和scope提供的范围从内存中拿取,如果可以拿取直接拿取已经存在的对象,如果无法拿取,则穿件一个新的对象.
受四个范围影响.超果范围则会创建一个新的对象
<jsp:useBean id="stu" class="com.etoak.po.Student" scope="request"></jsp:useBean>
page request session application
以下有三种拿取属性的方式
<%=stu.getName() 这里的stu是对象的值%>
<c:out value="${requestScope.stu.name}"></c:out> 范围也可以省略
<jsp:getProperty property="name" name="stu"/>
除了java脚本里面的stu其他的都是key
而且 id name 是同一个key key肯定和对象名字一样 对象的名字也叫key
useBean 创建一个stu的想key是stu getProperty得到name属性的key是name
20.
接受提交过来的值并赋值 name对应useBean的id的key property给哪个属性的key赋值
如果页面提交过来的key和实体类的对象完全一样可以用*表示
value="表示这个属性的值就是这个用户提交的无效"
当页面提交过来的key和实体类的属性不对应要设置param属性来对应页面提交过来的key
<jsp:setProperty property="name" name="stu" param="提交过来表单的key" value="固定得值" /> property拿取属性的key名 name里面的和id也要对应
<jsp:getProperty property="name" name="stu"/>
21请求转发
<jsp:forward page="suc.jsp">
<jsp:param value="thisisvalue" name="thisiskey" />
</jsp:forward>
重定向
<c:redirect url="err.jsp">
通过连接传值只能传字符串:相当于response.sendRedirect("err.jsp?thisiskey=thisisvalue")
<c:param name="thisiskey" value="thisisvalue"></c:param>
</c:redirect>
22.分页的种类 1.假分页 拿出所有 用户需要那几条显示那几条
2.真分页 用户需要几条数据,就从数据库中拿取几条数据
23.分页公式
select 字段 from 表 limit ?,?;
24.分页四要素
A:总记录数 dao层里面可以拿取
B:每页记录数 自己定义每页显示的数据
c:总页数 (总记录数+每页记录数-1)/每页记录数
D:当前页 会随着用户动作发生改变,默认值1,在求当前页面时必须随着用户的动作立即拿取当前页面
25 分页公式pro
select 字段 from 表 limit(当前页-1)*每页记录数,每页记录数;
26.利用隐藏域 将每个button按钮激发时候的值赋给 隐藏域
function chang(cr){
cup 是隐藏域的name 将button按钮的值赋给 隐藏域的name
document.form[0].cup.value =cr;
文本对象拿取第一个form[0]的cup的key和value的key 并cr 赋给他
dacument.form[0].submit();
}
27.上传操作 必须使用post enctype:设置传输为字节流 multipart/form-data
设置字符流application/x-www-form-urlencoded
28.上传文件流程
全称都要try 使用SmartUpload 插件五步上传文件
1:引入SmartUpload SmartUpload su = new SmartUpload();
2:设置允许上传文件后缀名 多个用逗号分开
su.serAllowedFilesList("jap,pen,gif");
3:设置允许上传文件的大小
su.setTotalMaxFileSize(5<<20);
4.初始化 使SmartUpload插件取代Servlet的request
su.initialize(getServletConfig(),request,response);
5上传文件
su.upload();
//拿取所有上传文件
Files files = su.getFiles();
//拿取唯一的一个上传文件
File file = files.getFile(0);
//拿取上传文件的全名
String fileName = file.getFileName();
//拿取上传文件的后缀名
String fileExt = file.getFileExt();
//设置一个路径,将文件按照原名保存在此路径下
String path = "/image/"+ new UUIDFenerator().generate()+"."+fileExt;
//将文件保存在此路径下
file.saveAs(path);
//接收提交过来的用户名
//拿取SmartUpload提供的request;
从SmartUpload中得到request对象
Request req = su.getRequest();
String name = req.getParameter("name");
Uploader up = new Uploader(name,path);
request,setAttribute("up",up);
通过请求转发发送到指定页面
src="/工程名/image/4839483943849.jpg"
拿取/工程名
request.getContextPath()
拿取/image/483948394349.jpg
up.getPicpath()
${requestScope.up.picpath}
使用EL表达式来拿取九个内置对象
Java:
pageContext
request
session
application
response
page
out
config
exception
El:
${pageContext}
${pageContext.request}
${pageContext.session}
${pageContext.servletContext}
${pageContext.servletConfig}
${pageContext.out}
${pageContext.exception}
${pageContext.response}
${pageContext.page}
<jsp:useBean id="up" class="com.etoak.po.Uploader" scope="request"></jsp:useBean>
<img alt="些什么都行,浏览器差异很大" src="${pageContext.request.contextPath}${requestScope.up.picpath}"/>
<a href="/JspDay4_upload/servlet/Download?path=${up.picpath}">下载文件</a>
try{
//引入SmartUpload
SmartUpload su = new SmartUpload();
//设置保存的目的地,如果填写null则由浏览器提示用户下载到哪里
su.setContentDisposition(null);
//初始化
su.initialize(getServletConfig(),
request, response);
//根据提供的地址进行下载
su.downloadFile(request.getParameter("path"));