1.什么是Servlet?

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

Servlet可以被认为是服务器端的applet。servlet被web服务器加载和执行,就如同applet被浏览器加载执行一样,servlet从客户端(通过web服务器)接受请求,执行某种作业,然后返回结果。

2.部署Servlet

2.1.servlet类

创建一个servlet就是编写一个特殊类的子类,这个特殊类就是javax.servlet.http包中的HttpServlet类,HttpServlet类实现了Servlet接口,实现了响应客户的方法。HttpServlet的子类习惯被称为一个servlet类,这样的类床架的对象习惯上称为一个servlet。

JDK的目录中没有javax.servlet.http包,要将tomcat安装目录lib子目录中的servlet-api.jar文件复制到tomcat所使用JDK的拓展目录下,jdk*/jre/lib/ext中。

2.2.保存字节码文件

想要使用servlet,必须要先编译,那么tomcat如何访问到这个字节码文件呢?就如同之前访问javabean一样,我们需要在项目目录下的WEB-INF/classes下建立相应的包去存储servlet的字节码文件。

2.3.编写部署文件web.xml

Servlet类的字节码文件保存到指定的目录后,必须为Tomcat服务器编写一个部署文件,只有这样Tomcat才会按照用户的请求使用servlet字节码文件创建对象。编写的web.xml文件应该存储在项目目录下WEB-INF目录下。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- xml声明以<? xml开始,以?>结束,encoding属性用于指定编码方式,
如果准备用ASCII字符,该属性可以是iso-8859-1,
如果该属性值为utf-8,那么标记及标记内容除了可以使用ASCII字符外,
还可以使用汉字,日文中的平假名、片假名等-->
<web-app>
<!-- xml文件必须有一个根标记,这个就是根标记-->
<servlet>
<!-- 可有若干个servlet标记,标记内容由tomcat服务器处理-->
<servlet-name>hello</servlet-name>
<!-- 指定tomcat服务器创建的servlet的名字-->
<servlet-class>myservlet.test.test_servlet</servlet-class>
<!-- 指定tomcat服务器用哪个servlet类来创建-->
</servlet> <servlet-mapping>
<!-- tomcat服务器创建的servlet的名字,必须与上边servlet-name的值一致-->
<servlet-name>hello</servlet-name>
<!---->
<url-pattern>/lookHello</url-pattern>
<!-- 指定请求servlet的url格式-->
</servlet-mapping>
</web-app>

web服务目录的WEB-INF子目录下的web.xml文件负责管理该web服务目录下的全部servlet,当web服务器提供更多的servlet时,只需要在web.xml文件中添加<servlet>和<servlet-mapping>标记即可。web.xml编写正确才能启动tomcat服务。

Servlet类可以使用getServletName()方法返回配置文件中<servlet-name>标记给出的servlet的名字。

2.4.向servlet传递参数的值

在请求servlet时,可以在请求的<url-pattern>中额外的加入参数及其值,格式:

servlet名?参数1=值1&参数2=值…..参数n=值

被请求的servlet可以通过request对象获取参数的值:

request.getParameter(参数n)

4.servlet的工作原理

4.1.servlet对象的生命周期

一个servlet的生命周期主要有以下3个过程组成:

(1)初始化servlet,servlet第一次被请求加载时,服务器要创建一个servlet,这个servlet必须调用init方法完成必要的初始化工作,并且只调用一次。

(2)再调用service方法响应用户的请求

(3)当服务器关闭时,调用destroy方法销毁servlet

4.2.init方法

该方法是HttpServlet类中的方法,可以在子类中重写这个方法。init方法的声明格式:

public void init(ServletConfig config) throws ServletException

该方法在执行的时候,服务器会把一个ServletConfig对象传递给init方法,这个对象就被保存到servlet中,直到servlet被销毁,这个ServletConfig对象负责向servlet传递服务器设置信息,如果传递失败就会发生ServletException,servlet不能正常工作。

4.3.service方法

该方法是HttpServlet类中的方法,可以在子类中直接继承或重写该方法。该方法的声明格式:

public void service(HttpServletRequest request HttpServletResponse reponse) throw ServletException,IOException

当servlet成功创建和初始化之后,调用service方法来处理用户的请求并返回响应,服务器将两个参数传递个该方法。一个是HttpServletRequeset类型的对象,该对象用来响应用户的请求信息;一个是HttpServletResponse类型的对象,该对象用来响应用户的请求。

service方法的功能是检查HTTP请求类型(get、post等),并在service方法中根据用户的请求方式,在service方法中对应的调用doGet或doPost方法。

service方法可以被多次调用,只要有用户请求servlet时,就会调用执行service方法,调用过程运行在不同的线程中,互不干扰。

4.4.destroy方法

该方法是HttpServlet类中的方法,子类可以直接继承这个方法,一般不需要重写。声明格式:

public destroy()

当服务器终止时,比如关闭服务器,destroy()方法才会被执行,销毁servlet。

5.通过JSP页面访问Servlet

5.1.通过表单向servlet提交数据

Web服务目录下的JSP页面都可以通过表单请求该Web服务目录下的某个servlet。如果web.xml文件中的<servlet-mapping>标记的子标记<url-pattern>指定的请求servlet格式为”/hello”,那么action给出的值就是”hello”.

<form action="hello">
</form>

另外一种就是在servlet中额外加入参数及其值

<form action="hello?h=10&e=11&l=2">
</form>

通过JSP页面访问servlet的好处就是,JSP页面可以负责页面的信息显示,信息相关的处理交给servlet去完成。

5.2.通过超链接访问servlet

和表单处理一样,如果<url-pattern>指定为“/hello”,那么<a>中的href值是“hello”。

<a href="hello">hello</a>

6.doGet和doPost方法

HttpServlet提供了doGet和doPost方法用来处理用户的请求并做出相应。

可以在Servlet中重写doGet或doPost方法来响应用户的请求,这样可以增加响应的灵活性并降低服务器的负担。doGet和doPost的处理过程完全相同,可以只在doPost方法中编写处理过程,在doGet方法中调用doPost方法即可,反之亦可。

如果根据请求类型进行不同的处理,就要在两个方法中编写不同的处理过程。

7.重定向与转发

重定向的功能:将用户从当前页面或servlet定向到另一个JSP页面或servlet。

转发的功能:将用户对当前JSP页面或servlet的请求转发给另外一个JSP页面或servlet。

7.1.重定向sendRedirect方法

该方法是HttpServletResponse类中的方法。当用户请求一个servlet时,该servlet在处理数据后,可以使用重定向方法将用户从当前页面或servlet重定向到一个JSP页面或servlet,但不能将用户对当前页面或servlet的请求转发给所定向的资源。

重定向的目标页面或servlet无法使用request获取用户提交的数据。

7.2.转发对象RequestDispatcher

该对象可以把用户对当前JSP页面或servlet的请求转发给另一个JSP页面或servlet,而且将用户对当前页面或servlet的请求和响应传递给目标页面或servlet。

转发的目标页面或servlet可以使用request获取用户提交的数据。

转发步骤:

(1)得到RequestDispatcher对象。用户请求的当前页面或servlet可以让HttpServletRequest对象request调用public RequestDispatcher getRequestDispatcher(String path)方法返回一个RequestDispatcher对象,其中参数path是要转发的目标页面或servlet。例如:

RequestDispatcher dis=request.getRequestDispatcher(“a.jsp”);

(2)转发。在(1)中获取的RequestDispatcher对象调用void forward(ServletRequest request,ServletResponse reponse)throw ServletException.java.io.IOException方法将用户对当前页面或servlet的请求转发个RequestDispatcher对象指定的页面或servlet。例如:

dis.forward(request,response);

和重定向方法不同的是,用户在浏览器地址栏看不到目标页面或servlet地址,只能看到目标页面或servlet的运行效果,浏览器地址栏中依然是当前页面或servlet地址,刷新页面将请求当前页面或servlet。

8.使用session

HttpServletRequest对象request调用getSession方法获取用户的session对象:

HttpSession se=request.getSession(true);

JSP学习笔记(5)-Java Servlet的更多相关文章

  1. jsp课堂笔记5 Java servlet

    servlet的创建 servlet类就是一个包含javax.servlet.http包中的HttpServlet类 部署web.xml文件 在<sevlet>标签中创建 <serv ...

  2. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...

  3. JSP学习笔记

    JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...

  4. JSP 学习笔记1

    JSP 学习笔记   JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例--JSP页面有系统编译成Servlet,Servlet再负责响应用户请求. 1.JSP注释 < ...

  5. jsp学习笔记:mvc开发模式

    jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息 ...

  6. Servlet视频学习笔记 57-58 (servlet入门和调用过程)

    网易云课堂<30天轻松掌握JavaWeb视频>servlet部分 课时57 servlet开发入门 servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术.S ...

  7. 学习笔记之Java程序设计实用教程

    Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...

  8. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  9. JSP学习笔记(二):动作元素

    与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面.为Java插件 ...

  10. jsp学习笔记day1

    一.jsp简介 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. JSP是一种Java ...

随机推荐

  1. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  2. VC API常用函数简单例子大全(1-89)

    第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCST ...

  3. Android安全防护防护———加密算法

    摘要 这篇文章本来早就应该写了,但是由于项目一直开发新的需求,就拖后了.现在有时间了,必须得写了.现在Android应用程序对安全防范这方面要求越来越高了.特别是金融行业,如果金融app没有没有做好相 ...

  4. 重新设置Linux文件共享密码..

    今天同事把我主机踹倒了,鼠键都没反应,于是我在Linux运行的情况下强制重启了下电脑. 启动完了VMware后Linux重启,正常使用.后来我想起来有快照功能 之前也没用到过,于是就点了一下刚开始安装 ...

  5. redis内存监控与回收

    Redis有自己的内存分配器,当key-value对象被移除时,Redis不会马上向操作系统释放其占用内存.redis之所以这样的设计有两个原因. OS可能会将释放内存交换到虚拟内存,但OS的虚拟内存 ...

  6. Swift 里字符串(四)large sting

    对于普通的字符串,对应的_StringObject 有两个存储属性: _countAndFlagsBits: UInt64 _object: Builtin.BridgeObject _countAn ...

  7. 利用Django和装饰器做一个简单的修改密码页面

    view视图代码: from django.shortcuts import render,redirect from django.http import HttpResponse from PIL ...

  8. Odoo9.0模块开发全流程

    构建Odoo模块 模块组成 业务对象 业务对象声明为Python类, 由Odoo自己主动加载. 数据文件 XML或CSV文件格式, 在当中声明了元数据(视图或工作流).配置数据(模块參数).演示数据等 ...

  9. HTML页面的重绘(repaint)和重流(reflow)

    重流(Reflow)是指布局引擎为frame计算图形的过程. frame是一个矩形,拥有宽高和相对父容器的偏移.frame用来显示盒模型(content model), 但一个content mode ...

  10. android的几种“通知”方式简单实现(Notification&NotificationManager)

    关于通知Notification相信大家都不陌生了,平时上QQ的时候有消息来了或者有收到了短信,手机顶部就会显示有新消息什么的,就类似这种.今天就稍微记录下几种Notification的用法.3.0以 ...