JSP

2 篇文章 0 订阅

JSP语法

JSP
JSP的设置
* 设置JSP文件的打开方式:window – 选项 – General – Editors – 文件关联 – *.jsp – 选择MyEclipse JSP Editor – default
* 设置JSP文件的编码:window – 搜索JSP – 找到JSP – 选择UTF-8 – OK

脚本元素

<%! %> 成员方法、成员变量
<%= %> 输出内容
<% %> 局部变量,语句

JSP页面的注释

  1. HTML的注释 <!— — HTML的注释 — —> JSP文件的阶段存在,在翻译成java文件也存在, 在页面存在
  2. JAVA的注释 JSP文件的阶段存在,在翻译成java文件也存在, 在页面不存在
	<%
		// 		单行
		/**/	多行
		/**
		*		文档
		*/
	%>

3.JSP的注释 <%-- JSP的注释 --%> 之后存在JSP文件的阶段

JSP的指令元素

  1. 语法:<%@ 指令元素 属性名=属性值 %>
  2. page :设置JSP的属性
    * 注意:import属性可以出现多次,其他属性只能出现一次。
    * 属性:
    * language :JSP文件允许嵌入的语言。只支持一种JAVA语言。(不需要改变)
    * extends :JSP翻译Servlet文件,servlet继承的类。(不需要改变)
    * session :默认值是true,可以直接使用session。设置false,不能直接使用。
    * import :引入java的jar包(使用多次)
    * buffer :设置缓冲区的大小 默认8kb
    * autoFlush :设置默认刷新缓冲区(不要修改)
    * errorPage :指定错误页面
    * isErrorPage :设置值,可以是exception对象,设置true,使用exception,设置不能使用exception对象
    * contentType :服务器端输出所有内容采用编码。
    * pageEncoding :JSP翻译成Servlet文件时采用的编码。
    * isELIgnored :是否忽略EL表达式(false,不忽略,true,忽略)
    重点:
    * session import contentType pageEncoding isELIgnored
  3. include :包含页面(页面布局)
    * 语法:<%@ include file=“要包含文件的地址(静态包含)” %>
    * <%@ include file="/include/head.jsp" %>
    静态包含
  4. taglib :引入标签库文件)
    * 语法:<%taglib %>
    * 属性:
    * uri :引入标签库文件的名称
    * prefix :标签库的前缀名
  • 配置全局的错误页面
	在web.xml中进行配置。
	<error-page>
		<error-code>404</error-code>
		<location>/404.jsp</location>
	  </error-page>
	  
	  <error-page>
		<error-code>500</error-code>
		<location>/500.jsp</location>
	  </error-page>

JSP的内置对象(9个)直接使用

request response session application out pageContext page config exception

内置对象					真实的对象					方法
request						HttpServletRequest			setAttribute()	getAttribute()
response					HttpServletResponse			addCookie()		getWriter()
session						HttpSession					setAttribute()	getAttribute()
application					ServletContext				setAttribute()	getAttribute()
config						ServletConfig				getInitParameter()	getInitParameterNames()

exception					Throwable					getMessage()
page						Object						(不使用对象)
out							JspWriter					write()		print()
pageContext					PageContext					setAttribute()	getAttribute()
  1. exception
    和异常有关的
    前提条件:isErrorPage=“true”,才能使用exception对象。
  2. page
    当前页面的对象。
  3. out对象
    JspWriter PrintWriter response.getWriter()
    <%= “HELLO” %>
    <% out.print(“AAAA”); %>
    <% response.getWriter().print(“BBBB”); %>
    <% out.print(“CCCC”); %>
    * 输出结果:
    out
  4. pageContext对象
    * 域对象
    * 自己存取值
    * 向其他的域存取值。
    * setAttribute(String name, Object value, int scope)
    * getAttribute(String name, int scope)
    * findAttribute(String name)
    * 可以获取其他8个对象。
    * 编写框架或者通用性较高代码。
    * 在JSP的时候(4个域对象)
    ServletContext 整个web应用、session 一次会话、request 一次请求、pageContext 当前页面

JSP的标签(JSP的动作)

	<jsp:forward>	:转发
		属性:page	要转发的页面
	<jsp:param>		:传递参数	
		属性:name:参数名称	value:参数值
	<jsp:include>  	:页面的包含(动态包含)
		属性:page	要包含的页面

动态包含

JavaBean和内省(了解)有个工具类直接完成数据封装。

什么是JavaBean?

  1. 定义
    * 必须有一个无参的构造方法
    * 属性私有化
    * 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
	public class User(){
		private String username;
		private String password;
		public void setUsername(){
			
		}
		public void getUsername(){
			
		}
		public void getPassword(){
			
		}
		public void getInfo(){
			
		}
	}
  1. 作用:封装数据。
	//把数据封装到JavaBean中(JSP页面中完成的)
	<jsp:useBean>
	<jsp:setProperty> 
	<jsp:getProperty> 
	
	<jsp:useBean id="u" class="cn.itcast.vo.User"></jsp:useBean>
	<jsp:setProperty property="username" name="u"/>
	<jsp:setProperty property="password" name="u"/>
	//或者
	<jsp:setProperty property="*" name="u"/>

	<jsp:getProperty property="username" name="u"/>
	<jsp:getProperty property="password" name="u"/>

内省 (Introspector)

	@Test
	public void run() throws Exception{
		User user = new User();
		// 获取类的信息
		BeanInfo info = Introspector.getBeanInfo(user.getClass());
		// 获取属性的描述
		PropertyDescriptor [] pds = info.getPropertyDescriptors();
		// 循环遍历,获取属性的名称
		for (PropertyDescriptor pd : pds) {
			// System.out.println(pd.getName());
			if(!"class".equals(pd.getName())){
				// 获取写的方法
				Method m = pd.getWriteMethod();
				m.invoke(user, "admin");
			}
		}
		
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
	}

导入jar包

commons-beanutils-1.8.3.jar、commons-logging-1.1.1.jar

默认把字符串转换成日期类型

编写一个类,实现Converter接口。重写该方法。把字符串转换日期。
在封装数据之前进行注册。ConvertUtils.register(Converter converter, Class clazz) Date.class

EL表达式

  1. 语法:${ }
  2. 获取(域对象中的)数据
	//获取域对象中的值
	<%
		pageContext.setAttribute("name", "波波");
		request.setAttribute("name", "美美");
	%>
	
	${ pageScope.name }
	${ requestScope.name }


	//域中数组的值
	<%
		String [] arrs = {"美美","波波","东东","名名"};
		request.setAttribute("arrs", arrs);
	%>
	${ arrs[2] }

	//域中集合的值
	<%
		List<String> list = new ArrayList<String>();
		list.add("美美");
		list.add("小凤");
		list.add("芙蓉");
		request.setAttribute("list", list);
	%>
	${ list[1] }

	//域中Map集合的值
	<%
		Map<String,String> map = new HashMap<String,String>();
		map.put("aa", "美美");
		map.put("bb", "小凤");
		request.setAttribute("map", map);
	%>
	${ map.bb }


	//域中集合中有对象的值
	<%
		List<User2> uList = new ArrayList<User2>();
		uList.add(new User2("banzhang","123"));
		uList.add(new User2("美美","abc"));
		request.setAttribute("uList", uList);
	%>
	${ uList[1].username }
  1. 执行运算
	<h4>加法运算</h4>
	${ n1 + n2 }

	<h3>关系运算</h3>
	<h4>大于</h4>
	${ n1 > n2 }	${ n1 gt n2 }

	<h4>小于</h4>
	${ n1 < n2 }	${ n1 lt n2 }

	<h4>等于</h4>
	${ n1 == n2 }	${ n1 eq n2 }

	<h4>不等于</h4>
	${ n1 != n2 }	${ n1 ne n2 }

	<h4>大于等于</h4>
	${ n1 >= n2 }	${ n1 ge n2 }

	<h4>小于等于</h4>
	${ n1 <= n2 }	${ n1 le n2 }

	<h3>逻辑运算</h3>
	<h4></h4>
	${ n1 > n2 && n3 > n4 }		${ n1 > n2 and n3 > n4 }

	<h4></h4>
	${ n1 > n2 || n3 > n4 }		${ n1 > n2 or n3 > n4 }

	<h4></h4>
	${ !(n1 > n2) }		${ not (n1 > n2) }
  1. 获取WEB开发中的对象
    pageScope、requestScope、sessionScope、applicationScope
    param 获取请求的参数 getParameter()
    paramValues 获取请求的参数 getParameterValues()
    header 获取请求头的信息
    headerValues 获取请求头的信息
    initParam 获取全局的初始化参数
    cookie 获取cookie
    pageContext
	<h4>EL的WEB对象</h4>
	${ param.username }

	<h4>获取请求头</h4>
	${ header.referer }
	
	<h4>获取全局初始化参数</h4>
	${ initParam.username }
	
	<h4>pageContext对象</h4>
	${ pageContext.request.contextPath }

JSTL标签库概述

JSP标准标签库

  1. 作用:和EL表达式一起 取代<% %>
  2. 版本:1.0 1.1和1.2(区别不大)
    * 1.0EL表达式没有纳入规范
    * 1.1和1.2EL表达式纳入规范
  3. 下载jar包,导入到工程中
    jstl.jar、standard.jar
  4. 标签库
    c.tld 核心的标签库
    fn.tld EL表达式标签库

JSTL的快速入门

  1. 导入相应jar包。
  2. 新建JSP的文件,引入标签库
    <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
  3. 直接使用标签库

JSTL的标签

  1. <c:out> 输出内容
    value :输出的内容(常量或者变量)
    default :默认值
    escapeXml:默认是true,进行转义,设置成false,不转义。
	//代码:
	<c:out value="Hello"></c:out>
	<c:out value="${name }"></c:out>
	<!-- "" -->
	<c:out value="${ city }" default="北京"></c:out>
	<c:out value="<a href='#'>超链接</a>" escapeXml="false"/>
  1. <c:set>
    * 属性
    var :定义属性
    value :存入的值
    scope :域范围
    target :修改JavaBean对象
    property:修改的属性
	//向4个web域对象存入值
		<c:set var="i" value="10" scope="request" ></c:set>
		
	//修改JavaBean对象属性的值	
		<c:set target="${ user }" property="username"  value="小凤"></c:set>
  1. <c:remove>
    * 属性
    var :删除的属性
    scope :在域的范围
	//代码
	<c:set var="name" value="小凤" scope="page"></c:set>
	${ name }

	<c:remove var="name" scope="page"/>
	${name }
  1. <c:catch>
    * 属性:var 把异常的信息保存变量中
	//代码
	<c:catch var="e">
		<%
			int a = 10/0;
		%>
	</c:catch>
	${ e.message }
  1. <c:if> 没有<c:else>标签
    * 属性
    * test 判断的条件
    * var 计算的结果保存到变量中
    * scope 域的范围
	//代码
	<c:set var="i" value="10" scope="page"></c:set>
	<c:if test="${ i ge 10 }" var="x" scope="page">
		i >= 10
	</c:if>
	<c:if test="${ i lt 10 }">
		i < 10
	</c:if>
	${ x }

6.<c:choose>标签
<c:when>
<c:otherwise>

	//代码:
	<c:set var="i" value="10" scope="page"></c:set>
	<c:choose>
		<c:when test="${ i ge 10 }">
			i >= 10
		</c:when>
		<c:when test="${ i lt 10 }">
			i < 10
		</c:when>
		<c:otherwise>
			其他
		</c:otherwise>
	</c:choose>
  1. <c:forEach>(重要)
    * 循环遍历数据(数组,集合,Map集合)
    * 属性
    var :遍历数据的类型
    items :要遍历的内容
    begin :从哪开始
    end :到哪结束
    step :步长
    varStatus:记录循环遍历的信息
    * index
    * count(常用)
    * first
    * last
	//代码
	<%
		String [] arrs = {"美美","小凤","芙蓉","小苍"};
		request.setAttribute("arrs", arrs);
	%>
	<!-- for(String s : arrs){ }  -->
	<c:forEach var="s" items="${ arrs }">
		${ s }
	</c:forEach>

	<h4>遍历集合</h4>
	<%
		List<String> list = new ArrayList<String>();
		list.add("美美");
		list.add("小凤");
		list.add("芙蓉");
		list.add("小泽");
		request.setAttribute("list", list);
	%>
	<c:forEach var="s" items="${ list }">
		${ s }
	</c:forEach>

	<h4>遍历Map集合</h4>
	<%
		Map<String,String> map = new HashMap<String,String>();
		map.put("aa", "美美");
		map.put("bb", "小凤");
		map.put("cc", "芙蓉");
		request.setAttribute("map", map);
	%>
	<c:forEach var="entry" items="${ map }">
		${ entry.key } -- ${ entry.value }
	</c:forEach>
	
	<h4>遍历对象的集合</h4>
	<%
		List<User> uList = new ArrayList<User>();
		uList.add(new User("美美","123"));
		uList.add(new User("小风","234"));
		uList.add(new User("芙蓉","345"));
		request.setAttribute("uList", uList);
	%>
	<c:forEach var="user" items="${ uList }">
		${ user.username } -- ${ user.password }
	</c:forEach>
	
	
	<h4>迭代数据</h4>
	<h4>迭代从110</h4>
	<c:forEach var="i" begin="1" end="10" step="2">
		${ i }
	</c:forEach>


	<h4>计算从1加到100的和</h4>
	<c:set var="sum" value="0" scope="page"></c:set>
	<c:forEach var="i" begin="1" end="100" step="1">
		<c:set var="sum" value="${ sum + i }"></c:set>
	</c:forEach>
	${ sum }
	
	<h4>遍历10100的偶数,每到第3个数,显示红色</h4>
	<c:forEach var="i" begin="10" end="100" step="2" varStatus="status">
		<c:choose>
			<c:when test="${ status.first }">
				<font color="blue">${ i }</font>
			</c:when>
			<c:when test="${ status.count % 3 eq 0 }">
				<font color="red">${ i }</font>
			</c:when>
			<c:otherwise>
				${ i }
			</c:otherwise>
		</c:choose>
	</c:forEach>

8.<c:param> 传递参数
* 属性
name :参数名称
value :参数的值
* <c:import> 包含页面
* url :引入页面的地址
* context :虚拟路径
* var :引入页面保存到属性中
* scope :域的范围

	//代码
	<c:import url="/jstl/choose.jsp" context="/day13" var="i" scope="page">
		<c:param name="username" value="meimei"></c:param>
	</c:import>
	${ i }
  1. <c:url>
    <c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。
    URL重写就是将会话标识号以参数形式附加在URL地址后面
    http://localhost/demo?jsessionid=xxxxxxxxxxxxxxxxxx;
    *属性
    * var :声明属性
    * value :地址
    * scope :域范围
    * context :虚拟路径
	//代码
	<c:url var="i" value="/jstl/choose.jsp" scope="request" context="/day13">
		<c:param name="username" value="xiaofeng"></c:param>
	</c:url>

	<a href="${ i }">choose</a>
  1. <c:redirect>重定向
    * 属性
    * url :重定向的地址
    * context :虚拟路径
	//代码
	<c:redirect url="/jstl/choose.jsp" context="/day13">
		<c:param name="username" value="furong"></c:param>
	</c:redirect>
  1. <c:forTokens>分隔字符串(了解
	<h4>分隔字符串</h4>
	<c:set var="i" value="aa,bb,cc" scope="page"></c:set>
	<c:forTokens items="${i }" delims="," var="x">
		${ x }
	</c:forTokens>

EL函数(操作字符串的)

自定义EL函数(入门)

  1. 编写一个类,方法必须是静态方法。
  2. 在WEB-INF目录下创建tld的文件,配置。
    * 选择2.0
    3.完成配置
	<!-- 配置自定义的EL函数 -->
	 <function>
		<!-- 配置方法名称 -->
		<name>sayHi</name>
		<!-- 方法所在的类 -->
		<function-class>cn.itcast.el.ElDemo1</function-class>
		<!-- 配置方法的签名 -->
		<function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
	 </function>

自定义标签

自定义标签

  1. 实现SimpleTag接口
    * 编写一个类,继承SimpleTagSupport类。
  2. 重写5个方法
    * void setJspContext(JspContext pc)
    * void setParent(JspTag parent)
    * void setJspBody(JspFragment jspBody)
    * void doTag()
    * JspTag getParent()
  3. 快速入门的步骤(自定义没有标签体的标签)
    * 编写一个类,继承SimpleTagSupport。
    * 选择重写的方法,doTag()必须有的。
    * 需要配置
	<!-- 配置自定义标签 -->
	 <tag>
		<!-- 配置标签名称 -->
		<name>print</name>
		<!-- 配置标签的类 -->
		<tag-class>cn.itcast.tag.TagDemo1</tag-class>
		<!-- 配置标签主体 -->
		<body-content>empty</body-content>
	 </tag>
  1. 在JSP页面上,引入标签库
    <%@ taglib uri=“http://www.itcast.cn/1110/myc” prefix=“myc” %>
    * 使用标签了。
    * 带有标签主体的标签
    * 编写类,继承SimpleTagSupport。
    * 重写doTag()
    * 获取标签主体对象
    JspFragment jf = getJspBody();
    jf.invoke(null);
    * 配置
	<!-- 配置自定义标签 -->
	 <tag>
		<!-- 配置标签名称 -->
		<name>out</name>
		<!-- 配置标签的类 -->
		<tag-class>cn.itcast.tag.TagDemo2</tag-class>
		<!-- 配置标签主体 -->
		<body-content>scriptless</body-content>
	 </tag>

body-content元素的可选值有:
a. empty:不能有标签体内容。
b. JSP:标签体内容可以是任何东西:EL、JSTL、<%=%>、<%%>,以及html;但不建议使用Java代码段,SimpleTag已经不再支持使用body-content JSP body-content
c. scriptless:标签体内容不能是Java代码段,但可以是EL、JSTL等;
d. tagdependent:标签体内容不做运算,由标签处理类自行处理,无论标签体内容是EL、JSP、JSTL,都不会做运算。
4. 带有属性的标签
* * 编写类,继承SimpleTagSupport。
* 重写doTag()
* 编写一个属性,属性必须和标签中的属性是相同
* 提供set方法
* 获取标签主体对象
JspFragment jf = getJspBody();
jf.invoke(null);
* 配置

	<!-- 配置自定义标签 -->
	 <tag>
		<!-- 配置标签名称 -->
		<name>if</name>
		<!-- 配置标签的类 -->
		<tag-class>cn.itcast.tag.TagDemo3</tag-class>
		<!-- 配置标签主体 -->
		<body-content>scriptless</body-content>
		<!-- 配置属性 -->
		<attribute>
			<!-- 配置属性名称 -->
			<name>test</name>
			<!-- 属性是否是必须的 -->
			<required>true</required>
			<!-- 是否支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 属性的类型 -->
			<type>boolean</type>
		</attribute>
	 </tag>

JSP开发的模式(MVC)

JSP模式发展历程
开发发展
MVC开发流程
MVC开发流程

完成注册的需求

  1. 注册表单(案例)
  2. 数据库(没有)
  3. 使用xml来代替。
  4. 架构 (Servlet + JSP + JavaBean)
  5. 技术
    * 解析XML使用DOM4J技术
    * Servlet技术
    * BeanUtils技术
    * JSTL+EL表达式
  6. 创建新的项目
  7. 导入jar包
  8. 创建包结构

开发的步骤

  1. 编写注册的页面,
    用户名,密码,确认密码,别名,邮箱,验证码
  2. 先完成数据的校验 onsubmit()
    * 都不能为空,密码和确认密码一致
    * 邮箱格式正确(正则表达式)
  3. 发送请求,请求Servlet,接收数据,封装,处理数据
  4. 显示到JSP上。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值