分享

J2EE企业级开发学习笔记(8)

 liumw1203 2015-03-30

J2EE企业级开发学习笔记(8)

JSP技术

 

 1、JSP典型用法:处理以显示为中心的任务时使用JSP,处理逻辑时使用Servlet。在必须为客户端显示动态内容时,使用JSP非常合适。总之,JSP关注显示,而嵌入到JSP中的java代码则是用于与servlet或其他控制/数据进行实体通信。使用静态页面只需要一个简单的HTML页面来代替JSP页面。

 

2、模型1与模型2结构:

   模型1:在构建简单的Web应用程序,该应用程序没有重要的处理需求时使用该模型。

   模型2:遵从MVC模式,使用了一个或多个Servlet作为控制器,此外还使用了JavaBeans作为模型,JavaBeans作为控制器Servlet和JSP之间的通信工具。模型2更明显地隔离了显示和逻辑。当请求通常拒绝广泛的处理,防止导致变化多端的响应时使用该模型。

 

3、JSP:模板数据(静态部分HTML/XML)+JSP元素(动态部分:可通过JSP编译器和编译进Servlet)。

   JSP元素:指令元素、动作元素、脚本元素

   指令元素:<% include file="Header.jsp"%>

   动作元素:<jsp:forward page="/errorPage"/>

   脚本元素:把JSP中所有一切集中在一起,在请求处理过程中,可以用作定义变量、方法的声明或名称为scriptlets的代码块、及赋值表达式等。

   声明:<%! Declaration %>,Declaration可以是变量和函数。如:<%! private static MyLoginCount=0; %>

   表达式:Login Count:<%= result %>、<%=... %>相当于<jsp:>...</jsp:>

   Scriptlets:一种嵌入到JSP中的微型“脚本”代码。<% Java 代码 %>相当于<jsp:scriptlet>Java 代码</jsp:scriptlet>

  【注意】JSP动作的7个指令:

· jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。
· jsp:param: 用于传递参数,必须与其他支持参数的标签一起使用。
· jsp:include: 用于动态引入一个JSP 页面。
· jsp:p1ugin: 用于下载JavaBean 或Applet到客户端执行。
· jsp:useBean: 使用JavaBean 。
· jsp:setProperty: 修改JavaBean 实例的属性值。
· jsp:getProperty: 获取JavaBean 实例的属性值。

 

 

4、JSP隐式访问对象:request(请求)、response(响应)、pageContext(上下文)、session(会话)、application(应用)、out(输出)、config(配置)、page(页面=this)、exception(异常)

 

5、标记库:降低复杂性。为开发人员提供简单且易于使用的自定义标记,可以被用来调用复杂的逻辑。

   标记库描述符:<%@ taglib uri="MyUtils-taglib.tld">

 

6、JSP建模:<<ClientPage>>表示JSP在客户端的行为,即JSP外部可见的显示部分。客户页面与客户端资源有联系;<<ServerPage>>表示JSP在服务器端的行为,主要关注与处理请求和提供响应有联系的内部逻辑。服务器端页面与其他服务器资源有联系(外部系统、系统中数据库和控制器等)

<<Build>>表示客户端页面与服务器端页面之间的关系。当服务器端页面创建了客户端页面时,产生的结果是发送到发出请求的浏览器HTML或XML流。

<<Include>>、<<Forward>>表示服务器页面与其他服务器页面之间的一种关联关系

<<Use Bean>>表示页面可能访问或使用JavaBeans

<<Link>>表示客户端页面与其他客户端页面可能具有引入或输出的关系

<<Submit>>表示表单提交的输出关系

 

7、企业级应用中的JSP:

  J2EE企业级开发(8)JSP技术

使用JavaBean技术的模型2结构:

  J2EE企业级开发(8)JSP技术
上述银行交易系统的有关JSP顺序图:

J2EE企业级开发(8)JSP技术

ListTransacts.jsp使用与设置TransactInfo Bean关联的代码:

 HttpSession session =request.getSession(true);

 //create bean to pass info to JSP page

 TransactInfo transactInfo=new TransactInfo(transacts);

 session.setAttribute("TransactInfo",transactInfo);

 ...

 //Forward to next JSP page

 RequestDispatcher dispatcher =GetServletContext().getRequestDispatcher("/ListTransacts.jsp");

 dispatcher.forward(request,response);

 

8、与JavaBean相关的3个指令:useBean、setProperty、getProperty

useBean语法格式:<jsp:useBean id="name" class="classname" scope="page|request|session|application"/>

setProperty语法格式:<jsp:setProperty name="BeanName" property="propertyName" value="value"/>

getProperty语法格式:<jsp:getProperty name="BeanName" property="propertyName"/>

 

9、plugin指令:主要用于下载服务器端的JavaBean 或Applet 到客户端执行。由于程序在客户端执行,因此客户端必须安装虚拟机。

plugin 的语法格式如下:
<jsp:plugin type=bean | applet"
code="classFileName"
codebase="classFileDiretoryName"
[name=" instanceName"]
[archive="URLtoArchive"]
talign= "bottom | top | middle | left | right"]
[heigh="displayPixels"]
[width="displayPixels"]
[hspace="leftRightPixels"]
[vspace="topBottomPiexels"]
[jreversion=JREVersionNumber11.2"]
[nspluginurl="URLToPlugin"]
[iepluginurl="URLToPlugin"]>
[<jsp:parames>
[jsp:param name="parameterName" value="parameterValue"I>]
</jsp:params>]
[<jsp:fallback>text message for user that can no see the plugin
</jsp:fallback> ]
</jsp:plugin>

 

10、application使用context-param元素配置,并从web.xml 文件中获取参数。在web.xml文件中增加如下片段:

<!-- 配置第一个参数: driver-->
<context-param>
<param-name>
driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<!一配置第二个参数: url-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/j2ee</param-value>
</context-param>
<!一配置第三个参数: user-->
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<!一配置第四个参数: pass-->
<context-param>
<param-name>pass</param-name>
<param-value>32l47</param-value>
</context-param>

=================================

//从配置参数中获取驱动
String driver = application. getInitParameter ("driver") ;
//从配置参数中获取数据库url
String url = application.getInitParameter("url");
II从配置参数中获取用户名
String user = application.getInitParameter("user");
//从配置参数中获取密码
String pass = application.getInitParameter("pass");
//注册驱动
Class.forName(driver);
//获取数据库连接
Connection conn = DriverManager.getConnection(url , user , pass);

//创建Statement 对象
Statement stmt = conn.createStatement();

//执行查询
ResultSet rs = stmt.executeQuery("select * from userinf");

...

 通过这种方式,可以将一些配直信息放在web.xml 文件中配直,避免使用硬编码方式写在代码中,从而更好地提高程序解耦。

 

11、pageContext属性生存范围:

   pageContext.getAttributesScope("page"); //page=1

   pageContext.getAttributesScope("request");//request=2

   pageContext.getAttributesScope("session");//session=3

   pageContext.getAttributesScope("application");//session=4

 

12、request内置对象3种用途:封装表单域值(request.getParameter(s)("name"))、封装地址栏参数(地址栏传递参数的格式是urI?paraml=va1ue1&p缸am2=value2&…)、封装请求的属性(request.setAttribute(String attName,Object attValue)\getAttribute(String attName))

 

13、response内置对象3种用途:可以响应生成图片,而out无法做到;重定向请求;向客户端增加Cookie

   【注意】重定向(response.sendRedirect("forward-result.jsp"))会丢失所有的请求参数,使用重定向的效果,与在地址栏里重新输入新地址再回车的效果完全一样。

客户端增加Cookie三部曲:创建Cookie实例(Cookie cookie =new Cookie("username",name))-> 设置Cookie生命期限(cookie.setMaxAge(24*3600);//表示一天) -> 向客户端增加Cookie对象以一定期限保存客户信息(response.addCookie(cookie))

   访问Cookies[]:request.getCookies();然后遍历Cookies数组(for(Cookie c:Cookies){c.getName()})

 【注意】使


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多