- 浏览: 155096 次
- 性别:
- 来自: 保定
文章分类
最新评论
-
hellostory:
高级查询的查询参数放哪里?
SSH超实用分页实现(原创开源)! -
topbox163:
不错。。。。。。。。。
拥有属于自己的SVN(Google SVN)(更新版) -
shiyangxt:
忧_零 写道不知道这个问题LZ是否解决了啊,今天同样碰到这个问 ...
救助贴???关于Mysql插入二进制文件 -
忧_零:
不知道这个问题LZ是否解决了啊,今天同样碰到这个问题了,错误相 ...
救助贴???关于Mysql插入二进制文件 -
sornor:
不错!总算对servlet和jsp之间的关系有了了解了!感谢感 ...
JSP与Servlet的关系和实例分析(转帖)
JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。
由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,这的确让人不胜其烦。JSP的出现弥补了这种不足,JSP通过在标准的HTML页面中插入Java代码,其静态的部分无须Java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java脚本控制。
从表面上看,JSP页面已经不再需要Java类,似乎完全脱离了Java面向对象的特征。事实上,JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。JSP其实也是Servlet的一种简化,使用JSP时,其实还是使用Servlet,因为Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。
看下面一个简单的JSP页面:
<!-- 表明此为一个JSP页面 -->
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>第一个JSP页面</TITLE>
</HEAD>
<BODY>
<!-- 下面是Java脚本-->
<%for(int i = 0 ; i < 10; i++)
{
out.println(i);
%>
<br>
<%}%>
</BODY>
</HTML>
当启动Tomcat之后,可以在Tomcat的Catalina\localhost\jsptest\org\apache\jsp目录下找到如下文件(假如Web应用名为jsptest,上面JSP页的名为test1.jsp):test1_jsp.java和test1_jsp.class。这两个文件都是Tomcat生成的,Tomcat根据JSP页面生成对应Servlet的Java文件及class文件。
下面是test1_jsp.java文件的源代码,这是一个特殊的Java类,是一个Servlet类:
//JSP页面经过Tomcat编译后默认的包
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
//继承HttpJspBase类,该类其实是个Servlet的子类
public final class test1_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent
{
private static java.util.Vector _jspx_dependants;
public java.util.List getDependants() {
return _jspx_dependants;
}
//用于响应用户的方法
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; charset=gb2312");
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("\r\n");
//下面输出HTML标签
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0
Transitional//EN\">\r\n");
out.write("<HTML>\r\n");
out.write("<HEAD>\r\n");
out.write("<TITLE>first Jsp</TITLE>\r\n");
out.write("</HEAD>\r\n");
out.write("<BODY>\r\n");
//页面中的循环,在此处循环输出
for(int i = 0 ; i < 10; i++)
{
out.println(i);
out.write("\r\n");
out.write("<br>\r\n");
}
out.write("\r\n");
out.write("</BODY>\r\n");
out.write("</HTML>\r\n");
out.write("\r\n");
}
catch (Throwable t)
{
if (!(t instanceof SkipPageException))
{
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handle
PageException(t);
}
}
finally
{
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_
page_context);
}
}
}
即使读者不了解上面提供的Java代码,也依然不会影响JSP页面的编写,因为这都是由Web容器负责生成的。图2.1显示了test1.jsp的执行效果。
根据图2.1的执行效果,再次对比test1.jsp和test1_jsp.java文件,可得到一个结论:该JSP页面中的每个字符都由test1_jsp.java文件的输出流生成。
根据上面的JSP页面工作原理图,可以得到如下四个结论:
— JSP文件必须在JSP服务器内运行。
— JSP文件必须生成Servlet才能执行。
— 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。
— JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。
JSP和Servlet会有如下转换:
- JSP页面的静态内容、JSP脚本都会转换成Servlet的xxxService()方法,类似于自行创建Servlet时service()方法。
- JSP声明部分,转换成Servlet的成员部分。所有JSP声明部分可以使用private,protected,public,static等修饰符,其他地方则不行。
- JSP的输出表达式(<%= ..%>部分),输出表达式会转换成Servlet的xxxService()方法里的输出语句。
- 九个内置对象要么是xxxService()方法的形参,要么是该方法的局部变量,所以九个内置对象只能在JSP脚本和输出表达式中使用。
*******************************************java生成静态页面**********************************************************
1 toHtml.java(不用修改,直接用)
package com.jetsum.mystatic;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class toHtml extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String url = request.getParameter("urls")!=null?request.getParameter("urls"):"";
//url是要生成htm的jsp页面
String name = "";
response.setContentType("text/html;charset=gb2312");
ServletContext sc = getServletContext();
System.out.println("request.getRealPath"+request.getRealPath(""));
name = request.getRealPath("") + "/index.htm"; /*生成htm页 位置在%服务器的根目录%/工程名/index.htm 例如:d:/tomcat5.0/webapp/studyteach/index.htm ,注意这里是在根目录生成,你可以生成后放到你想放的文件夹里,保证其它东西如图片的路径正确 这里就写成name = request.getRealPath("") + "/kszx/kszx.htm"; */
RequestDispatcher rd = sc.getRequestDispatcher(url);
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final ServletOutputStream stream = new ServletOutputStream()
{
public void write(byte[] data, int offset, int length) {
os.write(data, offset, length);
}
public void write(int b) throws IOException {
os.write(b);
}
};
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
HttpServletResponse rep = new HttpServletResponseWrapper(response)
{
public ServletOutputStream getOutputStream() {
return stream;
}
public PrintWriter getWriter() {
return pw;
}
};
rd.include(request, rep);
pw.flush();
FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
PrintWriter out = response.getWriter();
out.print("<p align=center><font size=3 color=red>首页已经成功生成!</font></p>");
}
}
web.xml
中添加
<servlet>
<servlet-name>tohtm</servlet-name>
<servlet-class>com.jetsum.mystatic.toHtml</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>tohtm</servlet-name>
<url-pattern>/web/tohtm</url-pattern>
</servlet-mapping>
使用方法很简单 mytest.jsp(wwwroot下)
<a href="web/tohtm?urls=/kszx/kszx.jsp">生成静态页</a> kszx.jsp为要生成htm的动态页
如果不在wwwroot下,在wwwroot/pp下
就要写成
<a href="../web/tohtm?urls=/kszx/kszx.jsp">生成静态页</a>
发表评论
-
Java入门编程实例
2008-06-03 16:38 792php的学习先告一段落了,现在拿出近几天看的视频教 ... -
java基础进阶(文件列表,线程,线程组)编程实例(4篇)
2008-06-09 19:59 1081此处刊登代码均测试通过,完全准确! import j ... -
闭关贴!(含Java实践经验)
2008-06-16 11:32 743由于下周就考试 ... -
JSP环境配置全解!
2008-06-30 12:26 833实现JSP文件环境配置除了MyEclipse外,最 ... -
JSF搭建完成!(源码)
2008-07-07 12:07 1123今天搭建了我的第一个J ... -
Struts搭建完成!(源码)
2008-07-08 17:07 1400今天又搭好了我的第一个Struts框架,虽然觉有些复杂。但是我 ... -
Java连接数据库(mysql,sqlsever,Oracle,access)的调用函数!
2008-07-09 20:34 1783Java连各种数据库容易混淆,所以总结一下: oracle: ... -
实现Java连接mysql(源码)!
2008-07-10 22:14 3760Java连接mysql数据库,代码经过运行准确无误。 下面为实 ... -
Hibernate搭建成功!(源码)
2008-07-12 12:00 918昨天晚上搭建了我的第一个Hibernate框架。感觉挺爽的! ... -
MyEclipse内的Tmocat启动异常解决方案
2008-07-13 18:51 1030在我们平常使用MyEclipse运行项目的时候,往往只需要启动 ... -
Struts+DAO框架搭建完成!(源码)
2008-07-13 21:32 916今天做了这个Struts+DAO框架,可以说是又向SSH迈了一 ... -
一个折磨我一下午的编程问题
2008-07-14 20:36 666今天下午搭Struts+DAO+Hibernate遇到一处错误 ... -
搭SSH时遇到的问题,已解决!
2008-07-16 18:46 759今天下午搭SSH,由于MyEclipse版本的不同,所以在搭的 ... -
JS验证框架的使用方法
2008-07-26 17:01 1103今天着重介绍的是JS验证框架在Java Web项目中的应用, ... -
搭建Servlet在线视频
2008-07-27 22:09 1045这个视频flash上传及在 ... -
快速实现国际化---插件ResourceBunbleEditor的使用
2008-07-29 16:33 1061最近发现一个非常好用的插件,这个插件可以使Java的Web项目 ... -
Java数据库连接池类源码
2008-07-30 21:41 1776环境:MyEclipse 数据库:mysql 首先新建 ... -
Common Dbutils组件的使用(源码)
2008-08-01 20:50 1365Common Dbutils是操作数据库的组件,对传统操作数据 ... -
hibernate错误集锦(转)
2008-08-06 21:03 802**************************hiber ... -
Java测试Mysql数据库的最大连接数
2008-08-07 21:55 1491Java测试Mysql数据库的最大连接数类: import ...
相关推荐
### jsp与Servlet跳转实例:深入理解信息提交与页面跳转 在Web开发中,JSP(Java Server Pages)和Servlet是两个重要的技术组件,它们共同协作来处理客户端请求并生成动态网页内容。本文将详细解析一个具体的案例...
### JSP与Servlet的关系 #### 一、Servlet简介 Servlet技术是Java EE平台的重要组成部分,主要用于构建动态Web应用。在理解JSP与Servlet的关系之前,首先需要了解Servlet的基本概念。 **Servlet**是一种运行在...
在JSP中,Servlet通常用于处理业务逻辑和控制流程。 **JavaBean** 是Java编程中的一个组件模型,它遵循一定的规范来封装数据和行为,以便于在Java应用中重用。JavaBean通常具有公有的构造函数、属性(getter和...
在本实例中,我们使用 JSP 和 Servlet 来实现登录验证功能。JSP 负责接收用户输入,并将其传递给 Servlet 进行处理。Servlet 负责处理用户的请求,并将结果返回给用户。 知识点五:MySQL 数据库连接 在本实例中,...
《基于JSP、Servlet与MySQL的学生管理系统实践》 在信息技术领域,开发一款学生管理系统是学习Web应用程序开发的经典案例。这个小实例将带你深入理解JSP(JavaServer Pages)、Servlet和MySQL数据库的集成应用,...
jsp+servlet实现班级信息管理项目
**JSP与Servlet的关系:** JSP本质上是Servlet的一种简化版本,它们共同工作以处理Web请求。JSP侧重于视图展示,而Servlet负责业务逻辑。在实际应用中,通常采用MVC(Model-View-Controller)模式,Servlet作为控制...
【标题】"jsp+servlet+sql server购物车实例"是一个基于Web开发的电子商务应用程序,它展示了如何使用JavaServer Pages(JSP)、Servlet和Microsoft SQL Server数据库来实现一个基本的在线购物车功能。在这个实例中...
使用原始的servlet操作熟悉EJB的实体管理。 本实例主要功能:实现对员工、角色、账号、部门的关系管理。 本实例的实体设计:部门-员工:一对多。员工-账号:一对一。账号-角色:一对一。 主要采用EJB进行会话管理。...
这是一个以JSP、servlet、JavaBean实现MVC三层架构的简单例子,使用XML作为数据库连接的配置文件。 使用环境:eclipse_3.2、myeclipse_5.1、jdk_6.0、tomcat_5.5、sql server 2005 <br>----------------------...
本实例将深入讲解如何利用JSP和Servlet与数据库进行交互,实现一个基于餐馆数据库的应用。 1. **JSP基础** JSP是一种服务器端的脚本语言,它允许开发者在HTML页面中嵌入Java代码,使得网页具有动态性。JSP页面在...
Servlet和JSP之间的关系可以用"后端处理器"和"前端展示"来理解。Servlet通常处理业务逻辑和数据操作,而JSP则负责呈现视图。在实际开发中,常常使用Servlet来处理请求,调用JavaBean(Java类,封装业务逻辑)进行...
jsp+servlet+jdbc实现简单的购物车实例,购物数据通过session存储 1、加入购物车时,把数据保存在session中 2、点击系统退出时,购物车中的数据插入到数据库购物车表 3、再次登录时,查询数据库购物车表的数据加载到...
JSP与Servlet的关系:** 在Java Web应用中,Servlet通常作为控制器,处理HTTP请求,进行业务逻辑处理,而JSP作为视图,负责展示数据。这种模式被称为MVC(Model-View-Controller)架构,是Web开发中的常见设计模式...
**JSP+Servlet+JavaBean+JDBC简单登录实例详解** 在Web开发中,构建一个用户登录系统是常见的需求。本实例将详细讲解如何利用JavaServer Pages (JSP)、Servlet、JavaBean以及Java Database Connectivity (JDBC) 来...
【标题】"完整简洁的jsp+servlet+jstl实例"是一个综合性的学习资源,旨在帮助初学者或希望深入理解JSP、Servlet和JSTL技术的开发者。这个实例集成了这三个关键技术,提供了一个可以直接运行的项目,使得学习者能够...
一个servlet的demo,使用servlet实现方法具体实现,jsp实现前端
【基于JSP+Servlet小项目】是一个典型的JavaWeb应用程序,它是使用JavaServer Pages(JSP)技术和Servlet进行开发的。这个项目可能包含了从用户界面到后端数据处理的完整流程,展示了如何在Web环境中整合这两种技术...
在学习JSP与Servlet的过程中,学生常常会遇到各种问题,例如概念混淆、操作难度、应用场景的理解以及相关认证考试的准备等,这本书都进行了详尽的解答和深入的探讨。 JSP(Java Server Pages)是Java平台上的动态...
主要介绍了基于jsp+servlet实现的简单博客系统,以完整实例形式分析了基于jsp+servlet简单博客系统的原理与相关技巧,并附带了完整源码供读者下载学习,需要的朋友可以参考下