技术标签: JavaEE
JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据。JSP其实是一种特殊的Servlet,当jsp页面第一次被访问时,服务器会把jsp编译成java文件。
静态内容 | HTML静态文本 |
指令 | 以“<%@”开始,以"%>"结束。 比如:<%@include file="Filename" %> |
动作标签 | 以"<jsp:action_name>"以“</jsp:action_name>”结束 比如:<jsp:include page=""></jsp:include> |
表达式 | <%=Java表达式> |
小脚本 | <%Java代码%> |
声明 | <%!方法%> |
注释 | <!--这是HTML注释,但客户端可以查看到--> <%--这也是注释,但客户端查不到--%> |
1、page:说明jsp的页面情况
<%@ page language=”java” import=”java.util.*,java.text.*” contentType=”text/html; charset=GBK” %>
language=”java”:使用那种语言,目前只支持JAVA。
import=””:相当于导包。
contentType=””:内容类型,是一种什么页面,HTML页面。
charset=GBK:编码类型。
pageEncoding=”GBK” 与 charset=”GBK” 的编码要一致。
UTF-8编码支持多国语言。
支持中文的的编码:GBK、GB2312、GB18030。
JSP默认编码:ISO-8859-1
JAVA默认编码:unicode
2、include:包含一个页面
3、taglib:引入标签库文件
<%@taglib prefix=”s” uri=”/struts-tags”%> 前缀的用法<s:text>
prefix:指定标签库在本页面中的前缀!由我们自己来起名称!
uri: 指定标签库的位置!
对象名
|
类型
|
说明
|
request
|
javax.servlet.http.HttpServletRequest
|
|
response
|
javax.servlet.http.HttpServletResponse
|
|
session
|
javax.servlet.http.HttpSession
|
由session="true"开关
|
application
|
javax.servlet.ServletContext
|
|
exception
|
java.lang.Throwable
|
由isErrorPage="false"开关
|
page
|
java.lang.Object当前对象this
|
当前servlet实例
|
config
|
javax.servlet.ServletConfig
|
|
out
|
javax.servlet.jsp.JspWriter
|
字符输出流,相当于 printWriter对象
|
pageContext
|
javax.servlet.jsp.PageContext
|
request:获取页面传来的参数信息
response:获取页面传来的参数后,后台做出相应,返回给客户端数据
session:每个客户打开一个浏览器,就会创建一个会话,并直到页面关闭是一个完整的会话
application :服务器启动就建立了一个application对象,一个服务器所有的客户都是同一个application对象.
out:是一个输出流,用来向客户端输出数据,可以是任何形式的,类似java后台代码的system.out.println(),可以直接打印输出语句.
page:是当前页面转换成servlet类的实例,多用在后台代码中
config:jsp的配置信息,多用在servlet类实例中
exception:页面处理过程中的报错信息
pagecontext:是上下文属性对象,即获取当前页面的属性,通过此对象可以获得其他八大对象
动作标签是由tomcat(服务器)来解释执行!而html标签由浏览器来执行!
<jsp:include>
<jsp:include page="xxx"/>
,用来包含指定的页面。假如有两个jsp. 分别为a.jsp和b.jsp,他们分别编码成Servlet,然后在执行Servlet时才会执行包含过程。这也是include指令与include标签的区别。 <jsp:include page="<%=myfile%>">
,这是可以的!因为include指令是在执行时才完成的包含,在执行时已经可以确定myfile这个变量的值。<jsp:forward>
<jsp:forward page="xxx"/>,
用来转发到指定页面 :<jsp:fowrad page="b.jsp"/>
<jsp:forwad>
标签下面的内容不会被执行。<jsp:param>
${p
ageScope.xxx}、
${r
equestScope.xxx}、
${s
essionScope.xxx}、
${a
pplicationScope.xxx}
<c:core>
<c:out v
alue=”aaa”/> 输出字符串aaa<c:out value="${a
aa}”/> 输出域属性aaa,其中与${aaa}相同<c:out value="${aa
a}” default=”xxx”/>如果${aaa}不存在,那么输出xxx字符串c:out value="${aaa}"
escapeXml=”true”/>如果${aaa}中包含特殊字符,那么转义它。这可以防止javascript攻击<c:set>
<c:set
var=”a” value=”hello”/> 创建名为a,值为hello的域属性,范围:page<c:set
var=”a” value=”hello” scope=”session”/> 范围为session(page、request、session、application)<C:remove>
<c:remove
var=”a”/> 删除名为a的域属性<c:remove
var=”a” scope=”page”/> 删除page域中名为a的域属性
<C:url>
<c:url v
alue=”/AServlet”/> 输出URL:/项目名/AServlet<c:url
value=”/AServlet” var=”url” scope=”page”/> 把生成的url保存到page域中,而不会输出<c:param>,
用来给url后面添加参数,例如: <c:url value="/index.jsp">
<c:param name="username" value="张三"/> <!--可以对参数进行url编码!!-->
</c:url>
结果为:/day13_1/index.jsp?username=%ED%2C%3F%ED%2C%3F
* var:指定变量名,一旦添加了这个属性,那么url标签就不会再输出到页面,而是把生成url保存到域中。
* scope:它与var一起使用,用来保存url。
<C:if>
*
<c:if
test=”${条件}”> 当条件为true时执行标签体内容
hello
<c:choose>
<c:set var="score" value="${param.score }"/>
<c:choose>
<c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>[if]
<c:when test="${score >= 90 }">A级</c:when>
<c:when test="${score >= 80 }">B级</c:when>
<c:when test="${score >= 70 }">C级</c:when>
<c:when test="${score >= 60 }">D级</c:when>
<c:otherwise>E级</c:otherwise>[else]
</c:choose>
<c:forEach>
<c:forEach var="i" begin="1" end="10">
${i}
</c:forEach>
属性:
* var:循环变量
* begin:设置循环变量从几开始。
* end:设置循环变量到几结束。
* step:设置步长!等同与java中的i++,或i+=2。step默认为1
- 遍历集合或数组方式:
<%
String[] names = {
"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
<c:out value="name: ${item }"/><br/>
</c:forEach>
- 遍历List
<%
List<String> names = new ArrayList<String>();
names.add("zhangSan");
names.add("liSi");
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
<c:out value="name: ${item }"/><br/>
</c:forEach>
- 遍历Map
<%
Map<String,String> stu = new LinkedHashMap<String,String>();
stu.put("number", "N_1001");
stu.put("name", "zhangSan");
pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }">
<c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>
- 循环状态
循环状态变量有如下属性:
* 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:formatDate
value=”” pattern=”“>
value:指定一个Date类型的变量
pattern:用来指定输出的模板!例如:yyyy-MM-dd HH:mm:ss<fmt:formatNumber
value=”${num1}” pattern=”0.00”>
保留小数点后2位,它会四舍五入!如果不足2位,以0补位!<fmt:formatNumber
value=”${num1}” pattern=”#.##”>
保留小数点后2位,它会四舍五入!如果不足2位,不补位!
步骤:
1. 标签处理类:继承SimpleTagSupport类
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().write(“<p>Hello SimpleTag!</p>
“) ;
}
}标签描述符文件(tld)
/WEB-INF/tlds/haha.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">
<tlib-version>1.0</tlib-version>
<short-name>haha</short-name>
<uri>http://www.haha.cn/tags</uri>
<tag>
<name>hello</name> <!--标签名称-->
<tag-class>cn.haha.tag.HelloTag</tag-class> <!--标签处理类名称-->
<body-content>empty</body-content> <!--标签体为空,即空标签-->
</tag>
</taglib>
<%@ taglib prefix="it" uri="/WEB-INF/hello.tld" %>
......
<it:hello/>
有标签体的标签
标签处理类
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
PageContext pc = (PageContext) this.getJspContext();
HttpServletRequest req = (HttpServletRequest) pc.getRequest();
String s = req.getParameter(“exec”);
if(s != null && s.endsWith(“true”)) {
// 获取标签体对象
JspFragment body = this.getJspBody() ;
// 执行标签体
body.invoke (null);
}
}
}
tld
<tag>
<name>hello</name>
<tag-class>cn.itcast.tags.HelloTag</tag-class>
<body-content>scriptless</body-content> <!--标签体内容不可以是java脚本,但可以是el、jstl等-->
</tag>
不执行标签下面的页面内容
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().print("<h1>只能看到我!</h1>");
throw new SkipPageException();
}
带有属性的标签
public class IfTag extends SimpleTagSupport {
private boolean test;//设置属性,提供getter/setter方法
public boolean isTest() {
return test;
}
public void setTest (boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test) {//如果test为true,执行标签体内容
this.getJspBody().invoke(null);
}
}
}
<tag>
<name>if</name>
<tag-class>cn.haha.tag.IfTag</tag-class>
<body-content>scriptless</body-content>
<!--部署属性-->
<attribute>
<name>test</name> <!--属性名-->
<required>true</required> <!--属性是否为必须的-->
<rtexprvalue>true</rtexprvalue> <!--属性值是否可以为EL或JSTL等-->
</attribute>
</tag>
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数