概述
文章目录
- jsp基础
- 1、jsp入门
- 2、JSP中java脚本
- 3、JSP与Servlet分工案例
- 4、JSP原理
- 5、JSP注释
- Cookie
- 1、Cookie入门
- 2、Cookie的生命
- 3、Cookie的路径
- 4、Cookie的域
- HttpSession
- Httpsession入门
- 1、HttpSession概述
- 2、HttpSession的作用
- HttpSession案例介绍
- 1、一
- 2、二
- HttpSeesion原理
- session最大不活动时间
- URL重写
- 验证码
- JSP指令
- page指令
- pageContext对象
- include和taglibzhiling
- 1、include
- 2、taglib
- JSP动作标签
- JavaBean
- 1、JavaBean的规范
- 2、内省
- 3、JSP中与JavaBean相关的标签
- EL
- 1、EL入门
- 2、EL11个内置对象
- EL函数库(由JSTL提供的)
- EL自定义函数库
- JSTL
- JSTL标签库
- `core --> c标签!`
- `out和set`
- `remove`
- `url`
- `if:对应java中if语句`
- `choose:对应java中if/else if /else`
- `forEach`
- fmt(格式化库)
- 自定义标签
- 自定义标签入门
- 标签体内容
- 标签属性
jsp基础
1、jsp入门
2、JSP中java脚本
- <% %>:代码片段,用于定义0到N条java语句(方法内能放什么,他就能放什么)
- <%= %>:java表达式,用于输出,用于输出一条表达式(或变量)的结果。response.getWriter().print( … );这里可以放什么,他就可以放什么
- <%! %>:声明,用来创建类成员变量和成员方法,类中可以放什么,他就可以放什么
3、JSP与Servlet分工案例
4、JSP原理
5、JSP注释
<%-- ... --%>
当服务器把jsp编译成java文件已经忽略了注释部分!
Cookie
1、Cookie入门
- response.addCookie()向浏览器保存Cookie
- request.getCookies()获取浏览器归还的Cookie
2、Cookie的生命
- Cookie的maxAge:Cookie的最大生命,即Cookie可以保存的最大时长,以秒为单位
- cookie.setMaxAge(60)表示这个Cookie会被浏览器保存到硬盘60秒
- maxAge>0:浏览器会把Cookie保存到客户机的硬盘上,有效时间为maxAge的值决定
- maxAge<0:Cookie只会在浏览器的内存中存在,当用户关闭浏览器时,浏览器进程结束,同时Cookie也就被删除了;
- maxAge=0:浏览器会马上删除这个Cookie
3、Cookie的路径
- Cookie的path,能把Cookie带回服务器的Cookie的path,相当于,Cookie当前的访问路径包含Cookie的默认path,就可以在访问路径时将Cookie带回服务器
4、Cookie的域
HttpSession
Httpsession入门
1、HttpSession概述
- HttpSession是由JavaWeb提供的,用来会话跟踪的类,session是服务器端的对象,保存在服务器端!
- HttpSession是Servlet的三大域值对象之一(request、session、application(ServletContext))
- HttpSession底层依赖Cookie、或是URL重写!、
2、HttpSession的作用
- HttpSession session = request.getSession();
HttpSession案例介绍
1、一
- a.jsp
<h1>保存Session</h1>
<%
session.setAttribute("aaa", "AAA");
%>
- b.jsp
<h1>获取Session</h1>
<%
String s = (String)session.getAttribute("aaa");
%>
<%= s %>
2、二
- login.jsp
<h1>登录</h1>
<%
/*
读取名为uname的Cookie
如果为空显示:""
如果不为空显示Cookie的值
*/
String uname="";
Cookie[] cs = request.getCookies(); //获取reques的所有Cookie
if(cs != null){ //如果存在Cookie
for(Cookie c : cs){ // 遍历Cookie
if("uname".equalsIgnoreCase(c.getName())){ // 查找名为uname的Cookie
uname = c.getValue();// 获取Cookie的值
}
}
}
%>
<%
String message = "";
String msg = (String)request.getAttribute("msg");
if(msg != null){
message = msg;
}
%>
<font color="red"><b><%=message %></b></font>
<form action="/JspWebS/LoginServlet" method="post">
<%--把cookie中的用户名显示到用户文本框中 --%>
用户名: <input type="text" name="userName" value="<%=uname%>"/><br/>
密 码: <input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
- LoginServlet
public class LoginServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 获取表单数据
*/
// 处理中文问题
request.setCharacterEncoding("UTF-8");
// 获取
String username = (String)request.getParameter("userName");
String password = (String)request.getParameter("password");
/**
* 校检用户名和密码是否正确
*/
if(!"admin".equalsIgnoreCase(username)) { // 登录成功
/**
* 把用户名保存到Cookie,发送客服端浏览器
* 当再次打开login.jsp时,login.jsp会读取request中的Cookie,把它显示到用户文本框中
*/
Cookie cookie = new Cookie("uname" , username);
cookie.setMaxAge(60*60); //设置cookie生命时长为1hour
response.addCookie(cookie); //保存cookie
/**
* 如果成功 保存到session中
* 冲定向到succ1.jsp
*/
HttpSession session = request.getSession(); // 获取session
session.setAttribute("username", username); // 向session域中保存用户名
response.sendRedirect("/JspWebS/session1/succ1.jsp");
}else {// 登录失败
/**
* 如果失败 保存错误信息到request域中
* 转发到login.jsp中
*/
request.setAttribute("msg", "用户名或密码错误");//
RequestDispatcher rs = request.getRequestDispatcher("/session1/login.jsp"); //转发器
rs.forward(request, response); // 转发
}
}
- succ1.jsp
<%
String username = (String)session.getAttribute("username");
if(username == null){
/*
* 向request中保存错误信息,转发到login.jsp中
*/
request.setAttribute("msg", "您还没有登录,请不要冒充领导!");
request.getRequestDispatcher("/session1/login.jsp").forward(request, response);
return;
}
%>
欢迎欢迎,热烈欢迎,欢迎<font color="green"><b><%=username %></b></font>领导指导工作
HttpSeesion原理
session最大不活动时间
URL重写
验证码
JSP指令
page指令
-
语法:<%@ page language=“java” … %>
-
pageEncoding:
他指定当前jsp页面编码,只要不说谎,就不会有乱码,在服务器要把jsp编译成.java时需要使用PageEncoding -
contentType
:他表示添加一个响应头,Context-Type,等同于response.setContentType(“text/html;caharset=utf-8”) -
如果两个属性只提供了一个,那么另一个的默认值已为设置的那一个
-
如果两个属性都没有设置,那么默认值为iso
-
import
: 导包! 可以出现多次 -
errorPage
:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定 -
isErrorPage:它指定当前页面是否为处理错误的页面!当前属性为true时,这个页面会设置状态码为500,而且这个页面可以使用9大内置对象中的exception;
-
<error-page> <error-code>404</error-code> <location>/error/errorPage.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/errorPage.jsp</location> </error-page> <error-page> <exception-type>java.lang.RuntimeException</exception-type> <location>/index.jsp</location> </error-page>
-
autoFlush
:指定jsp的输出流缓冲区满时,是否自动刷新,默认为true,如果为false,那么缓冲区满时抛出异常! -
buffer
:指定缓冲区大小,默认为8kb,通常不需要修改! -
isELIgnored
:是否忽略EL表达式,默认为false,不忽略,即支持! -
没啥用的属性:
- language:指定当前jsp编译后的语言类型,默认值为java
- info:信息!
- isThreadSafe:当前jsp是否支持并发访问
- session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象了
- extend:让jsp生成的servlet去继承属性指定的类
pageContext对象
- 域对象功能
- 代理其他域对象功能
- 获取其他内置对象
include和taglibzhiling
1、include
- 静态包含
- 与RequestDispatcher的include()的功能很相式
<%@include file="" %>他是在jsp编译成java文件时完成的,他们共同生成一个java(就是一个servlet)文件,然后在生成一个*.class文件 (运行前执行)(两个jsp文件)
- 与RequestDispatcher的include() ,包含和被包含是两个servlet,即有两个*.class,他们只是把相应的内容在运行时合并!(运行时) (<jsp:include >)(动态包含)
作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立的jsp,而我们只需要处理变化的页面
2、taglib
- 导入标签库
- 两个属性:
prefix:指定标签库在本页面中的前缀,有开发人员自己创建
;url:指定标签库的位置
- <%@taglib prefix=“x” url=”“/struts-tags” %> 前缀的用法<x:text >
- 两个属性:
JSP动作标签
JavaBean
1、JavaBean的规范
- 必须有默认的构造器
- 提供set/get方法,如果只有get方法,那么这个属性只是只读属性
- 属性:有get/set方法的成员,还可以没有成员,只有get/set方法,属性名称有get/set方法来决定,而不是成员名称!
- 方法名称满足一定的规范,那么他就是属性,boolean类型的属性值,它的读方法可以是is开头,也可以是get开头!
2、内省
-
内省 –> BeanInfo –> 属性描述符 –> 属性的get/set对应的Method –> 可以反射了!
-
commos-beanutils,它是依赖内省完成的!
3、JSP中与JavaBean相关的标签
EL
1、EL入门
-
EL是jsp内置的表达式语言
- jsp2.0开始,不让使用java脚本,而使用EL表达式和动态标签来代替java脚本
- EL替代的是<%= … %>,也就是说EL只能做输出
-
EL表达式来读取四大域
-
${xxx},全域查找xxx属性,如果不存在输出空字符串,而不是null
-
指定域获取属性
-
${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx}
-
2、EL11个内置对象
-
param:对应参数,它是一个Map,其中Key参数名,vaule是参数值,适用于单值参数
-
paramValues:对应参数,它是一个Map,其中Key参数名,vaule是参数值,适用于多值参数
-
<%-- map.key这是EL的语法 map['key']也可以操作map --%> ${param.username } </br> ${paramValues.hobby[0] }</br> ${paramValues.hobby[1] }</br>
-
header:对应请求头,他是一个Map,其中Key表示头名称,value是单个头值,适用于单值请求头
-
headerValues:对应请求头,他是一个Map,其中Key表示头名称,value是多个头值,适用于多值请求头
-
${header ['User-Agent'] }
-
initParam:获取<context-param>内的参数
-
<context-param> <param-name>xxx</param-name> <param-value>XXX</param-value> </context-param> <context-param> <param-name>yyy</param-name> <param-value>YYY</param-value> </context-param>
-
${initParam.xxx}
-
cookie:Map<String , Cookie>类型,其中key是cookie的name,value是Cookie对象;
-
${cookie.username.value}
-
${cookie.JSESSIONID.value }
-
pageContext:他是PageContext类型!
-
${pageContext.request.contextPath }
-
<body> ${pageContext.request.scheme }</br> ${pageContext.request.contextPath } </br> <a href="${pageContext.request.contextPath }/el/b.jsp">点击这里</a> <form action="${pageContext.request.contextPath }/cookie/a.jsp" method="post"> <input type="submit" value="xxx"/> </form> </body>
EL函数库(由JSTL提供的)
EL自定义函数库
JSTL
JSTL标签库
-
core --> c标签!
-
out和set
-
输出
-
value:可以是字符常量,也可以是EL表达式
-
default:当要输出的内容为null,会输出default指定的值
-
escapeXml:默认值为true,表示转义
-
<c:out value="${code }"></c:out></br>
-
-
设置
-
var:变量名
-
Value:变量值,可以使EL表达式
-
scope:域,默认为page,可选值:page、request、session、application
-
<c:set var="it" value="itcast" scope="request"></c:set> <c:out value="${it }"></c:out>
-
-
-
-
remove
-
:删除域变量
-
var:变量名
-
scope:如果不给出scope,表示删除所有域中的该名称的变量,如果指定了域,那么只删除该域中的变量
-
-
-
url
-
-
value:指定一个路径,他会在路径前面自动添加项目名
- 执行结果:/JspWebJSTL/out/a.jsp
-
字标签:,用来给url后面添加参数
-
<c:url value="/out/a.jsp"> <c:param name="username" value="张三"/><%-- 可以对参数进行url编码--%> </c:url>
-
-
-
执行结果:/JspWebJSTL/out/a.jsp?username=%SDFG%ASDFGHJ%ASDFG
-
var:指定变量名,一旦添加了这个属性,那么url标签就不会输出到页面,而是把生成的url保存到域中
- scope:它与var一起使用,用来保存到指定的域中
-
-
if:对应java中if语句
- - … 当test值为true 是才执行标签体内容
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUAdb2nC-1615722428374)(jsp.assets/image-20200527174116541.png)]
-
choose:对应java中if/else if /else
-
<c:choose> <c:when test="">...</c:when> <c:when test="">...</c:when> <c:when test="">...</c:when> ... <c:otherwise>...</c:otherwise> </c:choose>
- ```java //等同于 if(...){ }else if(...){ }else if(...){ }else if(...){ }else{ }
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JPnPLuMo-1615722428375)(jsp.assets/image-20200527174405976.png)]
-
-
forEach
-
计数方式
-
属性
- var:循环变量
- begin:设置循环变量从几开始
- end:循环变量到几结束
-
step:设置步长,等同于java中的i++,i+=2 ,step默认为1
-
<c:forEach var="i" begin="1" end="10"> ${i} </c:forEach>
-
for(int i = 1 ; i <= 10 ; i++){ System.out.println(i); }
-
用来输出数组、集合!
-
属性
- items:指定要循环谁,它可以是一个数组或一个集合
- var:把数组或集合中的每个元素赋值给var指定的变量
-
<c:forEach items="${str }" var="strs"> ${strs}</br> </c:forEach>
-
for(String strs : str){ System.out.println(strs); }
-
-
-
循环状态
-
可以使用varStatus来创建循环状态变量
-
循环状态变量的属性
- count:循环元素的个数
- index:循环元素的下标
- first:是否为第一个元素
- last:是否为最后一个元素
- current:当前元素
-
<c:forEach items="${list }" var="ele" varStatus="vs" > ${vs.index } ${vs.count } ${vs.first } ${vs.last } ${vs.current }</br> </c:forEach>
-
-
-
fmt(格式化库)
-
格式化日期
-
<fmt:formatDate value="" pattern=""></fmt:formateDate>
- value:指定一个Date类型的变量
- pattern:用来指定输出的模板!例如:yyyy:MM:dd HH:mm:ss:SSS
-
-
格式化数字
-
<fmt:formatNumber value="${num1 }" pattern="0.00"></fmt:formatNumber>
-
保留小数点后两位,他会四舍五入,如果不足两位,以0补位
-
<fmt:formatNumber value="${num1 }" pattern="#.##"></fmt:formatNumber>
-
保留小数点后两位,他会四舍五入,如果不足两位,不补位
-
-
自定义标签
自定义标签入门
-
步骤:
- 标签处理类(标签也是一个对象,那么就需要先有类)
- tld文件,它是一个xml文件
- 页面中使用<%@ taglib%>来指定文件的位置
-
标签处理类
-
配置tld文件
-
页面中指定tld文件位置
-
标签体内容
-
empty:无标签体内容
-
JSP:jsp2.0已经不在支持这个类型!表示标签体内容可以是:java脚本,可以是标签,可以是EL表达式
-
scriptless:EL表达式,也可以是其他标签,也可以是字符串
-
tagdependent:标签体内容不会被执行,而是直接赋值标签处理类!
-
public class MyTag3 extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { Writer out = this.getJspContext().getOut();// 获取当前jsp页面的输出流 out.write("*****************</br>"); this.getJspBody().invoke(out);// 执行标签体的内容,把结果写在指定的流中,即页面上 out.write("</br>*****************"); } }
#### 不执行标签下面的内容
- 在标签处理类中的doTag()中使用SkipPageException()来结束
- Tomcat会调用标签处理类的doTag(),然后Tomcat会得到SkipPageException
- ```java
public class MyTag4 extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().print("只能看的见我,后面的都看不到!");
throw new SkipPageException(); // 抛出这个异常后,本标签后面的内容,将看不到!
}
}
标签属性
-
步骤:
-
给标签处理类添加属性
-
为标签处理类添加属性!属性至少需要一个set方法,这个set方法会在doTag()之前被Tomcat执行!所在的doTag()中就可以使用属性。
-
public class MyTag5 extends SimpleTagSupport { private boolean test; /** * 这个方法会由tomcat调用,并且在doTag()之前 * @param test */ public void setTest(boolean test) { this.test = test; } @Override public void doTag() throws JspException, IOException { if(test) { /** * 执行标签体 */ this.getJspBody().invoke(null);//如果传递的输出流为null,表示使用的就是当前页面的out! } } }
-
-
在tld文件中对属性进行配置
-
<tag> <name>mytag5</name> <tag-class>cn.itcast.tag.MyTag5</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <!-- 指定属性名 --> <required>true</required> <!-- 指定属性是否为必须的 --> <rtexprvalue>true</rtexprvalue> <!-- 指定属性是否可以使用EL --> </attribute> </tag>
/**
* 这个方法会由tomcat调用,并且在doTag()之前
* @param test
/
public void setTest(boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test) {
/*
* 执行标签体
*/
this.getJspBody().invoke(null);//如果传递的输出流为null,表示使用的就是当前页面的out!
}
}
} -
-
在tld文件中对属性进行配置
-
<tag> <name>mytag5</name> <tag-class>cn.itcast.tag.MyTag5</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <!-- 指定属性名 --> <required>true</required> <!-- 指定属性是否为必须的 --> <rtexprvalue>true</rtexprvalue> <!-- 指定属性是否可以使用EL --> </attribute> </tag>
-
-
最后
以上就是典雅硬币为你收集整理的jsp入门学习的全部内容,希望文章能够帮你解决jsp入门学习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复