jsp九大隐式对象和jsp内置标签和jsp的usebean标签

来源:互联网 发布:科学大众网络比赛 编辑:程序博客网 时间:2024/06/08 04:15

1 PageContext对象和Page对象

  1)request

  2)response

  3)session

  4)application

  5)config

取得jsp映射在web.xml文件中的信息

  6)out

  7)exception

  8)page:表示当前jsp页面,只能在jsp标签只出错,表示当前域对象,在代码中,表示当前域对象只能用PageContext

  9)pageContext

    a)PageContext域对象仅限于当前jsp页面中,出了该jsp页面,原PageContext域对象销毁,如果取不到值,返回null

    b)PageContext域对象可以将对应的值保存在指定的四个域对象之一

pageContext.setAttribute("name","丝丝",PageContext.REQUEST_SCOPE);

    c)PageContext域对象可以将对应的值从指定的四个域对象之一取出

<%=pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE) %>

    d)PageContext.findAttribute("name")

它会以namekey,依次去四个域对象中查询对应的值,找到即止,如果找不到,返回null

2 JSP内置标签(美化+业务逻辑)

  1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容

  2)JSP内置标签

a)<jsp:include page/>(动,执行)<%@ include file/>(静,翻译)

Njsp生成Nservlet

        总的jsp生成的结构良好

类似于函数调用

true先将当前jsp页面的输出输到浏览器后,再加入包含的页面/false(将原新内容同时输到浏览器)(默认)

  动态包含,在需要包含时,才去调用执行

        b)<jsp:forward page/>

转发到page所指向的jsp页面

        

<jsp:forward page="/to.jsp">

<jsp:param name="name" value='<%=URLEncoder.encode("杰克jack","UTF-8")%>'/>

<jsp:param name="pass" value="123"/>

</jsp:forward>

在转到另一个页面的时候带上参数

映射jsp

<servlet>

<servlet-name>qq</servlet-name>

<jsp-file>/index.jsp</jsp-file>

<init-param>

<param-name>email</param-name>

<param-value>jack0723@163.com</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>qq</servlet-name>

<url-pattern>/aaa/bbb/qq.html</url-pattern>

</servlet-mapping>

邮箱为:<%=config.getInitParameter("email")%>

 

 

3 JSP出错演示

  1)语法错误

<%=exception.getMessage();%>

 

  2)语法无错,但翻译成Servlet后出错

jsp以经帮我们创建了request对象,如果我们再定义一个同名的request对象,必然出错

 

  3)逻辑错误

 

取得某个属性值,但是实际上并不存在,取其长度,会出现空指针错误

 

4 JSPJavaBean标签

  a)<jsp:useBean id/class/scope/>表示创建或查找对应的JavaBean对象

如果在域对象中有对应的JavaBean对应,那么该只会负责查询JavaBean对应,而不会创建

<jsp:useBean id="s" class="cn.itcast.web.jsp.Student" scope="page">

   JavaBean对象

   </jsp:useBean>

id代表变量引用,且是存放到域对象中的key

如果scope不写默认为scope="page"

 

  b)<jsp:setProperty name/property/value/>

    该标签可以将String8种基本类型的转换

<jsp:setProperty name="s" property="name" value="jack"/>  

<jsp:setProperty name="s" property="age" value="30"/>  

<jsp:setProperty name="s" property="salary" value="5000"/>

而在javabeansalarydouble类型,依然可以赋值,表明该标签可以将String8中基本类型的转换

http://localhost:8080/day10/javabean.jsp?name=tingting&age=14&salary=999

如果使用传参形式传递参数和参数值

<jsp:setProperty name="s" property="name" param="name"/>

   <jsp:setProperty name="s" property="age" param="age"/>

   <jsp:setProperty name="s" property="salary" param="salary"/>

可以简写,如果参数和param值一样

 <jsp:setProperty name="s" property="*"/> 

 

  c)<jsp:getProperty name/property/>

 

*5 JSP开发模式

  (1)JSP(V)+JSP(C)+JavaBean(M)

  (2)JSP(V)+Servlet(C)+JavaBean(M)

  

*6 ELJSTL快速入门

  EL=Expression Language

  a)快速输出JavaBean的值或普通变量的值

<%@ page isELIgnored="false" %>是否让EL表达式忽略,false表示不忽略

<%

Address address = new Address();

address.setLocation("广州");

address.setZipcode("020123");

Student s = new Student();

s.setName("小华");

s.setAge(20);

s.setSalary(3500);

s.setAddress(address);

session.setAttribute("S",s);

%>  

用户名:${S.name}<br/>

年龄:${S.age}<br/>

薪水:${S.salary}<br/>

地址:${S.address.location}<br/>

邮编:${S.address.zipcode}<br/>

<hr/>

10>5->${10>5}

10==5->${10==5}

10<5->${10<5}

用户名:小华
年龄:20
薪水:3500.0
地址:广州
邮编:020123

 

10>5->true 10==5->false 10<5->false

 

 

  b)JSTL=JavaStandardTaglibLanguage  

    快速输出动态内容,以替代JSP页面中的脚本<%%>代码

  c)注意

是否已将集合或变量绑定到域对象中,并确保该域对象没有销毁,因为EL只有从域对象中检索对应的值

        JSTL都会和EL绑定在一起用

<%

List<String> stringList = new ArrayList<String>();

stringList.add("java增强");

stringList.add("xml");

stringList.add("servlet");

stringList.add("jsp");

request.setAttribute("STRINGLIST",stringList);

%>

<%

Map<Integer,String> map = new LinkedHashMap<Integer,String>();

map.put(1,"java");

map.put(2,"xml");

map.put(3,"servlet");

map.put(4,"jsp");

pageContext.setAttribute("MAP",map);

%> 

<table border="1" align="center">

<c:forEach var="list" items="${STRINGLIST}">

<tr>

<td>${list}</td>

</tr>

</c:forEach>

</table>

<table border="1" align="center">

<tr>

<th>编号</th>

<th>书名</th>

<th>操作</th>

</tr>

<c:forEach var="entry" items="${MAP}">

<tr>

<td>${entry.key}</td>

<td>${entry.value}</td>

<td>购买</td>

</tr>

</c:forEach>

</table>

 

*7 案例:

  a)购物车V2

  分析购物车V2功能列表:

    a)显示所有图书

    b)购买图书

    c)显示购物车中的图书清单

    d)删除某项图书

    e)清空购物车

    f)继续购物

    g)批量购物图书

      ... ...

 

   

课后作业:

  a)完成购物车V2

  b)个人购买图书限制在[1-100]

  c)图书数量必须是1开始的正整数,每一位都必须是[0-9]之整的数字