轻量级Java EE企业应用实战 学习笔记(二)第二章

Jsp的基本原理:jsp本质就是Servlet,当用户向指定的servlet发送请求时,servlet利用输出流动态生成html页面,包括静态部分标签,和动态部分,由java动态生成的内容.

每一个jsp文件在运行的时候都会在F:\apache-tomcat-7.0.69\work\Catalina\localhost目录下对应生成一个字节码(.class)和(.java)的文件.

 jsp文件必须在jsp服务器内运行

jsp文件必须生成servlet才能执行

每个jsp页面第一个访问者嘟嘟很慢,因为必须等待jsp编译成servlet.

jsp页面的访问者无须安装任何客户端,甚至不需要刻意运行的Java环境.


JSP注释

  <%--注释内容-->

  jsp的注释不会被发送到客户端


jsp声明

!-- 下面是JSP声明部分 -->
<%!
//声明一个整形变量
public int count;
//声明一个方法
public String info()
{
return "hello";
}
%>

会编译变成回应的servlet成员变量或成员方法.这里不能使用anstract修饰声明部分,因为抽象方法将到时jsp对应的servlet变成抽象类,从而导致不能实例化.

 

jsp输出表达式 

  <%=表达式%>

输出表达式后面不能有分号


jsp小脚本

<!-- Java脚本,这些脚本会对HTML的标签产生作用 -->
<%
for(int i = 0 ; i < 10 ; i++)
{
%>
<!-- 上面的循环将控制<tr>标签循环 -->
<tr>
<td>循环值:</td>
<td><%=i%></td>
</tr>
<%
}
%>

jsp声明少一个感叹号


jsp的3个编译指令:

  page:该指令是针对当前页面的指令.

  include指令,将外部文件切入到jsp文件中.同时解析这个页面中的jsp语句

  静态的include指令会将被包含的页面接入到本页面,融合成一个页面,因此被包含的页面甚至不需要是一个完整的页面.

  静态包含还会将被包含页面的编译指令也包含进来,如果两个页面的指令冲突,页面就会报错

taglib:


7个动作指令

 1. <jsp:forward page="forward-result.jsp">
<jsp:param name="age" value="26"/>
</jsp:forward>

在对应的页面中

<!-- 使用request内置对象获取age参数的值 -->
<%=request.getParameter("age")%> 获取参数

使用form表单

<!-- 表单提交页面 -->
<form id="login" method="post" action="jsp-forward.jsp">
<input type="text" name="username">
<input type="submit" value="login">
</form> 

客户端请求参数不会消失


 2.<!-- 使用动态include指令导入页面 -->
<jsp:include page="scriptlet.jsp" />

org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "scriptlet.jsp", out, false);

在servlet中使用org.apache.jasper.runtime.JspRuntimeLibrary.include方法来引入目标页面

<jsp:include page="forward-result.jsp" >
<jsp:param name="age" value="32"/>
</jsp:include>

同样可以传递参数

静态导入与动态导入区别:

     1.静态导入是讲两个页面融合成一个页面.动态导入时在Servlet中使用include方法来引入.

    2.金泰导入中被导入页面的编译指令会启作用,动态导入时被导入页面的编译指令会失效,只是插入页面的body部分.

3.动态包含可以包含额外的参数



<!-- 创建lee.Person的实例,该实例的实例名为p1 -->
<jsp:useBean id="p1" class="lee.Person" scope="page"/>
<!-- 设置p1的name属性值 -->
<jsp:setProperty name="p1" property="name" value="crazyit.org"/>
<!-- 设置p1的age属性值 -->
<jsp:setProperty name="p1" property="age" value="23"/>
<!-- 输出p1的name属性值 -->
<jsp:getProperty name="p1" property="name"/><br/>
<!-- 输出p1的age属性值 -->
<jsp:getProperty name="p1" property="age"/>


<jsp:param name="age" value="26"/> 见上

<jsp:plugin/>  使用的很少



9大内置对象

   application:作用:在整个web应用的多个jsp,servlet之间共享数据

                               访问web应用的配置参数

  config:读取配置信息.

 exception:异常只有当jsp页面的page指令的isErrorPage属性为true是才有用.

 out:一个页面输出流,等同于输出表达式<%=...%>

 pageContext:页面上下文,访问Jsp之间的共享数据,可以获取其他内置对象

request:获取请求参数

response:响应生成非字符响应, 重定向 添加cookie

session:代表一次回话.session的属性可以是任何可序列化的Java对象


Servlet

servlet支持注解和web.xml两种注册方式

 servlet声明周期:

   1.创建servlet生命周期实例

   2. web容器调用servlet的Init方法,对servlet初始化

   3.响应客户端的请求

   4.web容器决定销毁servlet时,先调用servlet的destroy方法.

  设置了load-on-startup 后,值越小,servlet就越先实例化,



jsp开发自定义标签类

    继承SimpleTagSupport类,实现里面的doTag方法.如果标签类包含属性,每个属性都应该有对应的getter和setter方法.

   新建TLD文件,文件放在web-inf下或在web-inf的任意子路径下.

   tdl文件的根元素<taglib>

  

Filter过滤器

   创建处理类,在web.xml中进行配置
   继承Filter接口,实现init destroy doFilter方法


   配置同样支持在web.xml和注解

   通过UrlRewriteFilter实现网页伪静态

   

listener

    定义listener实现类

    在web.xml或者用注解注册监听器

http://www.cnblogs.com/xdp-gacl/p/3969249.html 这里面对6个接口有详细的讲解


jsp2特性,支持el表达式 支持使用tagfile文件自定义标签

servlet3.0 支持注解

 支持异步调用


asyncSupported=true这个值要设置为true


// 创建AsyncContext,开始异步调用
AsyncContext actx = request.startAsync();

//添加一个异步调用的监听器
actx.addListener(new MyAsyncListener());
// 设置异步调用的超时时长
actx.setTimeout(30*1000);

actx.start(new GetBooksTarget(actx));

GetBooksTarget这个类实现runnable接口

public class GetBooksTarget implements Runnable{
private AsyncContext actx = null;
public GetBooksTarget(AsyncContext actx)
{
this.actx = actx;
}
@Override
public void run() {
try {
// 等待5秒钟,以模拟业务方法的执行
Thread.sleep(5000);
ServletRequest request =actx.getRequest();
List<String> books = new ArrayList<String>();
books.add("疯狂Java讲义");
books.add("轻量级Java EE企业应用实战");
books.add("疯狂Ajax讲义");
request.setAttribute("books", books);
actx.dispatch("/async.jsp");
} catch (Exception e) {
e.printStackTrace();
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值