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. leetcode 78. 子集 JAVA

    题目: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3],   [1], ...

  2. FunDA(10)- 用户功能函数模式:User Function Model

    前面我们提过:FunDA就像一个管道(PipeLine).管道内流动着一串数据(Data)或者运算指令(Action).管道的源头就是能产生纯数据的数据源(Source),跟着在管道的中间会有一些节点 ...

  3. 运行安装mysql 报错 [root@localhost mysql-mult]# ./scripts/mysql_install_db  --defaults-file=conf/3306my.cnf FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_

    运行安装mysql 报错 [root@localhost mysql-mult]# ./scripts/mysql_install_db  --defaults-file=conf/3306my.cn ...

  4. Lora通信解决方案对比

    欢迎大家进群交流分享:QQ群:773082801

  5. NOIP2017滚粗记【上】

    Day0: NOIP前停课训练的最后一天,上午打了一场三题都见过的比赛,一窝人AK. 下午一群人在机房缓慢氧化,到了晚上因为比赛在我们学校打,所以所有的机房都断网了(百思不得其解为什么两个竞赛室也被断 ...

  6. POJ 1087

    #include<iostream> #include<stdio.h> #include<string> #define MAXN 105 using names ...

  7. 前端必备:FastStoneCapture 和 Licecap &&& mingw c++ 编译执行

    端必备:FastStoneCapture 和 Licecap FastStoneCapture这个软件非常小,只有2M多,并且其功能很强大,包括截图,录制视频,量尺,取色等等,对于前端工程师绝对是必备 ...

  8. python的字符串连接操作符+

    如图, 运行后提示错误,这是“+” 是字符串连接操作符,字符串连接只能在被连接的每一个都是字符串时起作用.而以上程序试图将一个字符串同一个非字符串连接会引发一个异常,所以会报错. 正确的为: 或者是:

  9. TCP与UDP的差别以及TCP三次握手、四次挥手

    UDP: 1.UDP面向报文,无需建立连接,不可靠,数量小,高层就解决差错重传,无需拥塞控制 2.支持音频.视频传输 3.检查和检验UDP包头和数据和伪首部 4.分组开销小(头部8个字节),提供最大努 ...

  10. 部分替换mysql表中某列的字段

    UPDATE `table_name` SET `field_name` = replace (`field_name`,'from_str','to_str') WHERE `field_name` ...