Servlet 的使用与对应的九个内置对象

servlet概述

就是一个java类,是javweb的规范之一,也是三大组件之一(serlvet,listener,filter)

作用:负责接收用户的请求以及做出响应。(之前是由doXxx.jsp)

快速入门:

  1. 实现servlet接口 不常用

  2. 继承HttpServlet抽象类 doGet doPost

完成servlet文件的编写后必须要实现配置

2种方式

注解 @webServlet("/路径")

web.xml中进行配置


<servlet>   
 可自取最好与你创建的servlet类名一样
    <servlet-name>xxx</servlet-name>    
             servlet全路径地址
    <servlet-class>com.zking.AServlet</servlet-class></servlet>
<servlet-mapping>    
        上面的name属性一样 否则404
    <servlet-name>xxx</servlet-name>  
       配置地址 可随便取.do 或.action 
    <url-pattern>/xxx.do</url-pattern>
</servlet-mapping>

JSP中的内置对象对应Servlet中的什么对象

JSP                    Servlet
request            serivce(request,response)   doPost(request,response)

session               request.getSession    HttpSession
applicaiton         this.getServletContext();   ServletContext
out                    response.getWriter()      PrintWriter

Cookie                Cookie

servlet中2个重要对象

ServletConfig配置对象

ServletContext全局对象

都是获取web.xml中的参数问题。

编码的问题

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

如何在serlvet中获取到当前项目的绝对路径

这里的绝对路径指的是基于项目的根目录而不是基于磁盘。

String path = this.getServletConfig().getServletContext().getContextPath();

/项目名称
path+"/index.jsp"

内置对象与servlet的对应关系

jsp内置对象servlet中java对象获取
requestHttpServletRequestservice方法中的req参数
responseHttpServletResponseservice方法中的resp参数
sessionHttpSessionreq.getSession()
exceptionThrowable
pagethisthis
pageContextPageContext
applicationServletContextgetServletContext()
configServletConfiggetServletConfig()
outJspWriterresp.getWriter()

 

1.Servlet概述

1.1 什么是servlet?

servlet是JavaEE的规范(接口)

Server Applet;servlet是javaweb的三大组件之一,它属于动态资源。servlet的作用是处理请求,服务器会把接收到的请求交给servlet来处理,在servlet通常需要:

  • 接收请求数据

  • 处理请求

  • 完成响应 

  •  例如客户端发出登录请求,或者输出注册请求,这些请求都应该有servlet来完成处理!servlet需要我们自己来编写,每个servlet必须实现javax.servlet.Servlet接口。

servlet执行原理

(1)当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
(2)查找web.xml文件,是否有对应的<url-pattern>标签体内容。
(3)如果有,则在找到对应的<servlet-class>全类名
(4)tomcat会将字节码文件加载进内存,并且创建其对象
(5)调用其方法

1.2 实现servlet的方式

实现servlet有三种方式:

  • 实现javax.servlet.Servlet接口;

  • 继承javax.servlet.GenericServlet类;

  • 继承javax.servlet.http.HttpServlet类; 通常会继承HttpServlet类来完成我们的Servlet。

Servlet接口详解

public interface Servlet{
    public void init(servletConfig config) throws ServletException;
    public ServletConfig getServletConfig();
    public void service(ServletRequest req, ServletResponse resp) throws ServletException,IOException;
    public String getServletInfo();
    public void destory();

}

1.3 servlet的生命周期

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

  • 给servlet指定一个servlet路径!(让servlet与一个路径绑定在一起)

  • 浏览器访问servlet路径

给servlet配置servlet路径,需要在web.xml中对servlet进行配置。


<servlet>   
 可自取最好与你创建的servlet类名一样
    <servlet-name>xxx</servlet-name>    
             servlet全路径地址
    <servlet-class>com.zking.AServlet</servlet-class></servlet>
<servlet-mapping>    
        上面的name属性一样 否则404
    <servlet-name>xxx</servlet-name>  
       配置地址 可随便取.do 或.action 
    <url-pattern>/xxx.do</url-pattern>
</servlet-mapping>

生命周期方法

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

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

创建HttpServlet步骤

  • 继承HttpServlet抽象类

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

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

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

HttpServlet的实现由两种方式

实现方式一:.xml配置实现
A.配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复)
B.继承HttpServlet抽象类
C.重写get()、post()方法
实现方式二:注解实现
直接在Package包下新建Servlet

1.5 ServletConfig

概述

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

作用

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

生命周期

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

创建时间

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

常用方法

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

1.6 ServletContext

1.6.1 ServletConText介绍

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

ServletContext对象的作用

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

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

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

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

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

生命周期: 应用一加载则创建,应用被停止则销毁

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

域对象

  • 域对象指的是对象有作用域,即有作用范围。域对象可以实现数据的共享,不同作用范围对象,共享数据的范围能力也不同。

  • 在Servlet规范中,一共有4个域对象。其他三个是:request请求域,PageContext页面域,session会话域。ServletContext就是其中的一个。是web应用中最大的作用域,也叫application应用域,可以实现整个应用之间的数据共享!

常用方法

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

1.6.2 ServletContext配置方式

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

  • 在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签: <param-name>: 代表全局初始化参数的key。 <param-value>: 代表全局初始化参数的value。

2.xml配置文件中传参

 <!-- 通过Servlet标签来进行加载以及初始化Servlet文件 -->
  <servlet>
  	<servlet-name>Demo3Servlet</servlet-name>
  	<!-- 全路径类名 com.zking.servlet.Demo3Servlet -->
  	<servlet-class>com.zking.servlet.Demo3Servlet</servlet-class>
	
	<!-- 通过init-param标签来设置参数 -->
	<init-param>
		<param-name>username</param-name>
		<param-value>admin</param-value>
	</init-param>


  </servlet>
  <!-- 通过Servlet-mapping标签来进行对指定的Servlet文件进行访问路径配置 -->
  <servlet-mapping>
  	<servlet-name>Demo3Servlet</servlet-name>
  	<url-pattern>/demo3.do</url-pattern>
  </servlet-mapping>
  
   获取xml中配置的参数
        ServletConfig  servletConfig =  this.getServletConfig();
		//根据ServletConfig对象来获取初始化参数的值
		String initParameterUsername = servletConfig.getInitParameter("username");
		System.out.println(initParameterUsername);

在xml中设置全局参数 及获取

  <!-- 在web.xml中设置全局参数变量 -->
  <context-param>
  	<param-name>account</param-name>
  	<param-value>scott</param-value>
  </context-param>
  
  

   获取xml中配置的全局参数

        ServletContext application2 = this.getServletContext();
		
	
		//通过ServletContext对象来获取web.xml文件中的全局参数
		String initParameterAccount = application2.getInitParameter("account");
		System.out.println(initParameterAccount);
		

3.常用的一些内置对象的使用

package com.zking.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Demo3Servlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//设置response响应编码
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		
		//JSP内置对象    与    Servlet的内置对象的对比
		/**
		 * JSP					Servlet
		 * 	
		 * out					PrintWriter				
		 * request				doGet|doPost|service方法中的参数HttpServletRequest
		 * response				doGet|doPost|service方法中的参数HttpServletResponse
		 * session				HttpSession
		 * page					this
		 * pageContext			PageContext
		 * Config				SerlvetConfig
		 * application			ServletContext
		 * exception			Throwable
		 */
	
		//1.Servlet中的out对象-----PrintWriter
		//out对象的作用:向页面输出内容   将结果响应给客户端
		PrintWriter out = response.getWriter();
		out.write("<h1>欢迎来到长沙西部!各位屌丝</h1>");
		//PrintWriter  打印流     刷新  关闭
	
		//2.session
		//session是服务器的存储行为 即获取需要request请求去调用
		//作用:保存数据
		HttpSession session = request.getSession();
		session.setAttribute("username", "大魔王");
		
		String username = (String)session.getAttribute("username");
		System.out.println(username);
		
		
		//3.ServletConfig  配置对象
		//作用:对于web.xml中如果在配置servlet时需要传递特定的参数或者数据时,可以通过标签进行设置后
		//将来可以通过ServletConfig对象来进行获取到。
		
		ServletConfig  servletConfig =  this.getServletConfig();
		//根据ServletConfig对象来获取初始化参数的值
		String initParameterUsername = servletConfig.getInitParameter("username");
		System.out.println(initParameterUsername);
		
		//4.ServletContext对象   上下文对象----JSP  application
		//(1)通过servletConfig对象来获取
		ServletContext application1 = this.getServletConfig().getServletContext();
		//(2)通过this来获取
		ServletContext application2 = this.getServletContext();
		
		application1.setAttribute("url", "jdbc:orcle:thin:@lcoalhost:1521:orcl");
		System.out.println(application1.getAttribute("url"));
		
	
		//通过ServletContext对象来获取web.xml文件中的全局参数
		String initParameterAccount = application2.getInitParameter("account");
		System.out.println(initParameterAccount);
		
		out.flush();
		out.close();
		
	
	}
	
	
}

 4.快捷创建servlet 步骤

1.创建package 包 创建好后 左键 ----New

 

2. 左键 ----New--Servlet 创建 起名字

3. servlet自动生成的一些方法

 4.改完后的Servlet界面

 下方就可以写代码了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值