Jsp之三 servlet基础

简介: Jsp之三 servlet基础

Servlet带给开发人员最大的好处是它可以处理客户端传来的http请求,并返回一个响应。Servlet是一个java类,java语言能够实现的功能,servlet基本上都可以实现。


Ø       可移植性


  因为servlet是由java开发并符合规定定义和广泛接受的API他可以再不同操作系统和不同的应用服务器平台下移植。


Ø       集成


  Servlet和服务器紧密集成,他们可以密切合作完成特东的任务。


Ø       模块化


每一个servlet可以完成一个特定任务,并且可以将他们并在一起工作,servlet之间是可以交流的。


Ø       高效耐久


  Servlet一旦载入,他就驻留在内存中,这样加快了响应的速度。在服务器上仅有一个java虚拟机在运行,他的优势在于,当servlet被客户端发送的第一个请示激活,以后他就可以运行于后台,等待以后的请求,所以我们在第一次反问servlet页面时通常有点慢,之后就很快了(当然首次的servlet载入也可以是在服务器启动时,由web程序的配置文件web.xml而定)。每个请求将生成一个线程而不是进程


Servlet的生命周期


在学习servlet的生命周期之前,我们先做一个servlet的小例子,熟悉一下servlet的运行过程


Ø       建立web项目目录


打开tomcat安装目录进入webapps文件夹,新建一个文件夹作为我们项目的根目录,名字为servlettest,那么这个项目的名字就叫做servlettest。然后在servlettest目录下建立一个名为WEB-INF的文件夹(注意这个文件夹必须是要大写的),在WEB-INF下建立classes文件夹,同时在WEB-INF下建立一个名为web.xml的文件。准备工作已经做完,下面开始开发第一个servlet程序。


Ø       创建servlet类文件


如程序3-1所示


【3-1】import java.io.*
import javax.servlet.*
import javax.servlet.http.*
public class ServletDemo extends HttpServlet  {
    public void doGet(HttpServletRequest req,
HttpServletResponse res )throws ServletException,IOException{
           PrintWriter out=res.getWriter();
           out.println("hello,world");
    }
}

将这个类文件,在命令行下编译得到一个ServletDemo.class的字节码文件,之后将此字节码文件copy到刚才建立的classes目录下即可。下面我们需要做的就是让服务器知道有这么一个servlet存在,并在客户端用户按照规定反问这个servlet的时候,此servlet能够正确的响应结果


Ø       改写web.xml文件


如清单【3-2】所示


【3-2】<?xmlversion="1.0" encoding="UTF-8"?>
<web-appxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">
 <servlet>
       <servlet-name>serdemo</servlet-name>
        <servlet-class>com.fin.ServletDemo</servlet-class>
    </servlet>
 <servlet-mapping>
       <servlet-name>serdemo</servlet-name>
       <url-pattern>/firstservlet</url-pattern>
    </servlet-mapping>
</web-app>

对于web.xml中的内容,最为重要的就是和中的内容,在此先知道这些,在下一小节中将介绍配置文件。到此第一个servlet的开发已经完成,下面需要启动服务器测试我们的servlet。


Ø       运行servlet


进入tomcat安装目录的bin目录执行startup.bat文件,之后打开浏览器请求http://localhost:8080页面如果出现如图【3-3】所示则说明tomcat已正常启动


图【3-3】

之后再地址栏中输入http://localhost:8080/servlettest/firstservlet请求刚刚开发的servlet,如若页面中出现图【3-4】情形则说明此servlet运行正常。

图【3-4】

好让我们总结一下servlet的开发流程,首先建立web项目的目录,其次开发servlet程序,然后修改配置文件,最后启动服务器tomcat运行servlet测试调试运行。


Ø       Servlet的生命周期


我们曾说过,服务器只创建每个servlet的单一实例,每个用户请求都会引发新的线程—将用户请求交付给相应的doGet或是doPost运行出来。现在,我们更为详细的介绍servlet的创建和销毁方式,以及调用各种方法的方式和时间。我们首先汇总一下。


在创建servlet时,他的init方法会得到调用,因此,init是放置一次性设置代码的地方。在这之后,针对每个用户的请求,都会创建一个线程,该线程会调用前面创建实例的service方法,而不会重新的调用init方法(除非前面创建的servlet实例已经销毁)。最后,如果服务器决定卸载某个servlet,他会首先调用destroy方法


1、service方法


HttpServlet类中有一个service(HttpServletRequest  req,HttpServletResponse  res)方法,而一般的servlet都继承自HttpServlet这个类,所以一般的Servlet都具有service()这个方法,service方法是在用户使用浏览器请求Servlet时调用,service方法能够判断用户请求Servlet的方法如: Get、Post、Delete等,然后根据判定的结果调用执行doGet()或者doPost()或者doDelete()方法。正常的url请求,或是没有指定Method的html表单都是GET请求。把html表单中的method设置成post的请求为post请求。


      如果你需要在Servlet中等同的处理post和get请求,只需要将doPost调用doGet方法或是用doGet调用doPost方法。如清单【3-5】所示:


清单【3-5】

  Public void doGet(HttpServletRequest  req,HttpServletResponse res)
 throws ServletException,IOException{
       //
                  //程序块
}
Publicvoid doPost(HttpServletRequest req,HttpServletResponse res)
 throws ServletException,IOException{
                doGet(req,res);
}


在Servlet中我们99%的时间只关心get和post请求,所以我们在Servlet中覆盖doGet()和doPost()方法


2、init方法


大多数时候,你的Servlet只需要处理单个请求的数据,doGet()或doPost()是生命周期中唯一需要的方法,然而有时候我们希望在Servlet首次载入的时候,执行一些复杂的初始化任务,但并不想每个请求都重复这些任务。Init方法就专为这种情况设计。所以,他主要用于一次性的初始化工作,Servlet一般在用户首次调用对应Servlet的URL的创建,但也可以指定Servlet在服务器启动后载入,这可以再web.xml中设定。


      例如:在Servlet中创建一个有十个整数组成的数组。由于这些数据都来源于复杂的计算,我们不希望每次都重复这些计算。因此doGet查找init中计算得出的值,而不是每次都生成他们。如清单【3-6】所示


【3-6】

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class InitServlet extends HttpServlet {
    private long modTime;   
    private  int [] numbers=new int[10];
    public void init(){
       modTime=System.currentTimeMillis()/1000*1000;
       for(int i=0;i<numbers.length;i++){
           numbers[i]=randomNum();
       }
    }
    private int randomNum(){//得到一到一百随机数
       return (int)(Math.random()*100);
    }   
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
           throws ServletException,IOException {      
       doPost(req, res);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse res)
           throws ServletException,IOException {
       PrintWriter out=res.getWriter();      
       for(int i=0;i<numbers.length;i++){
           out.println(numbers[i]);
       }   
    }
    @Override
    protected long getLastModified(HttpServletRequest req) {
       // TODO Auto-generatedmethod stub
       return modTime;
    }
}


安装上面步骤我们将此Servlet所编译生成的字节码文件copy到classes目录中同样修改web.xml,将清单【3-7】代码加入到web.xml中的之间,重新启动tomcat运行即可得到如图【3-7】所示的现实结果。

【3-7】

<servlet-name>servinit</servlet-name>
     <servlet-class>InitServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>servinit</servlet-name>
        <url-pattern>/initservlet </url-pattern>
</servlet-mapping>


【3-8】


我们每次涮新页面,得到的结果都是这个结果,而在Servlet中我们知道这十个数都是随机生成的,每一次调用都应该产生不同的结果,所以可以肯定这个init方法制备调用了一次,只要服务器没有重启,那么浏览器就会一直返回这样的结果。


1.       destroy()方法


服务器可能会决定移除之前载入的Servlet实例,或许因为服务器的管理员要求这样做。但是在服务器移除Servlet的实例之前,他会调用Servlet的destroy方法,从而使得Servlet有机会关闭数据库连接、停止后台运行的线程、将cookie列表和点击计数写入到磁盘、并执行其他清理活动。但是,要意识到Web服务器有可能崩溃。因此不要将destroy机制作为向磁盘上保存状态的唯一机制。如服务器执行诸如点击计数,或对cookie值的列表经行累加等活动,应该主动地定期将数据写到磁盘上。


Servlet的配置文件


在前面的例子中,我们知道每创建完一个Servlet后,在Servlet运行之前都需要把Servlet的一些信息写入到web.xml中,这就是对Servlet的配置,最基本的配置是这样的,必须在中指定Servlet的名字,以及Servlet对应的类文件,即在中指定Servlet的名字,这个名字是随意的,但最好要有一定的意义,在指定类的全名,及如果这个Servlet是打包的Servlet的话,要把包的名字也跟上。另外在需要描述出具体Servlet的url访问路径,即在中指定具体的Servlet名字,这个名字必须和中指定的Servlet名字相同,在中指定具体的url路径,这个url路径必须以“/”开头。这样配置完之后,就可以在浏览器中访问Servlet了。

Servlet的乱码处理

Servlet的部署运行


Servlet编写完之后,必须将Servlet编译之后生成的字节码文件copy到WEN-INF目录下的classes文件夹,至于Servlet的.java文件,我们可以放在任何位置,但为了项目的整齐美观,最好在项目的根目录下创建一个名为scr的文件件,将Servlet的源文件放入其中,方便开发者查看修改,另外需要注意的就是,不要玩了在web.xml中加入此Servlet的配置信息,如果这些事情都已完成,就将此web项目copy到服务器tomcat安装根目录下的wabapp下,启动服务器tomcat即可运行Servlet。


总结


本章主要介绍一些Servlet的基本知识,是J2EE开发者必须掌握的知识,也是初学者一个很好的基础。


在本章我们主要学习了:


1、开发一个简单Servlet所用到的类。


2、用PrintWriter类的对象可以再浏览器上输入信息。


3、怎样将Servlet的输出的信息用中文显示。


4、Servlet的生命周期,即init、service、destroy方法在何时调用。


5、Servlet信息如何在web.xml中进行配置。


如何部署Servlet,使其可以在服务器上能正常运行。


目录
相关文章
|
5天前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
|
5天前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
|
5天前
|
缓存 小程序 前端开发
Java服务器端技术探秘:Servlet与JSP的核心原理
【6月更文挑战第23天】Java Web开发中的Servlet和JSP详解:Servlet是服务器端的Java小程序,处理HTTP请求并响应。生命周期含初始化、服务和销毁。创建Servlet示例代码展示了`doGet()`方法的覆盖。JSP则侧重视图,动态HTML生成,通过JSP脚本元素、声明和表达式嵌入Java代码。Servlet常作为控制器,JSP处理视图,遵循MVC模式。优化策略涉及缓存、分页和安全措施。这些技术是Java服务器端开发的基础。
|
5天前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
【6月更文挑战第23天】Java Web开发中,Servlet和JSP是构建动态Web应用的基础。Servlet处理逻辑,JSP专注展示。示例展示了Servlet如何通过`request.setAttribute`传递数据给JSP渲染。JSP自定义标签提升页面功能,如创建`WelcomeTag`显示欢迎消息。Servlet过滤器,如`CacheControlFilter`,用于预处理数据或调整响应头。这些集成和扩展技术增强了应用效率、安全性和可维护性,是Java服务器端开发的关键。
|
5天前
|
前端开发 安全 Java
Java服务器端开发实战:利用Servlet和JSP构建动态网站
【6月更文挑战第23天】**Servlet和JSP在Java Web开发中扮演关键角色。Servlet处理业务逻辑,管理会话,JSP则结合HTML生成动态页面。两者协同工作,形成动态网站的核心。通过Servlet的doGet()方法响应请求,JSP利用嵌入式Java代码创建动态内容。实战中,Servlet处理数据后转发给JSP展示,共同构建高效、稳定的网站。虽然新技术涌现,Servlet与JSP仍为Java Web开发的基石,提供灵活且成熟的解决方案。**
|
5天前
|
缓存 负载均衡 安全
Servlet与JSP在Java Web应用中的性能调优策略
【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
|
5天前
|
搜索推荐 Java 数据库连接
探索Java Web开发:Servlet与JSP的协同工作原理
【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
|
5天前
|
缓存 安全 小程序
从基础到进阶:掌握Java中的Servlet和JSP开发
【6月更文挑战第23天】Java Web开发中的Servlet和JSP是关键技术,用于构建动态网站。Servlet是服务器端小程序,处理HTTP请求,生命周期包括初始化、服务和销毁。基础Servlet示例展示了如何响应GET请求并返回HTML。随着复杂性增加,JSP以嵌入式Java代码简化页面创建,最佳实践提倡将业务逻辑(Servlet)与视图(JSP)分离,遵循MVC模式。安全性和性能优化,如输入验证、HTTPS、会话管理和缓存,是成功应用的关键。本文提供了一个全面的学习指南,适合各级开发者提升技能。
|
2天前
|
存储 设计模式 搜索推荐
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(下)
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(下)
5 1
|
2天前
|
XML 前端开发 Java
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(上)
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(上)
7 0

相关实验场景

更多