J2EE -> 传统表现层JSP

J2EE 企业应用实战:Struts Spring Hibernate 整合

原文作者:李刚

J2EE 应用运行及开发环境的安装

目前,JDK 主要有如下三个版本
J2SE:Java标准版本,包括开发桌面应用的系统类库。
J2EE:包括Java标准版,还增加了企业应用开发所需的类库。
J2ME:Java2 平台的微型版,被使用在资源受限制的小型电子设备上。


J2EE -> 传统表现层JSP

本章目录
JSP 是 Java Server Page 的缩写,是Servlet的简化。主要特点是在HTML 页面中加入Java片段代码,或者使用各种JSP 标签,包括使用用户标签,构成JSP 网页。

1,JSP 技术原理

JSP 是Servlet 的扩展,在没有JSP 之前,就已经出现了Servlet 技术。Servlet 是利
用输出流动态生成HTML 页面,包括每一个HTML 标签和每个在HTML 页面中出现的内容。

JSP 页
面由系统编译成Servlet , Servlet 再负责响应用户请求。JSP 其实也是Servlet 的一种简化,
使用JSP 时,其实还是使用Servlet ,因为Web 应用中的每个JSP 页面都会由Servlet 容
器生成对应的Servlet 。对于Tomcat 而言, JSP 页面生成的Servlet 放在work 路径对应的
Web 应用下。

JSP 文件必须在JSP服务器内运行
JSP 文件必须生成Servlet 才能执行
每个JSP 页面的第一个访问者速度很慢,因为必须等待JSP 编译成Servlet
JSP 页面的访问者无须安装任何客户端,甚至不需要可以运行Java 的运行环境,因为JSP 页面输送到客户端的是标准HTML 页面。

2,JSP 注释 <%--在注释内容--%>

HTML 注释的格式:<!--注释内容-->
HTML 的注释可以通过源代码查看到,但JSP 的注释是无法通过源代码查看到的。

3,JSP 声明 <%! 声明部分 %>
JSP 声明用于声明变量和方法

4,JSP 表达式 <%=表达式%>

5,JSP 脚本 <% 脚本 %>

6,JSP 的三个编译指令
JSP 的编译指令是通知JSP 引擎的消息,它不直接生成输出。编译指令都有默认值,
因此开发人员无须为每个指令设置值。

page:该指令是针对当前页面的指令
新建一个页面,默认的page 指令,如下
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

include:用户指定如何包含另一个页面
include 既可以包含静态的文本,也可以包含动态的JSP 页面。静态的编译指令include ,是将被包含的页面加入进来,生成一个完整的页面。
如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include 语句。


tablib:用户定义和访问自定义标签

7,JSP 的7个动作指令
动作指令与编译指令不间,编译指令是通知Servlet 引擎的处理消息,而动作指令只
是运行时的脚本动作。编译指令在将JSP 编译成Servlet 时起作用,动作指令通常可替换成Java 脚本,是JSP 脚本的标准化写法。

• jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。

<jsp:forward page=" {relativeURL I <%=expression %>}">
{<jsp:param.../>}
</jsp:forward>

• jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。
• jsp:include: 用于动态引入一个JSP 页面。
• jsp:p1ugin: 用于下载JavaBean 或Applet 到客户端执行。
• jsp:useBean: 使用JavaBean 。
第一个指令用于在JSP 页面中初始化一个
Java 实例; setProperty 指令用于修改JavaBean 实例的属性; getProperty 用于获取JavaBean
实例的属性。

• jsp:setProperty: 修改JavaBean 实例的属性值。
• jsp:getProperty: 获取JavaBean 实例的属性值。


1,JSP 的9个内置对象
JSP 页面中包含9个内置对象,这9个内置对象都是Servlet API 的类或者接口的实例,只是JSP 规范将他们
完成了默认初始化,即他们已经是对象,可以直接使用。

application:javax.servlet. ServletContext 的实例
该实例代表JSP 所属的Web应用本身,可用于JSP 页面,或者Servlet之间交换信息。
application 通过setAttribute 方法将一个值放入某个属性,该属性的值对整个Web 应用有效,
因此Web 应用的每个JSP 页面或Servlet 都可以访问该属性,访问属性的方法为getAttribute 。
index.jsp
<!-- HTML 标记,下面声明一个变量 -->
    <%! int count; %>
    <% application.setAttribute("count",String.valueOf(count++)) ;%>
    <%=count %>
love.jsp
<%=application.getAttribute("count")%>

加载配置文件中参数
II 从配置参数中获取驱动
String driver = application. getInitParameter ("driver") ;
II 从配置参数中获取数据库url
String url = application.getInitParameter("url");
II从配置参数中获取用户名
String user = application.getInitParameter("user");

config
javax.servlet.ServletConfig 的实例,该实例代表该JSP 的配置信息。常用的方法有getInitParameter(String parmaName)及getInitParameternames()等方法。
事实上,JSP 页面通常无需配置,也就不存在配置信息。因此该对象更多地在Servlet中有效。

<! 直接输出config 的getServletName的值-->
〈%=config.getServletName()%〉

exception
java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当前页面时错误处理页面,即编译指令page 的isErrorPage 属性为 true 时,该对象才可以使用。
out
java.servlet.jsp.JspWriter 的实例,该对象代表JSP 页面的输出流,用于输出内容,形成HTML页面。
page
代表该页面本身,通常没有太大的用处。也就是Servlet 中的this,其类型就是生成Servlet
pageContext
javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 的上下文,使用该对象可以访问页面中共享的数据。
request
javax.servlet.http.HttpServletRequest 的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里面。
这是一个常用的对象,获取客户端请求参数必须使用该对象。
response
javax.servlet.http.HttpServletResponse 的实例,代表服务器对客户端的相应。
通常,也很少使用该对象直接相应,输出相应使用out 对象,而response 对象常用于重定向。
假如需要在JSP 页面中动态生成一幅位图,使用out 作为响应将无法完成,此时必须使用response 作为响应输出。
除此之外,还可以使用response 来重定向请求,以及用于向客户端增加Cookie 。

重定向是response 的另外一个用处,与forword 不同的是,重定向会丢失所有的请求参数及请求属性。
A.jsp 传递参数到 B.jsp, B.jsp 转发到 C.jsp
B-C > 如果 forword ,C 可以得到 A 传递给 B 的参数,如果response 无法得到。

session
javax.servlet.http.HttpSession 的实例,该对象代表一次会话。从客户端浏览器与站点建立连接起,开始会话,直到关闭浏览器时介绍会话。

2,Servlet 的开发
Servlet ,通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客
户端的请求。
Servlet 是个特殊的Java 类,这个Java 类必须继承HttpServlet 。每个Servlet 可以响
应客户端的请求。Se凹let 提供不同的方法用于响应客户端请求。

Servlet 和JSP 的区别在于:
• Servlet 中没有内置对象,原来JSP 中的内置对象都必须通过HttpServletRequest
对象,或由HttpServletResponse 对象生成:
·对于静态的HTML 标签, Se凹let 都必须使用页面输出流逐行输出。
这也正是笔者在前面介绍的: JSP 是Servlet 的一种简化,使用JSP 只需要完成程序
员需要输出到客户端的内容,至于JSP 中的Java 脚本如何镶嵌到一个类中,由JSP 容器
完成。而Servlet 则是个完整的Java 类,这个类的service 方法用于生成对客户端的响应。

// 设置解码方式
   request.setCharacterEncoding("GBK") ;
   //获取name 的请求参数值
   String name = request.getParameter("name");
   // 获取gender 的请求参数值
   String gender = request.getParameter("age");

   //获取country 的请求参数值
   String national = request.getParameter("sex");
   //获取页面输出流
   PrintStream out = new PrintStream(response.getOutputStream());
   //输出HTML 页面标签
   out.print( "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">") ;
   out.println("<HTML>") ;
   out.println( "<HEAD>");
   out.println("<TITLE>Servlet测试</TITLE>");
   out.println ("</HEAD>") ;
   out.println("<BODY>") ;
   // 输出请求参数的值: name
   out.println("您的名字: " + name + "<hr>") ;
   // 输出请求参数的值: gender
   out.println("您的性别: " + gender + "<hr>");
   out.println("您来自的国家: " + national +"<hr>") ;
   out.println("</BODY>") ;
   out.println("</HTML>") ;

控制层Servlet 转发页面
RequestDispatcher rd=request.getRequestDispatcher("/love.jsp");
rd.forward(request, response);

访问Servlet 的配置参数
II 获取ServletConfig对象
ServletConfig config = getServletConfig();
II通过ServletConfig对象获取配置参数: dirver
String driver = config.getln工tParameter("driver");

转载于:https://www.cnblogs.com/qinhaijun/archive/2011/08/26/2154389.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值