Web前端:JSP用法

一、JSP中编写Java代码:

1.在JSP文件第1行加入,允许执行Java代码:

<!-- language指定允许运行Java代码,errorPage表示当前页面出错时跳到此页面 -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp"%>

2.将Java代码写在<% %>中:

(1)一段代码:

<%
    //在此处编写 java代码
    String str = new String("123");
%>

(2)条件代码:

<!-- 将html内容分开写在不同条件中 -->
<% if (true) { %>
    html内容1
<% } else { %>
    html内容2
<% } %>

(3)脚本表达式,输出到网页上:

<%=new java.util.Date().toLocaleString()%>

二、JSP九大内置对象:

1.直接引用内置对象:

<!-- 九大内置对像 -->
<%
    HttpServletRequest req = request; 		//1.HttpServletRequest内置对象
    HttpServletResponse resp = response;	//2.HttpServletResponse内置对像
    ServletConfig sc = config; 				//3.ServletConfig内置对像
    ServletContext context = application;   //4.ServletContext内置对像
    HttpSession s = session; 				//5.HttpSession内置对像
    JspWriter os = out; 					//6.OutputStream内置对像
    Object p = page;						//7.当前jsp页面本身对象
    PageContext context2 = pageContext;     //8.通过pageContext可以得到上面所有对象
    //9.exception 异常对象,需要JSP设置isErrorPage=true才可以使用
%>

2.方法使用举例:

<!-- 举例 -->
<%
    pageContext.forward("index.html");		//跳转到新页面
    pageContext.include("index.html");		//将新页面包含在本页显示
    pageContext.findAttribute("key1");	//查找其他域中的属性值,查找顺序pageContext-request-session-application
    pageContext.getAttribute("key1", pageContext.SESSION_SCOPE); //从指定域找出该属性值

    out.write("html内容");//先写入缓存再输出
    out.flush();//将缓存内容输出到网页
    response.getWriter().write("html内容");//直接输出的

    //要设置下载头字段:
    response.setHeader("Content-disposition","attachment;filename=文件名");
    response.setContentType("application/octet-stream");
%>

三、JSP四大域:
application:所有浏览器共享
session:被当前会话内共享
request:被当前一次请求共享
page:被当前页面共享

四、JSP语法:
1.JSP声明:
<%!内容%>  //想在jspService方法外面写个方法就要写在这里面
声明中的内容可以为:方法,变量,静态代码块等等

例:

<%!
    //在此处写Java代码,此处定义了一个变量
    String str;
%>

2.JSP注释:

<%-- 注释,这种注释不会出现在翻译后的servlet中 --%>

3.JSP指令:

(1)说明:

<%@指令 属性名="值" %>
属性名="值":
java="语言名"
extends="父类名"
import="包名1,包名2..."
session="true或false"   为true时可以用session对象,否则不能
buffer="none | 8kb | sizekb"
autoFlush="trie | false"
isThreadSafe="true | false"  为true时让类自动
info="text"
errorPage="处理错误页面的URL地址"    设置错误处理,这里设了,web.xml中的设置无效
isErrorPage="true"   声明这是个处理错误的页面
contentType="text/html;charset=utf-8"   设置输出内容编码格式,这里设了,
pageEncoding="characterset | ISO"  

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- 导入jar包 -->
<%@page import="java.util.Map"%>

4.在web.xml文件中写代码处理错误:
<error-page>
  <exception-type></exception-type>或者<erro-code></erro-code>
  <location>处理错误的页面</location>
</error-page>
 

五、include指令:
包含与被包文件了除了pageEncoding与import以外,其他指令要相同
1.静态包含:

<!-- 静态包含,将被包含页.jsp和当前页合成一个页面,翻译成一个servlet文件 -->
<%@include file="/被包含页.jsp"%>

2.动态包含:

<%
    //动态包含,两页面合成一个页面,但是翻译成两个servlet文件
    pageContext.include("/被包含页.jsp");
%>

六、JSP标签:
Action(动作)元素,采用jsp:为前坠:

1.jsp:include,动态包含:

<jsp:include page="被包含页.jsp" flush="true" />

2.jsp:forward,跳转到新页面:

<jsp:forward page="新页面.jsp" />

3.jsp:param,嵌在jsp:forward标签中使用,用于转发跳转时,带参数到新页面:

<!-- 转发跳转,newPage.jsp为新页面,并带参数 -->
<jsp:forward page="新页面.jsp" >
    <jsp:param value="参数值" name="参数名"/>
</jsp:forward>

4.JSP中使用JavaBean:

(1)创建对象:

<!-- 创建对象,如果域中没有指定的类,就实例化类,再运行标签体内容,否则就不运行 -->
<jsp:useBean id="userInfo" class="com.yyh.hkw.domain.UserInfo" scope="request" />

(2)给对象属性赋值(调用set方法):

方式1:

<!-- 赋值,name参数为对象引用,property为属性名,value为属性值,如果属性类型是基本数据类型以外,就要用脚本表达式或EL表达式进行赋值 -->
<jsp:setProperty name="userInfo" property="name" value="王先生" />

方式2:

<!-- 传参 -->
<%
request.setAttribute("key1", "刘先生");
%>
<!-- 赋值,name参数为对象引用,property为属性名,param为属性值(从域取key1参数赋给变量 -->
<jsp:setProperty name="userInfo" property="name" param="key1" />

方式3:

<!-- 传参,参数名必须和属性名一样 -->
<%
request.setAttribute("name", "系先生");
%>
<!-- 赋值,name参数为对象引用,property为*,表示给所有属性赋值,request所传参数名必须和属性名一样  -->
<jsp:setProperty name="userInfo" property="*" />

(3)输出对象属性到页面(调用get方法):

<!-- 取值并显示,name参数为对象引用,property为属性名 -->
<jsp:getProperty name="userInfo" property="name" />

七、映射JSP页面:

将JSP页面配置成Servlet一样,可通过URL地址直接访问,web.xml中增加如下代码:

<servlet>
    <!-- home为任意名 -->
    <servlet-name>home</servlet-name>
    <!-- /home.jsp为WebContent目录下的网页 -->
    <jsp-file>/home.jsp</jsp-file>
    </servlet>
<servlet-mapping>
    <!-- home为任意名 -->
    <servlet-name>home</servlet-name>
    <!-- /home为配置允许URL访问的路径 -->
    <url-pattern>/home</url-pattern>
</servlet-mapping>

八、EL表达式:

作用:简化JSP代码,用${}包装代码。

1.EL表达式11大内置对象:

作用域相关对象:
pageScope
requestScope
sessionScope
applicationScope

头信息相关对象:
header
headerValues

参数信息相关对象:
param
paramValues

cookie

全局初始化参数:
initParam

2.用EL表达式取参数值:

(1)对象取值:

<!-- 存值 -->
<%
    UserInfo user = new UserInfo();
    request.setAttribute("user", user);
%>
	
<!-- 取值:${对象引用名.属性名} -->
${user.name};

(2)组数或List取值:

<!-- 存值 -->
<%
    List list = new ArrayList();
    list.add("字符串内容");
    request.setAttribute("list", list);
%>
	
<!-- 取值:${列表引用名[下标数值]} -->
${list[0]};

(3)Map取值:

<!-- 存值 -->
<%
    Map<String, String> map = new HashMap<String, String>();
    map.put("key", "值");
    request.setAttribute("map", map);
%>
	
<!-- 取值:${Map引用名.key名} -->
${map.key}

<!-- 取值:${Map引用名["key名"] -->
${map["key"]}

九、自定义JSP标签(类似JSTL标签):

包名:javax.servlet.jsp.tagext

方法说明:
setPageContext();   //初始化时调用
doStartTag();   //开始时调用
doAfterBody();  //循环方法,执行标签体后再执行这方法
doEndTag();  //结束时调用

几种实现方式:

方式1:实现Tag接口

方式2:继承TagSupport、BodyTagSupport、SimpleTagSupport类等

1.自定义Java类,继承SimpleTagSupport,实现if语句的功能:

/**
 * 自定义JSP标签:继承SimpleTagSupport
 */
public class SimpleTagSupportChild extends SimpleTagSupport {
	StringWriter sw = new StringWriter();
	/**
	 * 标签属性值
	 */
	private boolean test;

	public void setTest(boolean test) {
		this.test = test;
	}

	@Override
	public void doTag() throws JspException, IOException {
		if (test) {//条件表达式为true时,执行if标签内部的内容
			getJspBody().invoke(sw);
			getJspContext().getOut().println(sw.toString());
		}
	}

}

2.WEB-INF目录下创建tld文件(创建xml的DTD类型,扩展名为tld),配置自定义标签:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <!-- 默认前坠 -->
    <short-name>yyh</short-name>
    <!-- 自定义url -->
    <uri>http://yyh.com/tag</uri>
    <tag>
        <!-- 标签名 -->
        <name>if</name>
        <!-- 标签类全名 -->
        <tag-class>com.yyh.hkw.tag.SimpleTagSupportChild</tag-class>
        <!-- EMPTY类型(设置标签体为空)、JSP类型、scriptless类型 -->
        <body-content>scriptless</body-content>
        <!-- 标签属性 -->
        <attribute>
        <name>test</name>
            <required>false</required>
            <!--设置属性的值是否可以为表达式 -->
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

3.JSP页中使用自定义标签:

(1)导入自定义标签:

<!-- prefix随便命名,uri为自定义标签中配置的uri -->
<%@taglib prefix="yyh" uri="http://yyh.com/tag"%>

(2)使用自定义标签:

<!-- 自定义标签,实现if功能,表达式为true时执行if内部语句 -->
<yyh:if test="${5 > 3}">
    if语句内部
</yyh:if>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值