有关Servlet和JSP的梳理(一)

  大二第一学期的时候有学JSP的课,但是因为在开学之前做过JSP的小项目,所以一个学期的课也没听,直到期末考试成绩出来了,才回想JSP的内容还有多少记得,没想到模模糊糊也记不起多少,赶紧回头学回来。接下来是关于Servlet和JSP的梳理。

-------------------------------------------------------------------------------------------------------------------------------------------------

  Servlet是一个Java程序,一个Servlet应用有一个或多个Servlet程序,而且JSP页面也会被转换和编译成Servlet程序。

  Servlet应用无法独立运行,必须运行在Servlet容器中。Servlet容器将用户的请求传递给Servlet应用,并将结果返回给用户。由于大部分Servlet应用都包含多个JSP页面,因此更准确地说是“Servlet/JSP应用”。

  其中,Servlet API是开发Servlet的主要技术。而Servlet API有以下4个Java包:


Java


包含的内容


javax.servlet


定义Servlet和Servlet容器之间契约的类和接口


javax.servlet.http


定义HTTP Servlet和Servlet容器之间契约的类和接口


javax.servlet.annotation


标注Servlet、Filter、Listener的标注。它还被标注原件定义元数据


javax.servlet.descriptor


包含提供程序化登陆web应用程序的配置信息的类型。

  Servlet技术的核心是Servlet,它是所有Servlet类必须直接或间接实现的一个接口,而Servlet接口定义了Servlet与Servlet容器之间的契约。这个契约归结起来就是,Servlet容器将Servlet类载入内存,并在Servlet实例上调用具体的方法。当用户的请求使得Servlet容器调用Servlet的Service方法,会传入一个ServletRequest实例和一个ServletResponse实例,其中,ServletRequest中封装了当前的HTTP请求,而ServletResponse表示当前用户的HTTP响应。对于每一个应用程序,Servlet容器还会创建一个ServletContext实例,这个对象中封装了上下文(应用程序)的环境详情。每个上下文只有一个ServletContext,而且每个Servlet实例都有一个配置的ServletConfig。

 Servlet的生命周期方法:

  


Servlet容器的生命周期方法


作用


init


该方法在Servlet第一次被请求的时候,Servlet就会调用这个方法,而后不再被调用,所以可以用这个方法进行初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig。


Service


每当请求Servlet时,Servlet容器就会调用这个方法。第一次请求Servlet时,Servlet容器调用init方法和Service方法。后续的请求将只调用Service方法。


destroy


当要销毁Servlet时,Servlet容器就会调用这个方法。一般会在这个方法中编写清除代码。

  在介绍一个Servlet中另外两个非生命周期的方法:


Servlet容器的非生命周期方法


作用


getServletInfo


这个方法会返回Servlet的描述


getServletConfig


这个方法会返回由Servlet容器传给init方法的ServletConfig。

但是为了让getServletConfig返回一个非null值,必须将传给init方法的ServletConfig赋给一个类级变量。

-------------------------------------------------------------------------------------------------------------------------------------------------

  接下来是Servlet的各类接口:

  ServletRequest

 


接口


说明


ServletRequest


对于每一个HTTP请求,Servlet容器都会创建一个ServletRequest实例,并将它传给Servlet的Service方法。ServletRequest封装了关于这个请求的信息。

  常用的方法有:

    


方法


说明


public int getContentLength()


返回请求主体的字节数。


public java.lang.String getContentType()


返回请求主体的MIME类型。


public java.lang.String getParameter(java.lang.String name)


返回指定请求参数的值


public java.lang.String getProtocol()


返回这个HTTP请求的协议名称和版本

  ServletResponse


接口


说明


ServletResponse


该接口表示一个Servlet响应。在调用Servlet的Service方法前,Servlet容器首先创建一个ServletResponse,并将它作为第二个参数传给Service方法。ServletResponse隐藏了向浏览器发送响应的复杂过程。

  常用的方法:

 


方法


说明


getWriter()


返回了一个可以向客户端发送文本的java.io.PrintWriter。默认情况下,PrintWriter对象使用ISO-8859-1编码。


setContentType(“type”)


设置响应的内容类型,并将”text/html”作为一个参数传入。如果没有设置相应内容类型,有些浏览器就会将HTML标签显示为普通文本。

  ServletConfig

  


接口


说明


ServletConfig


用于存储关于Servlet的配置信息。

当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init()方法传入一个ServletConfig。ServletConfig封装可以通过@WebServlet或描述符传给Servlet的配置信息。

   常用的方法:

 


方法


说明


java.lang.String getInitParameter(java,lang.String name)


为了从Servlet内部获取到初始参数的值,要在Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParameter方法。


java.util.Enumration<java.lang.String> getInitParameterNames()


返回所有初始参数名称的一个Enumeration。


String contactName = servletConfig.getInitParameter(“contactName”)


获取contactName参数值

  ServletContext


接口


说明


ServletContext


每个Web应用程序只有一个上下文,所以ServletContext可以存储这个上下文,并且ServletContext还可以共享从应用程序中的所有资料处访问到的信息,并且可以动态注册Web对象,而且是用ServletContext内部的Map保存。

  常用的方法:

 


方法


说明


getServletContext().getInitParameter(String name)


获取在项目下的web.xml中设置context的初始化参数


this.getServletContext().log(“测试”)


在web.xml文件中,使用logger元素来设置日志文件


getAttribute(String name)/get AttributeNames()


获取ServletContext中的属性


setAttribute(String name, Object object)


设置ServletContext中的属性


removeAttribute(String name)


移除ServletContext中的属性

  GenericServlet


接口


说明


GenericServlet


GenericServlet实现了Servlet和ServletConfig接口。将init方法中的ServletConfig赋给一个类级变量,以便可以通过getServletConfig获取,为Servlet接口中的所有方法提供默认的实现,而且提供包括ServletConfig中的方法。

  Http Servlets

    


接口


说明


HttpServlet


HttpServlet类覆盖了javax.servlet.GenericServlet类。使用HttpServlet时,还要借助分别代表Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。而HttpServlet与GenericServlet的差别在于,HttpServlet覆盖的是doGet或者doPost方法,而不是Service方法,而且使用的是HttpServletRequest和HttpServletResponse,而不是ServletRequest和ServletResponse。


HttpServletRequest


表示HTTP环境中的Servlet请求


HttpServletResponse


表示HTTP环境中的Servlet响应

  各个接口常用的方法如下:

  


接口


方法


说明


HttpServletRequest


java.lang.String getContextPath()


返回表示请求上下文的请求URI部分。


HttpServletRequest


Cookie[] getCookies()


返回一个Cookie对象的数组。


HttpServletRequest


java.lang.String getHeader(java.lang.String name)


返回指定HTTP标题的值。


HttpServletRequest


java.lang.String getMethod()


返回生成这个请求的HTTP方法名称


HttpServletRequest


java.lang.String getQueryString()


返回请求URL中的查询字符串。


HttpServletRequest


HttpSession getSession()


返回与这个请求相关的会话对象。如果没有,将创建一个新的会话对象。


HttpServletRequest


HttpSession getSession(Boolean create)


返回与这个请求相关的绘画对象,如果有,并且create参数为True,将创建一个新的会话对象。


HttpServletResponse


void addCookie(Cookie cookie)


给这个响应对象添加一个cookie。


HttpServletResponse


void addHeader(java.lang.String name, java.lang.String value)


给这个响应对象添加一个header。


HttpServletResponse


void sendRedirect(java.lang.String location)


发送一条响应码,将浏览器跳转到指定的位置。

-------------------------------------------------------------------------------------------------------------------------------------------------

  当用户提交HTML表单时,在表单元素中输入的值就会被当作请求参数发送到服务器。HTML输入域(文本域、隐藏域或者密码域)或者文本区的值,会被当作字符串发送到服务器。空的输入域或者文本区会发送空的字符串。

  包含多个值的select元素发出一个字符串数组,可以通过ServletRequest.getParameterValues进行处理。

  核查过的复选框会发送字符串"on"到服务器,未经核查的复选框则不向服务器发送任何内容,ServletRequest.getParameter(fieldName)返回null。

  单选框将被选中按钮的值发送到服务器。如果没有选择任何按钮,将没有任何内容被发送到服务器,并且ServletRequest.getParameter(fieldName)返会null。

  如果一个表单中包含多个输入同名的元素,那么所有值都会被提交,并且必须利用ServletRequest.getParameterValues来获取它们。ServletRequest.getParameter将只返回最后一个值。

  

原文地址:https://www.cnblogs.com/NYfor2018/p/8296841.html

时间: 2024-10-30 03:02:58

有关Servlet和JSP的梳理(一)的相关文章

有关Servlet和JSP的梳理(二)

JSP JSP页面本质上是一个Servlet,JSP页面在JSP容器中运行,一个Servlet容器通常也是JSP容器. 当一个JSP页面第一次被请求时,Servlet/JSP容器主要做一下两件事情: ① 转换JSP页面到JSP页面实现类,该实现类是一个实现javax.servlet.jsp.JspPage接口或子接口javax.servlet.jsp.HttpJspPage的Java类.该实现类的类名由Servlet/JSP容器生成.如果出现转换错误,则相关错误信息将被发送到客户端. ② 如果转

Servlet和JSP之JSTL学习

JSTL JSTL就是JSP标准标签库(JavaServer Pages Standard Tag Library, JSTL)是一个定制标签库的集合,用来解决像遍历Map或集合.条件测试.XML处理,甚至数据库访问和数据操作等常见的问题. (JSTL的使用需要有配置好两个jar包,分别是jstl.jar和standard.jar) JSTL库 JSTL是标准标签库,但它是通过多个标签库来暴露其行为的. 区域 子函数 URI 前缀 核心 变量支持 http://java.sun.com/jsp/

servlet和jsp学习指南(一)servlet

近期接触了些纯servlet与jsp的编程项目,顺便把<servlet和jsp学习指南>这本书拿出来看看,感悟良多.记下随笔,以便会议. 要编写一个servlet首先要实现Servlet或者继承HttpServlet package test.com.servlet; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet

修改MyEclipse默认的Servlet和jsp代码模板

一.修改Servlet的默认模板代码 使用MyEclipse创建Servlet时,根据默认的Servlet模板生成的Servlet代码如下: 1 package gacl.servlet.study; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 i

servlet和Jsp生命周期解读

一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应.常用的tomcat.jboss.weblogic都是Servlet容器)中的,其生命周期是由容器来管理. 二.Servlet生命周期 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应

Servlet,jsp,JSP技术 ,JSP编程

 一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 浏览器解析的时候是需要HTTP协议的,JAVA普通类有没有HTTP协议呢? 普通类没有. JAVA-(class)浏览器如何访问呢? 浏览器---HTML A   JAVA通过IO流生成HTML--->浏览器 B   JAVA 需要加入HTTP协议 解决上面2个问题可以通过 Servlet C  如

Servlet 和 JSP 概述

说到Java web开发,就不得不提Servlet 和 JSP.这两者是java web开发技术.虽然现在有这么多的web框架,公司中很少会用这两个技术来直接开发项目,但是理解了这两个技术,一则会让你对web的基础知识要很深的了解,二则学其他的相比来说要更好理解点. 一.Servlet 1. 什么是servlet? servlet是运行在Web服务器上的java程序.是一个中间层,负责连接来自Web浏览器或其他Http请求和Http服务器上的数据库或应用程序. 2. Servlet的作用是什么?

Servlet与JSP的异同

1.什么是Servlet A Java servlet is a Java programming language program that extends the capabilities of a server. Although servlets can respond to any types of requests, they most commonly implement applications hosted on Web servers.Such Web servlets ar

基于Servlet、JSP、JDBC、MySQL的一个简单的用户注冊模块(附完整源代码)

近期看老罗视频,做了一个简单的用户注冊系统.用户通过网页(JSP)输入用户名.真名和password,Servlet接收后通过JDBC将信息保存到MySQL中.尽管是个简单的不能再简单的东西,但麻雀虽小,五脏俱全,在此做一归纳和整理.以下先上源代码: 一.index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String