JSP程序运行原理、文档结构及简单输入输出实例

掌握Web应用的文档结构;
掌握JSP的运行原理;
掌握JSP的简单输入和输出。

主要内容:

通过一个简单实例介绍Web应用的文档结构和运行原理;
通过一个简单的注册功能介绍基本的输入输出。

实现内容:客户端验证。

1、 文档结构

每个应用都有一个根目录,例如ch2;理论上可以放在任何地方,但是需要配置,简单的做法,直接放在了webapps这个目录下,在这个目录的应用会被自动加载。
在根目录下会有一个WEB-INF目录,这个目录中的文件不能被远程访问,主要存放配置文件和类文件、资源文件。

在WEB-INF中的配置文件是web.xml,每个web应用都会有这样一个配置文件。
在WEB-INF有两个文件用于存放类文件和资源文件,lib和classes,lib下面存放以压缩包jar形式存在的类库,classes直接存放类文件(包含包的信息)。
页面文件(包括jsp文件、html文件、图片文件)可以放在根目录(ch2)下面,或者下面的子文件夹(不能放在WEB-INF)中。

2、 运行方式

访问方式::8080/ch2/ch2.jsp
前提:把Web应用部署到服务器上,启动服务器。

下面以ch2.jsp为例介绍访问过程:

1)客户端通过浏览器发送请求;
2)Web服务器接收这个请求,然后转给应用服务器;
3)应用服务器会查找客户要访问的文件,假设访问的文件为ch2.jsp;分两种情况:
第一次访问:应用服务器把JSP文件转换成Java文件;然后编译成class文件;然后加载类;实例化对象并初始化;
后续访问:JSP文件对应的页面对象已经存在,直接查找到这个对象;
4)应用服务器封装请求信息,然后调用相应的方法;
5)应用服务器把方法执行结果(响应客户的内容)传递给Web服务器;
6)Web服务器把这个结果发给客户端;
7)客户端浏览器把接收到的html代码解析成网页。这个就是我们看到的结果。
下面是运行过程中的几个文件内容。

源文件Ch2.jsp的内容:

DDDDDDDDDDDDDDDDDDDDDDDD
<%="FFFFFFFFFFFFFFFF"%>

转换后的文件ch2_jsp.java:

package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class ch2_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = JspFactory.getDefaultFactory().getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("DDDDDDDDDDDDDDDDDDDDDDDD/r/n"); out.print("FFFFFFFFFFFFFFFF"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } }

返回给客户端的信息(通过浏览器的查看源文件功能可以看到):

DDDDDDDDDDDDDDDDDDDDDDDD
FFFFFFFFFFFFFFFF

3、 无状态的请求应答模式

用户通过客户端发送请求,可以通过地址栏、超链接、按钮或者表单元素的事件请求。不管采用什么方式发送请求,这些请求信息都会被封装成HttpServletRequest对象,服务器会把这个对象作为参数去调用页面对象,这个方法执行完会对客户端响应,之后这个HttpServletRequest对象就被删除了。如果再次发送请求,会创建新的HttpServletRequest对象,上一次访问时候的信息都不存在了。
所以服务器不会保存客户端以前访问的信息,称为无状态的请求应答模式。
接下来介绍JSP技术的基本问题:输入输出。首先看如何完成输入。

4、 输入元素

输入通过表单元素完成。常用的表单元素如下:

1)form

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzfzdw.html