企业软件,WEB和对于他们无限美好的遐想(第三日)--2014-3-12--参观日 + Struts 原理分析 (二)
来源:互联网 发布:电影配乐知乎 编辑:程序博客网 时间:2024/06/04 18:27
--上接前一天--
7.简单的JSP开发
7.1 JSP的工作原理:(为了更好的理解JSP服务器,本例为Tomcat如何创建和发布JSP程序)
JSP服务器(本例为 Tomcat 服务器)管理JSP文件、页面分为两个阶段:
阶段一:转换阶段(Translation Phase)
阶段二:执行阶段(Execution Phase)
如下图所示:
文字说明一下这张图:
1.当某JSP文件第一次被请求时,客户端通过HTTP协议将客户端的请求发送到服务器端,服务器会将JSP页面分配给JSP引擎。(JSP引擎是Servlet),然后把JSP文件转换成Servlet(Java文件.java)。(Servlet始终停驻于内存中,响应时间非常快,但是,第一次调用相关服务时,由于需要转换JSP文件,并将Servlet编译为.class文件,因而会有相对的延迟,同样对于我们用友的UAP系统也一样---第一次进入UAP - NC 系统中会有相对的延时存在,但是,可以通过下载缓存、懒加载等方式降低延时时间。)
2.转换过程中检验JSP文件语法是否存在错误,出错则终止转化,并向服务端和客户端输出报错信息
3.如果无错误,JSP引擎调用javac把Java源文件编译成相应的.class文件并将该.class文件加载到内存中。
4.之后,创建该Servlet的实例,并执行实例的jspInit()方法(jspInit()方法在Servlet的生命周期中只被执行一次,在jspInit()方法中会进行相关初始化工作,如,建立与数据库的连接、建立网络连接、从配置文件中获取相关参数等)。
5.接下来,服务器会创建并启动一个新的线程,新线程调用实例的jspService()方法。(每个请求,JSP引擎都会创建一个新的线程来进行请求的处理工作。多个客户端同时请求同一个JSP文件,则JSP引擎会创建多个线程,每个客户端请求对应一个线程)。
注意:多线程方式执行请求,可降低对系统的资源需求,提高并发及响应时间,但是,编程时需要注意多线程的编程禁忌和相关限制。
重点说明:服务器或者叫Servlet容器会把客户端(本例为浏览器)请求和回应
封装成
HttpServletRequest
和
HttpServletResponse对象,
并调用对应的Servlet实例中的jspService()方法,把这两个对象作为参数传递到jspService()方法中。
6.对应Servlet实例的jspService()方法执行后会将HTML内容返回给客户端。
在JSP执行期间,JSP服务器会检查JSP文件,如果JSP文件被修改了,服务器将根据设置决定是否对该文件进行重新编译。如果需要重新编译,则将编译结果取代内存中的Servlet,并继续上述处理过程。 如果系统资源不足,JSP引擎将把Servlet从内存中移除。此时会先调用jspDestroy()方法, 然后将Servlet实例标记为“垃圾收集”并处理(我认为此步骤应该是释放资源,待看过程序代码后进行相关的补充工作,另外,执行已有的Servlet的速度应该和原生的Servlet一样快,这个应该就是JSP这种机制的好处了)。
关于CGI的相关介绍我会整理成为一个专题的,到时候连接过去即可。
7.2 Web应用的固有目录结构,假设Web应用名为test -- (Web的目录结构不仅仅是针对于Tomcat,对于所有的JSP服务器都适用,因此才叫【固有目录结构】)
Web应用目录结构如下图:
说明:
1.classes & lib 目录下,都可以存放JAVA类,但是在运行中JSP服务器(本例为Tomcat)会先装载classes目录下的类,再装载lib下的。因此可以看出,classes目录下的类具有更高的优先权,或者说当两个目录同时存在相同的类时,classes会覆盖掉lib的类。
2.一般情况下,lib中应该只存放外部引用的类,向Struts的JAR包呀,JDBC驱动程序的JAR文件呀,还有其他的开源项目包呀等待,用户自己编写的类文件一定放在classes目录下边。
3.WEB-INF 文件目录对于客户端用户是隐藏的,不能通过浏览器直接访问到该目录中的文件
7.3 写个简单的JSP程序吧
如果JDK - Tomcat 等都安装完毕了,或者也不拘泥于何种形式的IDE,那么打开记事本开始进行第一次快乐的JSP简单编程吧,哈哈~
(我这里用的IDE是MyEclipse,大家可以翻看前一章)
先来看一下我的简单的JSP文件结构,如下图:
其中 Web.xml文件非常重要,JAVA上的Web应用通过它来描述并配置发布信息,这些配置信息非常重要,比如Servlet的相关信息、拦截器、资源引用等,下边我们来详细的看一下这些配置信息,以及再MyEclipse中的可视化配置和非可视化配置是如何进行操作的。(此部分具体的内容还在整理之后会补充完整)
1.定义Servlet
2.Servlet参数初始化
3.JSP/Servlet映射管理
4.安全域配置参数
5.定义Filter
6.welcome文件清单
7.资源引用配置
8.环境变量定义
一般情况下使用IDE新建Web Project时都会自动创建Web.xml。对于手写此文件的人来说可以将下边的文件拷贝并保存到相关位置。
-----------------------web.xml-----------------------
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
-----------------------web.xml-----------------------end
然后写index.jsp & welcome.jsp页面的代码
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>This is my JSP page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> <br> <form method="post" action="welcome.jsp" name="loginFrom"> <p> <input type="text" maxlength="25" size="20" name="username" value="用户名"></p> <p> <input type="text" maxlength="25" size="20" value="密码" name="password"></p> <p> <input type="Submit" value="提交" name="submit"></p> </form></body></html>
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'welcome.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> 欢迎:<%=request.getParameter("username") %><br> </body></html>
7.4 发布并测试JSP:打开服务器,然后访问127.0.0.1:8080。看到如下效果:
---》
到目前为止关键JSP的初步了解已经结束啦,下边将会讲解一些JSP的常用特性和高级特性,并尝试使用JSP/Servlet来实现Struts的部分功能。
- 企业软件,WEB和对于他们无限美好的遐想(第三日)--2014-3-12--参观日 + Struts 原理分析 (二)
- 企业软件,WEB和对于他们无限美好的遐想(第二日)--2014-3-11--计划日 + Struts 原理分析 (一)
- 企业软件,WEB和对于他们无限美好的遐想(第五日)--2014-3-14--IT日 + Struts 原理分析 (四)
- 企业软件,WEB和对于他们无限美好的遐想(第六日)--2014-3-15--月日 + Struts 原理分析 (五)
- 企业软件,WEB和对于他们无限美好的遐想(第七日)--2014-3-16--投票日 + Struts 原理分析 (六)
- 企业软件,WEB和对于他们无限美好的遐想(第八日)--2014-3-17--H日 + Struts 原理分析 (七)
- 企业软件,WEB和对于他们无限美好的遐想(第十日)--2014-3-19--祈祷日2 + Struts 原理分析 (九)
- 企业软件,WEB和对于他们无限美好的遐想(第九日)--2014-3-18--Struts概述 + Struts 原理分析 (八)
- 企业软件,WEB和对于他们无限美好的遐想(第四日)--2014-3-13--美阳日 + Struts 原理分析 (三)
- 企业软件,WEB和对于他们无限美好的遐想(第一日)
- 企业软件,WEB和对于他们无限美好的遐想(第十一日)--2014-3-20--公投日 + Struts 原理分析 (十)
- iPhone创富志:日进千金 无限遐想的盈利空间
- 美好的软件行业和苦难的程序员(二)
- 讲座:软件企业常见问题和系统性解决方法(7月5日 北京)
- TabHost的应用(上)------第三日
- 美好从今日开始
- 美好的软件行业和苦难的程序员(一)
- 面试日(阿里巴巴校园招聘第三日,复旦大学面试)
- 获取网络图片
- C++中的set(STL的应用部分)
- 面向对象编程基础 三 静态成员变量,静态函数以及静态代码块
- GitHub详细教程
- mac远程登陆iphone,和密码修改
- 企业软件,WEB和对于他们无限美好的遐想(第三日)--2014-3-12--参观日 + Struts 原理分析 (二)
- C++中对sprintf()函数的说明
- SuperMap iServer应用—地图的加载
- struts国际化默认保存在request中,一般通过过滤器修改让其保存在session;这介绍如何从<s:text>源码中修改local
- 最小的k个数
- 静态链接库LIB和动态链接库DLL的区别 创建和示例
- 注解的定义与反射调用
- 具体实例教你如何做LoadRunner结果分析
- UNIX高级环境编程读书笔记(chapter9)