Javaweb——第二章 Jsp和Servlet

目录

2.1 JSP概述

2.2 Servlet概述

2.3 jsp和servlet的区别和联系:

​编辑 2.4 Jsp的生命周期

2.4.1 JSP编译

2.4.2 JSP初始化

2.4.3 JSP执行

2.4.4 JSP清理

2.5 Servlet

2.5.1 Servlet的工作模式

2.5.2 Servlet创建方式

2.5.3 Servlet生命周期

2.1 JSP概述

JSP(全称Java Server Pages),中文名叫JAVA服务器页面,其根本是一个简化的Servlet设计,是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML、XML或其他格式文档的Web网页的技术标准。 JSP技术有点类似A5P技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件。 JSP技术是以Java语言作为脚本语言,JSP 网页为整个服务器端的Java库单元提供了一个接口来服务于HTTP的应用程序。JSP文件后缀名为*.jsp。用SP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。 JSP开发的WEB应用可以跨平台使用,既可以运行在Linux上也能运行在 windows 上。

2.2 Servlet概述

Servlet是javaEE规范中的一种,javaEE中的规范很多除了Servlet还有很多我们熟悉的JSP、JDBC、RMI、XML、EB、JTS等等。他们每个都有自己不同的角色,每一种规范在企业级java应用中都承担了不可或缺的角色。Servlet是Service + Applet的缩写,表示小服务程序。从命名就可以看出他是被用来书写服务端程序的。 但是在这个很讲究开发效率的年代已久见不到原生的Servlet程序写的服务端程序了。几乎主流的框架都对他进行了封装,比如 SpringMVC便是如此,比如SpringMVC的核心DispatcherServlet,SpringMVC正是基于他来将请求进行解析、适配、映射的最后到达我们想要调用的接口中。 Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。 使用Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页

视图层到程序

2.3 jsp和servlet的区别和联系:

1.jsp经编译后就变成了Servlet. (JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到. Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。

而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

联系: JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。 Servlet和JSP最主要的不同点在于: Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。

而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

JSP侧重于视图,Servlet主要用于控制逻辑

Servlet更多的是类似于一个Controller,用来做控制。

理解以下三点即可:

1、不同之处在哪?

Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容 JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容 2、各自的特点

Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差 JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的 3、通过MVC双剑合璧 既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model-View-Controller)模式非常适合解决这一问题。

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):

Controller——负责转发请求,对请求进行处理 View——负责界面显示 Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现 在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:

 Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发) Controller(Servlet)调用核心业务逻辑——Model部分,获得结果 Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容 动态生成的HTML内容返回到浏览器显示 MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。

 2.4 Jsp的生命周期

JSP的生命周期指从创建到销毁的整个过程。分为以下几个阶段:

1:编译阶段:servlet引擎编译servlet源文件,生成servlet类。当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果之前没有被编译过或者编译后被更改过,则编译这个JSP文件。编译过程包含三个步骤:解析JSP文件--将JSP转换为servlet--编译servlet。 ​ 
2:初始化阶段:加载与JSP对应的servlet类,创建其实例并调用初始化方法。容器载入JSP文件后,会首先调用jspInit()方法。次方法可以重写,一般情况写程序只初始化一次,通常情况下可以在此方法中初始化数据库连接、打开文件和创建查询列表。 ​ 
3:执行阶段:调用与JSP对应的servlet实例的服务方法。当JSP网页初始化完成后,JSP引擎会调用_jspService()方法。此方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为参数。惊悚片Service()方法在每个request中被调用一次并且负责产生与之对应的response对象,别且还负责产生HTTP方法对应的回应。 ​ 
4:调用JSP对应的servlet实例的销毁方法,然后销毁servlet实例。jspDestroy()负责执行JSP网页从容器中的清理。涉及到的工作为释放数据库连接、关闭文件夹等等。

编译阶段:   servlet容器编译servlet源文件,生成servlet类

初始化阶段:   加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

执行阶段:   调用与JSP对应的servlet实例的服务方法

销毁阶段:   调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

2.4.1 JSP编译

  当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

编译的过程包括三个步骤:

解析JSP文件。
将JSP文件转为servlet。
编译servlet。

2.4.2 JSP初始化

  容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果需要执行自定义的JSP初始化任务,重写jspInit()方法就行了,就像:

public void jspInit(){
  // 初始化代码
}

2.4.3 JSP执行

  这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。

  当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。

  _jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数,就像下面这样:

void _jspService(HttpServletRequest request,
                 HttpServletResponse response)
{
   // 服务端处理代码
}

注:_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。

2.4.4 JSP清理

  JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

  jspDestroy()方法在JSP中等价于servlet中的销毁方法。当需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

  jspDestroy()方法的格式如下:

public void jspDestroy()
{
   // 清理代码
}

2.5 Servlet

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

2.5.1 Servlet的工作模式

  • 客户端发送请求至服务器

  • 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器

  • 服务器将响应返回客户端

2.5.2 Servlet创建方式

Servlet配置及使用详解_尘埃丶落定的博客-CSDN博客_servlet配置

  1. 实现Servlet 接口

    javax.servlet.Servlet 是 Servlet API 的核心接口,所有的 Servlet 类都直接或间接地实现了这一接口。

    Servlet 接口中定义了 5 个方法

 

public class MyServlet implements Servlet {
    //Servlet 实例被创建后,调用 init() 方法进行初始化,该方法只能被调用一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }
    //返回 ServletConfig 对象,该对象包含了 Servlet 的初始化参数
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    //每次请求,都会调用一次 service() 方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //设置字符集
        servletResponse.setContentType("text/html;charset=UTF-8");
        //使用PrintWriter.write()方法向前台页面输出内容
        PrintWriter writer = servletResponse.getWriter();
        writer.write("Hello,MyServlet...");
        writer.close();
    }
    //返回关于 Servlet 的信息,例如作者、版本、版权等
    @Override
    public String getServletInfo() {
        return null;
    }
    //Servelet 被销毁时调用
    @Override
    public void destroy() {
    }
}

配置

<servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.lele.HelloServlet</servlet-class>
    </servlet>
​
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/servlet/first</url-pattern>
    </servlet-mapping>
  1. 继承GenericServlet 抽象类

    javax.servlet.GenericServlet 实现了 Servlet 接口,并提供了除 service() 方法以外的其他四个方法的简单实现。通过继承 GenericServlet 类创建 Servlet ,只需要重写 service() 方法即可,大大减少了创建 Servlet 的工作量。

    GenericServlet 类中还提供了以下方法,用来获取 Servlet 的配置信息。

 通过继承 GenericServlet 抽象类创建 Servlet,示例代码如下。

public class MyGenericServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //设置字符集
        servletResponse.setContentType("text/html;charset=UTF-8");
        //使用PrintWriter.write()方法向前台页面输出内容
        PrintWriter writer = servletResponse.getWriter();
        writer.write("Hello,MyGenericServlet...");
        writer.close();
    }
}

别忘记配置!!!

  1. 继承HttpServlet 抽象类最为常用

    javax.servlet.http.HttpServlet 继承了 GenericServlet 抽象类,用于开发基于 HTTP 协议的 Servlet 程序。由于 Servlet 主要用来处理 HTTP 的请求和响应,所以通常情况下,编写的 Servlet 类都继承自 HttpServlet。

    在 HTTP/1.1 协议中共定义了 7 种请求方式,即 GET、POST、HEAD、PUT、DELETE、TRACE 和 OPTIONS。

    HttpServlet 针对这 7 种请求方式分别定义了 7 种方法,即 doGet()、doPost()、doHead()、doPut()、doDelete()、doTrace() 和 doOptions()。

    HttpServlet 重写了 service() 方法,该方法会先获取客户端的请求方式,然后根据请求方式调用对应 doXxx 方法。

    由于我们使用的请求方式主要是 GET 和 POST,所以通过继承 HttpServlet 类创建 Servlet 时,只需要重写 doGet 或者 doPost 方法,代码如下。

    public class MyHttpServlet extends HttpServlet {
     
        public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //使用PrintWriter.write()方法向前台页面输出内容
            resp.setContentType("text/html;charset=UTF-8");
            PrintWriter writer = resp.getWriter();
            writer.write("Hello,MyHttpServlet,doGet...");
            writer.close();
        }
     
        public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //使用PrintWriter.write()方法gaifang向前台页面输出内容
            PrintWriter writer = resp.getWriter();
            writer.write("Hello,MyHttpServlet,doPost...");
            writer.close();
            doGet(req, resp);
        }
    }

    配置别忘记!!!

2.5.3 Servlet生命周期

 servlet的生命周期就是从servlet出现到销毁的全过程。主要分为以下几个阶段: 加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁

 生命周期方法详解

创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。(默认)

  1. init() 方法 调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次(初始化阶段) (1)init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,创建于用户第一次调用该 Servlet 的 URL 时,也可以指定 Servlet 在服务器第一次启动时被加载。

(2)当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。

(3)init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

init 方法的定义如下:

public void init() throws ServletException { // 初始化代码... }

  1. service() 方法 响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。(响应客户请求阶段)

(1)service() 方法是执行实际任务的主要方法,处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

(2)每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。

(3)Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。由于在Servlet接口和GenericServlet中是没doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,所以,我们每次定义一个Servlet的时候,都必须实现doGet或 doPost等这些方法。

(4)service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法进行处理。

service方法的定义如下:

public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException{ } 由于service() 方法由容器调用,service 方法在适当的时候会调用 doGet、doPost、doPut、doDelete 等方法。所以,我们不用对 service() 方法做任何处理,只需要根据客户端的请求类型来重写 doGet() 或 doPost() 即可。

  1. doGet() 方法 用于处理请求,方法是运行的在多线程状态下的。(响应客户请求阶段)

doGet() 是服务请求中最常用的方法,用于处理请求,当URL的请求类型为GET请求 ,或者是一个未指定请求类型HTML表单,那么该请求将由 doGet() 方法处理。

doGet方法的定义如下:

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 }

  1. doPost() 方法 用于处理请求,方法是运行的在多线程状态下的。(响应客户请求阶段)

doPost() 是服务请求中最常用的方法,用于处理请求,当请求来自一个特别指定了 请求类型为POST的 HTML 表单,那么该请求将由doPost() 方法处理。

doPost方法的定义如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 } 5、destroy() 方法 在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。(终止阶段)

(1)destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。

(2)destroy() 方法可以让Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

(3)在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

destroy 方法定义如下:

public void destroy() { // 终止化代码... }

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
http://download.csdn.net/detail/jincheng52rmb/5349256 http://download.csdn.net/detail/jincheng52rmb/5349247 http://download.csdn.net/detail/jincheng52rmb/5349230 <<Java Web典型模型与项目实战大全>> 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 由于上传限制共分成4卷 下面是其它三卷的链接 第二卷: http://download.csdn.net/detail/jincheng52rmb/5349256 第三卷: http://download.csdn.net/detail/jincheng52rmb/5349247 第四卷: http://download.csdn.net/detail/jincheng52rmb/5349230 第1篇 开发工具及框架概述 第1章 开发前奏 第2章 MyEclipSO开发工具对各种框架的支持: 第3章 实现各种框架的集成 第2篇 典型模块开发 第4章 在线文本编辑器(FCKeditor) 第5章 验证模块(JSP+Serylet+JSValldation) 第6章 网络硬盘(JSP+Servlet) 第7章 网站统计模块(JSP+Servlet) 第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+Servlet+JavaBean) 第13章 网络留言板续——Oracle数据库 第14章 AJAX技术JQuery框架的经典应用 第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+JFreeChat) 第17章 商业银行网上账户管理系统(Struts2.X) 第18章 Hibernate分页系统(Hibernate3.0) 第19章 生成保表(Struts 2.X+Hibernate+JXL) 第20章 数据格式转换(Struts 2.X+Hibernate+Dom4j) 第21章 用户维护功能(Struts 2.X+iBATIS) 第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2.X) 第24章 数据汇聚系统(Struts 2.X+Spring+iBATIS) 第25章 投票管理系统(Struts 2.X+Spring+Hibernate) 第26章 权限管理系统(Struts 2.X+Spring+JPA) 第27章 商业银行设备巡检系统(Struts 2.X+Spring+Hibernate)
<<Java Web典型模型与项目实战大全>> 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 由于上传限制共分成4卷 请手动搜索其它3卷下载 或点击上传者的链接可直接查到 第1篇 开发工具及框架概述 第1章 开发前奏 第2章 MyEclipSO开发工具对各种框架的支持: 第3章 实现各种框架的集成 第2篇 典型模块开发 第4章 在线文本编辑器(FCKeditor) 第5章 验证模块(JSP+Serylet+JSValldation) 第6章 网络硬盘(JSP+Servlet) 第7章 网站统计模块(JSP+Servlet) 第8章 网络购物车(JSP+Servlet+JavaBean) 第9章 搜索索引(Lucene+Web Spider) 第10章 在线网上支付(JSP+Swrvlet+JavaBean) 第11章 JavaWeb邮件发送系统(JSP+Servlet+JavaBean) 第12章 网络留言板(JSP+Servlet+JavaBean) 第13章 网络留言板续——Oracle数据库 第14章 AJAX技术JQuery框架的经典应用 第15章 在线文件上传和下载(Struts 2.X+FileUpload) 第16章 网上投票系统(Struts2.X+JFreeChat) 第17章 商业银行网上账户管理系统(Struts2.X) 第18章 Hibernate分页系统(Hibernate3.0) 第19章 生成保表(Struts 2.X+Hibernate+JXL) 第20章 数据格式转换(Struts 2.X+Hibernate+Dom4j) 第21章 用户维护功能(Struts 2.X+iBATIS) 第22章 用户登录模块(Struts 2.X+Guice+国际化) 第3篇 项目案例实战 第23章 在线音乐管理系统(AJAX+JSP+Struts 2.X) 第24章 数据汇聚系统(Struts 2.X+Spring+iBATIS) 第25章 投票管理系统(Struts 2.X+Spring+Hibernate) 第26章 权限管理系统(Struts 2.X+Spring+JPA) 第27章 商业银行设备巡检系统(Struts 2.X+Spring+Hibernate)
第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建显示WEB页 2.2.3、创建表单WEB页 2.3、JavaScript简介 2.3.1、JavaScript的基本语法 2.3.2、事件处理 2.3.3、window对象 2.4、本章摘要 2.5、开发实战讲解 第3章 XML简介 3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 4.1、Web容器简介 4.2、Tomcat简介 4.3、Tomcat服务器的下载及配置 4.3.1、Tomcat下载 4.3.2、Tomcat安装 4.3.3、服务器配置 4.4、编写第一个jsp文件 4.5、交互性 4.6、本章摘要 4.7、开发实战讲解 第5章 JSP基础语法 5.1、JSP注释 5.2、Scriptlet 5.2.1、第一种Scriptlet: 5.2.2、第二种Scriptlet: 5.2.3、第三种Scriptlet: 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象概览 6.2、四种属性范围 6.2.1、page属性范围(pageContext范围) 6.2.2、request属性范围 6.2.3、session属性范围 6.2.4、application属性范围 6.2.5、深入研究page属性范围 6.3、request对象 6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象 6.6.1、取得虚拟目录对应的绝对路径 6.6.2、范例讲解:网站计数器 6.6.3、查看application范围的属性 6.7、WEB安全性及config对象 6.7.1、WEB安全性 6.7.2、config对象 6.8、out对象 6.9、pageContext对象 6.10、本章摘要 6.11、开发实战讲解(基于Oracle数据库) 第7章 JavaBean 7.1、JavaBean简介 7.2、在JSP中使用JavaBean 7.2.1、WEB开发的标准目录结构 7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6、JavaBean的保存范围 7.6.1、page范围的JavaBean 7.6.2、request范围的JavaBean 7.6.3、session范围的JavaBean 7.6.4、application范围的JavaBean 7.7、JavaBean的删除 7.8、实例操作:注册验证 7.9、DAO设计模式 7.9.1、DAO设计模式简介 7.9.2、DAO开发 7.9.
第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器与浏览器 2.2、HTML简介 2.2.1、HTML元素概览 2.2.2、创建显示WEB页 2.2.3、创建表单WEB页 2.3、JavaScript简介 2.3.1、JavaScript的基本语法 2.3.2、事件处理 2.3.3、window对象 2.4、本章摘要 2.5、开发实战讲解 第3章 XML简介 3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4章 Tomcat服务器的安装及配置 4.1、Web容器简介 4.2、Tomcat简介 4.3、Tomcat服务器的下载及配置 4.3.1、Tomcat下载 4.3.2、Tomcat安装 4.3.3、服务器配置 4.4、编写第一个jsp文件 4.5、交互性 4.6、本章摘要 4.7、开发实战讲解 第5章 JSP基础语法 5.1、JSP注释 5.2、Scriptlet 5.2.1、第一种Scriptlet: 5.2.2、第二种Scriptlet: 5.2.3、第三种Scriptlet: 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态包含 5.6、跳转指令 5.7、实例操作:用户登陆程序实现(JSP + JDBC实现) 5.7.1、创建数据库表 5.7.2、程序实现思路 5.7.3、程序实现 5.8、本章摘要 5.9、开发实战讲解(基于Oracle数据库) 第6章 JSP内置对象 6.1、JSP内置对象概览 6.2、四种属性范围 6.2.1、page属性范围(pageContext范围) 6.2.2、request属性范围 6.2.3、session属性范围 6.2.4、application属性范围 6.2.5、深入研究page属性范围 6.3、request对象 6.3.1、乱码解决 6.3.2、接收请求参数 6.3.3、显示全部的头信息 6.3.4、角色验证 6.3.5、其他操作 6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象 6.6.1、取得虚拟目录对应的绝对路径 6.6.2、范例讲解:网站计数器 6.6.3、查看application范围的属性 6.7、WEB安全性及config对象 6.7.1、WEB安全性 6.7.2、config对象 6.8、out对象 6.9、pageContext对象 6.10、本章摘要 6.11、开发实战讲解(基于Oracle数据库) 第7章 JavaBean 7.1、JavaBean简介 7.2、在JSP中使用JavaBean 7.2.1、WEB开发的标准目录结构 7.2.2、使用JSP的page指令导入所需要的JavaBean 7.2.3、使用指令 7.3、JavaBean与表单 7.4、设置属性: 7.4.1、设置指定的属性 7.4.2、指定设置属性的参数 7.4.3、为属性设置具体内容 7.5、取得属性: 7.6、JavaBean的保存范围 7.6.1、page范围的JavaBean 7.6.2、request范围的JavaBean 7.6.3、session范围的JavaBean 7.6.4、application范围的JavaBean 7.7、JavaBean的删除 7.8、实例操作:注册验证 7.9、DAO设计模式 7.9.1、DAO设计模式简介 7.9.2、DAO开发 7.9.3、JSP调用DAO 7.10、本章摘要 7.11、开发实战讲解(基于Oracle数据库) 第8章 文件上传 8.1、smartupload上传组件 8.1.1、上传单个文件 8.1.2、混合表单 8.1.3、为上传文件自动命名 8.1.4、批量上传 8.2、FileUpload 8.2.1、使用FileUpload接收上传内容 8.2.2、保存上传内容 8.2.3、开发FileUpload组件的专属操作类 8.3、本章摘要 8.4、开发实战讲解(基于Oracle数据库) 第9章 Servlet程序开发 9.1、Servlet简介 9.2、永远的“HelloWorld”:第一个Servlet程序 9.3、Servlet与表单 9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、WEB开发模式:Mode I与Mode II 9.8.1、Mode I 9.8.2、Mode II:Model-View-Controller 9.9、实例操作:MVC设计模式应用 9.10、过滤器 9.10.1、过滤器的基本概念 9.10.2、实现过滤器 9.10.3、过滤器的应用 9.11、监听器 9.11.1、对application监听 9.11.2、对session监听 9.11.3、对request监听 9.11.4、监听器实例 —— 在线人员统计 9.12、本章摘要 9.13、开发实战讲解(基于Oracle数据库) 第10章 表达式语言 10.1、表达式语言简介 10.2、表达式语言的内置对象 10.2.1、访问四种属性范围的内容 10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作原理 11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义有标签体的标签库 12.6、开发迭代标签 12.7、BodyTagSupport类 12.8、TagExtraInfo类和VariableInfo类 12.9、使用BodyTagSupport开发迭代输出 12.10、简单标签 12.11、DynamicAttributes接口 12.12、本章摘要 第13章 标准标签库(JSTL) 13.1、JSTL简介 13.2、安装JSTL 1.2 13.3、核心标签库 13.3.1、标签 13.3.2、标签 13.3.3、标签 13.3.4、标签 13.3.5、标签 13.3.6、、、标签 13.3.7、标签 13.3.8、标签 13.3.9、标签 13.3.10、标签 13.3.11、标签 13.4、国际化标签库 13.4.1、标签 13.4.2、标签 13.4.3、读取资源文件 13.4.4、数字格式化标签 13.4.5、日期时间格式化标签 13.4.6、设置时区 13.5、SQL标签库 13.5.1、 13.5.2、数据库操作标签 13.5.3、事务处理 13.6、XML标签库 13.6.1、XPath简介 13.6.2、标签 13.6.3、标签 13.6.4、标签 13.6.5、标签 13.6.6、、、标签 13.6.7、标签 13.7、函数标签库 13.8、本章摘要 13.9、开发实战讲解(基于Oracle数据库) 第14章 AJAX开发技术 14.1、AJAX技术简介 14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发环境 15.3、开发第一个Struts程序 15.4、Struts工作原理 15.5、深入Struts应用 15.6、本章摘要 15.7、开发实战讲解(基于Oracle数据库) 第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic标签 16.3.1、标签和标签 16.3.2、标签和标签 16.3.3、关系运算标签 16.3.4、标签 16.3.5、重定向标签: 16.4、Html标签 16.4.1、<html:form>标签 16.4.2、<html:text>与<html:password>标签 16.4.3、<html:radio>标签 16.4.5、<html:textarea>标签 16.4.6、<html:hidden>标签 16.4.7、按钮标签 16.4.8、实例:编写基本表单 16.4.9、复选框标签 16.4.10、下拉列表框 16.5、本章摘要 16.6、开发实战讲解(JSP + Oracle) 第17章 Struts高级开发 17.1、Struts多人开发 17.2、Token 17.3、文件上传 17.4、动态ActionForm 17.5、Action深入 17.5.1、ForwardAction 17.5.2、IncludeAction 17.5.3、DispatchAction 17.6、验证框架 附录A:实用工具 18.1、JavaMail 18.1.1、James邮件服务器的下载及配置 18.1.2、JavaMail简介及配置 18.1.3、发送普通邮件 18.1.4、发送带附件的HTML风格邮件 18.2、操作Excel文件 18.2.1、JExcelAPI简介 18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat服务器 19.5、MyEclipse卸载 19.6、本章摘要 附录C:HTTP状态码及头信息 20.1、HTTP状态码 20.2、HTTP头信息
以下是一个简单的JavaWeb图片上传回显的JSPServlet的完整代码: 1. JSP 文件代码: ``` <!DOCTYPE html> <html> <head> <title>Image Upload and Display</title> </head> <body> <h1>Image Upload and Display</h1> <form action="ImageUploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="file" /><br/><br/> <input type="submit" value="Upload" /> </form> <br/><br/> <% if(request.getAttribute("imagePath") != null) { %> <img src="<%= request.getContextPath() %>/<%= request.getAttribute("imagePath") %>" /> <% } %> </body> </html> ``` 2. Servlet 文件代码: ``` import java.io.File; import java.io.IOException; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/ImageUploadServlet") @MultipartConfig(fileSizeThreshold=1024*1024*2, maxFileSize=1024*1024*10, maxRequestSize=1024*1024*50) public class ImageUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String imagePath = null; String appPath = request.getServletContext().getRealPath(""); String savePath = appPath + File.separator + "uploads"; File fileSaveDir = new File(savePath); if (!fileSaveDir.exists()) { fileSaveDir.mkdir(); } for (Part part : request.getParts()) { String fileName = extractFileName(part); if (fileName != null && !fileName.equals("")) { String extension = fileName.substring(fileName.lastIndexOf(".")); String uuid = UUID.randomUUID().toString(); imagePath = "uploads" + File.separator + uuid + extension; part.write(savePath + File.separator + uuid + extension); } } request.setAttribute("imagePath", imagePath); request.getRequestDispatcher("index.jsp").forward(request, response); } private String extractFileName(Part part) { String contentDisp = part.getHeader("content-disposition"); String[] items = contentDisp.split(";"); for (String s : items) { if (s.trim().startsWith("filename")) { return s.substring(s.indexOf("=") + 2, s.length()-1); } } return null; } } ``` 在这个例子中,我们使用了Servlet 3.0的@MultipartConfig注解来处理文件上传。这个注解告诉容器这个Servlet将会接收multipart/form-data类型的请求,并且指定了上传文件的大小限制。在doPost()方法中,我们首先获取应用程序的根目录,并且创建一个名为“uploads”的文件夹来保存上传的文件。然后,我们遍历所有的文件部件,提取文件名,并且生成一个唯一的UUID和文件扩展名的组合作为文件名。最后,我们将文件保存到uploads文件夹中,并且将图片路径作为请求属性存储,并且转发到JSP页面以显示上传的图片。 请注意,这里的示例代码仅供参考,您需要根据自己的需求进行修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值