当前位置: 代码迷 >> 综合 >> java_web 快速入门之第十七章 servlet
  详细解决方案

java_web 快速入门之第十七章 servlet

热度:49   发布时间:2023-12-05 09:23:18.0

一:基本概念:

          Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

           狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

             最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

Servlet是JavaEE规范(接口)之一

Servlet是JavaWeb三大组件之一,三大组件分别是Servlet程序、Filter过滤器、Listener监听器

Servlet是运行在服务器上的一个Java程序,可以接收客户端发来的请求,并响应数据给客户端

 

作用

  1. 动态生成HTML文档

  2. 将请求转发给Servlet组件

  3. 读取客户端的Cookie,以及向客户端写入Cookie

  4. 访问服务器的资源,如数据库、 XML、文件对像等

特点:

(1)Servlet对像,由Servlet容器(Tomcat)创建。

(2)Servlet是一个接口:位于javax.servlet包中。

(3)service方法用于接收用户的请求并返回响应。

(4)用户访问时多次被执行(可以统计网站的访问量)。

二:实现servlet的方式

实现servlet有三种方式:

  • 实现javax.servlet.Servlet接口
  • 继承javax.servlet.GenericServlet类
  • 继承javax.servlet.http.HttpServlet类

注:通常会继承HttpServlet类来完成我们的Servlet

三:Servlet接口详解

package com.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginServlet implements Servlet{/*** 销毁*/public void destroy() {System.out.println("我销毁了");}/*** 初始化*/public void init(ServletConfig arg0) throws ServletException {System.out.println("我初始化了");}/*** 服务(处理请求)*/public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {System.out.println("我开始处理请求了");}public ServletConfig getServletConfig() {return null;}public String getServletInfo() {return null;}}

问题:当servlet被编写完成后,如何让浏览器访问servlet呢?

解决方法:给servlet配置servlet路径,需要在web.xml中对servlet进行配置

<servlet><servlet-name>xxx</servlet-name><servlet-class>com.zking.AServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>xxx</servlet-name><url-pattern>/xxx.do</url-pattern>
</servlet-mapping>

四:servlet的生命周期

方法:

void init(ServletConfig):出生之后(1次)
void service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用
void destory():临时之前调用(1次)

 

总结:servlet由我们编写,但对象由服务器来创建,并且由服务器来调用相应的方法

五:HttpServlet

          HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类

   

创建HttpServlet步骤:

  1. 继承HttpServlet抽象类

  2. 重写HttpServlet的部分方法,如doGet()或doPost()方法

  3.  获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串

  4.  生成HTTP响应结果。通过HttpServletResponse对象生成响应结果

HttpServlet的实现方式:

  •    .xml配置实现

  1. 配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复)
  2. 继承HttpServlet抽象类
  3. .重写get()、post()方法
  • 注解实现

  1. 直接在Package包下新建Servlet

六:ServletConfig

         ServletConfig是Servlet的配置参数对象,在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置,所以每一个Servlet都有一个ServletConfig。

作用:
      当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init()方法传入一个ServletConfig对象,即传入一些配置信息给Servlet。

生命周期:

      应用一加载则创建,应用停止则被销毁

创建时间:

    创建完Servlet对象时,接着创建Servletconfig对象

常用方法:

返回值    方法名   说明 
String  getInitParameter(String name) 根据参数名称获取参数的值
Enumeratin<String> getInitParameterNames()   根据所有参数名称的枚举 
String    getSevletName()  获取servlet的名称 
ServletContext   getServletContext()    获取servletContext对象 

ServletConfig的配置方式:

  • 在<servlet>标签种,通过<init-param>标签来配置。有两个子标签:
  1.  <param-name>:代表初始化参数的key。
  2.  <param-value>: 代表初始化参数的value
     

七:ServletContext

         ServletContext对象是一个应用上下文对象,也是一个域对象。表示Servlet应用程序,**每个web应用程序都只有一个ServletContext对象。

作用:

  1. 有了ServletContext对象,就可以共享从应用程序中的所有资源访问到的数据信息,并且可以动态注册web对象。

  2. 可以获得应用域的全局初始化参数,以及达到Servlet之间的**数据共享;

  3. 可以作为域对象在整个应用中共享数据;域对象即在一定的作用范围内实现资源共享;

  4. 可以用来获取应用中的资源在服务器上的绝对路径;

  5. 获取文件的mime类型: 在网络传输中,并不是以扩展名来区分文件的类型,都是以mime类型;如:text/html;表示一个html文件。

生命周期:

      应用一加载则创建,应用停止则被销毁

创建时间:

 加载web应用时,创建ServletContext对象

常用方法:

返回值   方法名  说明    
 void  setAttribute(String name,Object value) 向域对象中存储数据 
Object  getAttribute(String name)    通过名称获取域对象中的数据 
void   removeAttribute(String name)    通过名称移除域对象中的数据  
Enumeration<String> getAttributeNames()   获取域对象中所有数据的名称 
String   getSevletContextName()    获取servletContext的名称 
String   getContextPath()   获取当前应用的访问虚拟目录 
String   getServletInfo()    获取服务器名称和版本信息  
String   getInitParameter(String name)   根据名称获取全局配置的值 
Enumeration<String> getInitParameters()   获取全局配置的所有名称  
String   getRealPath(String path)    根据虚拟目录获取应用部署额磁盘绝对路径

ServletContext配置方式:

  • ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;

  • 在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签:

  1.  <param-name>: 代表全局初始化参数的key

  2.  <param-value>: 代表全局初始化参数的value

    

代码演示:

package com.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyServlet extends HttpServlet{protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理get请求doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理post请求/*** jsp中九大内置对象: <br>* 1. request(请求对象) : req <br>* 2. response(响应对象) : resp <br>* 3. session(会话对象) : req.getSession() <br>* 4. application(全局对象) : req.getServletContext() <br>* 5. out(输出对象) : resp.getWriter() <br>* 6. pageContext(jsp页面本身) : null <br>* 7. page(当前对象) : this <br>* 8. config(配置对象) : this.getServletConfig() <br>* 9. exception(异常对象) : Exception <br>**///拿到web.xml中初始化的参数this.getServletConfig().getInitParameter("iname");String iname=this.getServletConfig().getInitParameter("iname");System.out.println(iname);//需要拿到上下文(application)中设置的参数String ip = req.getServletContext().getInitParameter("ip");System.out.println(ip);}}

  相关解决方案