Servlet、JSP对所有JAVA-WEB编程人员来说再熟悉不过了;但大家在使用的时候是否知道他们的关系呢?
1 Http协议
略(详见[LXH]Http协议.pdf)
2 浏览器与服务器连接的过程
A、Server端:启动并监听某个端口号(如8080)
B、Client端:通过浏览器发起对服务端的请求
C、S:接收请求,并分配一个线程与之连接并开始相互通讯(HTTP,基于TCP)
D、通讯完毕,双方断开连接,回收资源。
(类似Socket的通讯过程,详见[LXH]Java网络编程.pdf)
3 SERVLET/JSP
Server端,都是通过java类取数据并返回html格式的字符串给浏览器解析
3.1最早的方式:Servlet
把html标签字符串写在servlet类里,最后response给浏览器
如 doGet(…){
Out.println(“<html><head></head><body>”);
….
Out.println(“</body></html>”)
…
}
这样的写法很麻烦,而且每次都要在.java类里修改,重新编译,再发布,不便于修改。
3.1.1 HttpServlet源码分析
Provides an abstract class to be subclassed to create an HTTP servlet suitable for a Web site. A subclass of HttpServlet must override at least one method, usually one of these: 必须重写至少1个以下方法
- doGet, if the servlet supports HTTP GET requests
- doPost, for HTTP POST requests
- doPut, for HTTP PUT requests
- doDelete, for HTTP DELETE requests
- init and destroy, to manage resources that are held for the life of the servlet
- getServletInfo, which the servlet uses to provide information about itself
service()接收标准HTTP请求,并将其转发给其所要执行的方法(如doGet,doPost),即先执行service()后自动执行其他方法
查看一下HttpServlet.java源码片段(tomcat源码里可以下载到)
protectedvoid service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String method = req.getMethod();
//往下可以看出,最后还要负责转发原请求
if (method.equals(METHOD_GET)) {
...
doGet(req,resp);
}elseif (method.equals(METHOD_HEAD)) {
...
doHead(req, resp);
} elseif (method.equals(METHOD_POST)) {
doPost(req, resp);
} elseif (method.equals(METHOD_PUT)) {
doPut(req, resp);
} elseif (method.equals(METHOD_DELETE)) {
doDelete(req, resp);
} elseif (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp);
} elseif (method.equals(METHOD_TRACE)) {
doTrace(req,resp);
} else {
...
resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}
}
因此重写service()方法后如果不再调用super.service(req,resp);则不会再做原有的动作了。
doGet()方法(默认返回错误,需子类自己重写)
protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_get_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} else {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
}
}
doPost()方法(默认返回错误,需子类自己重写)
protectedvoid doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_post_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} else {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
}
}
3.2Jsp的方式(底层也是基于Servlet的方式)
JSP Parser:JSP解析器
负责将*.jsp文件转换成一个Servlet类,并且编译供Servlet分析器来执行---最后又走到Servlet流程
Jasper.jar,jsp-api.jar,servlet-api.jar等包(一般java web server都会包含)
我们可以在jsp里把java代码嵌进去
如
<html><head></head><body>
<% 执行java代码%>
</body></html>
(JSP执行过程1)
从上图可以看出,*.jsp通过jsp parser会自动生成一个*.java类,并且编译成*.class文件,供Servlet使用,最后也是走servlet的流程---这个工作一般由web server来完成
以Tomcat为例
Work文件夹里面会为jsp生成相关的java类,并完成编译供运行调用
如 index.jsp------àindex_jsp.java--àindex_jsp.class
查看如下代码段:
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
….
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("\t<title>\r\n");
….
}
查看HttpJspBase源码
org.apache.jasper.runtime
Class HttpJspBase
java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
org.apache.jasper.runtime.HttpJspBase
其就是继承HttpServlet,所以说jsp其最终还是走servlet流程
Web Server 执行生成和编译的时机
--------并不是每次调用都执行,而是在文件创建或修改后的第一次调用,才会执行生成和编译操作.
推荐阅读
代码之余轻松一下:当前热门-人民的名义
相关推荐
这个名为“servlet/jsp深入详解源代码”的资料集合可能包含了他在Servlet和JSP领域的深入讲解,以及相关的源代码示例。 Servlet是Java平台上的一个标准接口,它允许开发者编写可被Web服务器调用的Java代码来处理...
在本文中,我们将深入探讨Servlet和JSP技术,以及如何基于Tomcat服务器进行Web应用程序的开发。Servlet和JSP是Java EE(企业版)平台中用于构建动态网页的关键技术,而Tomcat则是一个广泛使用的开源Java Servlet容器...
综上所述,这个servlet/JSP + mysql BBS项目是一个综合运用Java Web技术和数据库管理的实例,通过Servlet处理业务逻辑,JSP展现用户界面,MySQL存储数据,共同构建了一个交互式的在线论坛系统。
Servlet和JSP是Java Web开发中的核心技术,它们用于构建动态Web应用程序。Servlet是Java编程语言中的一个接口,它允许服务器扩展其功能,处理HTTP请求并返回响应。JSP(Java Server Pages)则是一种视图技术,它将...
韩顺平servlet/jsp 知识详尽 重点突出 适合初学者学习 结合韩老师的视频会有非常好的效果
javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd javax/servlet/jsp/resources/jspxml.dtd javax/servlet/jsp/resources/jsp_2_0.xsd javax/servlet...
java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport 问题-附件资源
【基于Servlet/JSP的学生信息录入查询系统】 这个项目是一个典型的Web应用程序,主要目的是帮助初学者理解和实践Servlet和JSP在构建动态网站时的作用。Servlet是Java服务器端编程的基础,而JSP则是为了简化HTML和...
北大青鸟6.0课件S2使用JSP/Servlet/Ajax技术开发新闻发布系统2,,我只能上传小于50M的文件,所以分了2次上传,下载使用JSP/Servlet/Ajax技术开发新闻发布系统1后就是全部的了。如有问题加Q:329139513.注明来意
Servlet/jsp网上书城是一个基于Java Web开发的项目,它运用了Servlet和JSP(JavaServer Pages)技术来构建一个基本的在线购物平台,用于展示、购买书籍并管理订单。这个项目的核心目标是提供一个用户友好的界面,让...
该功能可以对所有人发言,也可以单独对某一个人发言。运用到的技术servlet/jsp.
本项目“Servlet/jsp编写的网上书城”显然是一款基于这两项技术实现的在线图书销售平台。接下来,我们将深入探讨Servlet、JSP以及它们在构建书城系统中的应用。 **Servlet简介** Servlet是Java提供的一种服务器端的...
配置Servlet/JSP运行环境** 为了运行Servlet和JSP,我们需要安装和配置Servlet容器,比如Apache Tomcat 6.0。Tomcat是一个开源的Servlet容器,符合Servlet和JSP规范,能提供运行Java Web应用的环境。 **5-17. 编写...
标题中的“servlet/jsp(jtds)实例”可能是指一个教学项目或案例,展示了如何在Servlet和JSP中使用jtds驱动程序访问SQL Server数据库。jtds是一个开源的JDBC驱动程序,专门用于与Microsoft SQL Server和Sybase ASE...
Servlet和JSP(JavaServer Pages)是Java Web开发中的核心技术,它们构成了Web应用程序的基础。在Java API中,Servlet和JSP API提供了处理HTTP请求、动态生成响应内容以及与数据库交互的能力。这篇详述将深入解析这...
### Servlet与JSP深入详解:基于Tomcat的Web开发 #### 一、Servlet技术概述 Servlet是一种用Java编写的服务器端应用程序接口(API),它扩展了Java Web开发的功能。Servlet可以响应HTTP请求,并且能够处理复杂的...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个关键组件,它们共同构建了动态Web应用程序的基础。** **JSP技术:** JSP是一种服务器端的技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...
本教程通过"jsp-servlet-javaBean.zip"压缩包,旨在帮助开发者深入理解并熟练运用Servlet、JSP(JavaServer Pages)以及JavaBean,实现经典的MVC(Model-View-Controller)设计模式。以下将详细介绍这三个核心概念...
在`error.jsp`页面中,开发者可以获取`request`对象中包含的错误信息,如状态码(`javax.servlet.error.status_code`)、错误消息(`javax.servlet.error.message`)和异常类型(`javax.servlet.error.exception_...
Servlet和JSP(JavaServer Pages)是Java EE中两个核心的组件,它们在Web应用程序的开发中起着至关重要的作用。 Servlet是一种Java类,它被设计用来扩展服务器的功能,尤其是Web服务器。Servlet API提供了处理HTTP...