Jsp相关
来源:互联网 发布:c语言中char是什么意思 编辑:程序博客网 时间:2024/05/19 16:06
一 Jsp基础
Jsp的作用:用html语言中混合java语言开发动态资源的技术。
Jsp的特点:jsp页面既可以写html代码,也可以写java代码。jsp就是servlet。
jsp的生命周期:
- 翻译:jsp->java文件
- 编译:java文件->class文件(servlet)
- 走servlet的生命周期方法
1.1 jsp的语法:
1.jsp表达式
//语法:<%=变量或表达式%>//作用:向浏览器输出变量的值或表达式计算的结果。//示例<% String name = "eric";//变量 int a = 10; int b =20;%><%=name%><%=(a+b)%>
2.jsp脚本
//语法:<% java代码 %>//作用:执行java代码//示例<% //生成随机数 Random ran = new Random(); float num = ran.nextFloat(); %>
3.jsp声明
//语法:<%!变量或方法%>//作用:声明jsp的变量或方法//示例<%! //变量 String name = "lucy"; //方法 public String getName() { return name; }%>
4 jsp的注释
//语法<%----------%>
1.2 jsp指令
1 include 指令
//作用:在当前jsp页面包含其他页面//语法:<%@include file="文件路径"%>//示例<%@include file="common/header.jsp"%>//注意:被包含的页面(header.jsp)中不要出现全局的html标签(只需要<body>标签里面的内容其他与html相关的都删掉)
2 page指令
//作用:告诉tomcat以什么样的方式翻译jsp<%@ page language = "java" ---告诉服务器用什么语言翻译jsp import ="java.util.*" ----导java包多个包之间用逗号分隔 pageEncoding="utf-8" ----告诉服务器用什么编码翻译jsp文件 contentType = "text/html;charset=utf-8"---服务器发送给浏览器的数据格式和内容编码 errorPage = "error.jsp"---指定出错时显示的界面 isErrorPage = "false"----是否是出错界面 isELIgnored="false"---jsp页面支持EL,不写默认不支持EL%>
1.3内置对象
jsp页面加载完成之后就创建好的对象,就叫内置对象。
9大内置对象
内置对象名 类型request HttpServletRequestresponse HttpServletResponseconfig ServletConfigapplication ServletContextsession HttpSessionexception Throwablepage Object(this)out JspWriterpageContext PageContext
pageContext内置对象:
作用:可以通过pageContext获取其他八大内置对象。
pageContext也是一个域对象—-作用范围在同一个jsp页面内
二 EL
2.1 EL表达式
作用:向浏览器输出在域对象中的变量值或表达式计算的结果,替换掉jsp表达式。
语法:${变量或表达式}
输出对象
<%Student stu = new Student("jack",20);pageContext.setAttribute("student",stu);%>//输出${student.name}
输出集合对象
<% ArrayList list = new ArrayList(); Student stu1 = new Student("jack",22); list.add(stu1); Student stu2 = new Student("eric",24); list.add(stu2); Student stu3 = new Student("andy",25); list.add(stu3); pageContext.setAttribute("studentlist",list);%>//取出${studentlist[0].name}
三 jsp标签
作用:替换jsp脚本
3.1 内置标签:不需要再jsp页面导入标签
<jsp:forward page="/action.jsp"> <jsp:param value="jack" name="name"/>//参数标签</jsp:forward>//转发标签<jsp:include page="/header.jsp"><jsp:include>//包含
3.2 jstl标签:需要在jsp页面中导入标签
使用步骤:
- 导入标签库(使用javaee5.0以上的项目自动导入了jstl支持jar包,不需要手动导入)
- 使用taglib指令导入标签库(<%@taglib uri=”tld文件的uri名称” prefix=”简写” %>)
- 在jsp中使用标签
核心标签库的taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
常用标签:
//保存数据<c:set></c:set>//获取数据<c:out value=""></c:out>//单条件判断<c:if test=""></c:if>//多条件判断<c:choose ></c:choose><c:when test=""></c:when><c:otherwise ></c:otherwise>//循环数据<c:forEach></c:forEach><c:forTokens items="" delims=""></c:forTokens>//重定向<c:redirect></c:redirect>
使用示例:
//数据默认保存在page域中<c:set var = "count" value = "10"></c:set>//从域中获取数据 当value=null时使用默认值<c:out value="${name}" default="默认值"></c:out>//单条件判断<c:if test="${10>5}"> 条件成立</c:if>//choose标签+when标签+otherwirse标签一起使用<c:choose > <c:when test="${count>5&&count<10}">---相当于if else 条件成立 </c:when> <c:otherwise > ----相当于else 条件成立 </c:otherwise></c:choose>//循环数据 begin:从哪个元素开始 end:到哪个元素结束 step:步长 items:需要遍历的数据 var:每个元素的名称<c:forEach begin="0" end="2" step="1" items="${list}" var="stu" varStatus="varSta" >序号:${varSta.count} 获取对象的属性值:${stu.name}</c:forEach>//循环特殊字符串<% pageContext.setAttribute("str","java-php-net")%> <c:forTokens items="${str}" delims="-" var="s"> ${s}</c:forTokens>//重定向<c:redirect url="http://www.baidu.com"></c:redirect>
3.3 自定义标签:开发者自行定义,需要在jsp页面导入标签
自定义标签开发步骤:
1编写一个普通的java类(ShowIpTag),继承于SimpleTagSupport类。
public class ShowIpTag extends SimpleTagSupport{ /** * 2)覆盖doTag方法 */ @Override public void doTag() throws JspException, IOException { //this.getPageContext获取到pageContext对象 HttpServletRequest request = (HttpServletRequest)this.getPageContext.getRequest(); String ip = request.getRemoteHost(); JspWriter out = pageContext.getOut(); out.write("使用自定义标签输出客户的IP地址:"+ip); }}
2 在web项目的WEB-INF目录下建立itcast.tld文件,这个tld叫标签库的声明文件。并且在tld文件中添加如下内容(参考核心标签库的tld文件)
<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!-- 标签库的版本 --> <tlib-version>1.1</tlib-version> <!-- 标签库前缀 --> <short-name>itcast</short-name> <!-- tld文件的唯一标记 --> <uri>http://itcast.cn</uri> <!-- 一个标签的声明 --> <tag> <!-- 标签名称 --> <name>showIp</name> <!-- 标签处理器类的全名 --> <tag-class>itcast.a_tag.ShowIpTag</tag-class> <!-- 输出标签体内容格式 --> <body-content>scriptless</body-content> <!-- 属性声明 --> <attribute> <!-- 属性名称 --> <name>num</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表达式 --> <rtexprvalue>false</rtexprvalue> </attribute> </tag></taglib>
3 在jsp页面的头部导入自定义标签库
<itcast:showIp></itcast:showIp>
自定义标签的作用:<itcast:showIp>标签体内容</itcast:showIp>标签余下内容
1)控制标签体内容是否输出
2)控制标签余下内容是否输出
3)控制重复输出标签体内容
4)改变标签体内容
5)带属性的标签
/** * 标签处理器类 * @author APPle * */public class DemoTag extends SimpleTagSupport{ //1.声明属性的成员变量 private Integer num; //2.关键点: 必须提供公开的setter方法,用于给属性赋值 public void setNum(Integer num) { this.num = num; } @Override public void doTag() throws JspException, IOException { System.out.println("执行了标签"); /** * 1)控制标签内容是否输出 * 输出: 调用jspFrament.invoke(); * 不输出: 不调用jspFrament.invoke(); */ //1.1 得到标签体内容 JspFragment jspBody = this.getJspBody(); /** * 执行invoke方法: 把标签体内容输出到指定的Writer对象中 */ //1.2 往浏览器输出内容,writer为null就是默认往浏览器输出 //JspWriter out = this.getJspContext().getOut(); //jspBody.invoke(out); jspBody.invoke(null);//等价于上面的代码 /** * 3)控制重复输出标签体内容 * 方法: 执行多次jspBody.invoke()方法 */ /*for(int i=1;i<=num;i++){ jspBody.invoke(null); }*/ /** * 4)改变标签体内容 */ //4.1 创建StringWriter临时容器 /*StringWriter sw = new StringWriter(); //4.2 把标签体拷贝到临时容器 jspBody.invoke(sw); //4.3 从临时容器中得到标签体内容 String content = sw.toString(); //4.4 改变内容 content = content.toLowerCase(); //System.out.println(content); //4.5 把改变的内容输出到浏览器 //jspBody.invoke(null); 不能使用此方式输出,因为jsbBody没有改变过 this.getJspContext().getOut().write(content);*/ /** * 2)控制标签余下内容是否输出 * 输出: 什么都不干! * 不输出: 抛出SkipPageException异常 */ throw new SkipPageException(); }}
- jsp相关
- JSP 相关
- JSP相关
- JSP相关
- JSP相关
- JSP 相关
- Jsp相关
- jsp相关的技术
- JSP相关配置
- JSP相关技术基础知识
- JSP乱码问题相关
- jsp中相关应用
- 学习JSP相关笔记
- JSP 相关配置文件
- jsp 相关页面跳转
- jsp相关问题
- jsp相关知识
- JSP 相关配置文件
- 完美解决Ubuntu16.04虚拟机窗口全屏问题
- JS+JQ轮播图插件
- AJAX(XMLHttpRequest)进行跨域请求方法详解
- Android 端读取图片exif信息,并对其进行修改
- 一致性Hash(Consistent Hash)
- Jsp相关
- 数据结构与C语言实现(十二)——排序合集
- maven插件打包可执行jar包到docker
- x264的preset和tune
- Add Strings:字符串相加
- 一个基于TeamCity+GitLab+Docker的完整的持续集成方案
- delphi TreeView 从数据库添加节点的四种方法
- 数学建模如何诱骗了华尔街
- 重磅大礼!100本《机器学习》by周志华,免费送!