javaWeb二-Servlet基础

Servlet接口:Web服务端的编程技术,实现动态网页的解决方案,是jsp技术的基础

Servlet源码:

Servlet接口定义了Servlet引擎与Servlet程序之间通信的协议约定。
// Compiled from Servlet.java (version 1.8 : 52.0, no super bit)
public abstract interface javax.servlet.Servlet {
  
  被servlet容器调用,并根据初始化信息来创建一个servlet实例
  // Method descriptor #4 (Ljavax/servlet/ServletConfig;)V
  public abstract void init(javax.servlet.ServletConfig arg0) throws javax.servlet.ServletException;

  得到servlet的初始化信息和启动参数
  // Method descriptor #8 ()Ljavax/servlet/ServletConfig;
  public abstract javax.servlet.ServletConfig getServletConfig();
  
  接受客户请求并返回相应信息
  // Method descriptor #10 (Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V
  public abstract void service(javax.servlet.ServletRequest arg0, javax.servlet.ServletResponse arg1) throws javax.servlet.ServletException, java.io.IOException;
  
  返回servlet相关信息,包括作者、版本、版权等
  // Method descriptor #13 ()Ljava/lang/String;
  public abstract java.lang.String getServletInfo();
  
  被servlet容器调用,当该servlet不用的时候释放掉所占用的所有资源
  // Method descriptor #15 ()V
  public abstract void destroy();
}

理解Servlet中service方法的作用:https://blog.csdn.net/y_love_f/article/details/38962025

Servlet接口说明
 1、该接口只定义了servlet和客户端联系的方法并无实现。
 2、在servlet开始接收客户请求前由servlet容器调用init()方法对其初始化,并将该实例放到服务器中。
 3、service()方法被servlet容器调用接受客户的请求并处理。
    ServletRequest类:包含客户端的请求信息。
    ServletResponse类:包含服务器作出的回应。
    该方法会抛出ServletException和IOException两个异常。
 4、当servlet实例长期不用,将被servlet容器通过垃圾处理器回收,并释放其所占的资源。

Servlet2.4新增的功能:

1.Filter(过滤器)

2.Listener(监听器):监听在控制层的某一个过程,根据过程需求作出响应

Servlet API中定义的两个包:

包:
javax.servlet.*
javax.servlet.http.*

两个抽象类:
GenericServlet,HttpServlet抽象类:都实现Servlet接口,后者继承前者,后者增加了doGet,doPost,doPut,doHead,doDelete。。。。方法

public abstract class HttpServlet extends GenericServlet implements Serializable {
	
	protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
	
	}

	protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException { 
		
	}
	protected void doPut(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException { 
		
	}
    
    ..........    

	protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException { 
		
		
	}
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { 
		
	}
}
doGet():处理http的get请求,从http服务器上取得资源。
doPost():处理http的post请求,主要用于发送HTML文本中FORM的内容。
doHead():用于处理HEADER请求
doPut():处理http的put请求,模仿ftp发送资源。
doDelete():处理http的delete请求,从服务器上移出一个url。
doOptions():该操作自动决定支持什么HTTP方法。
doTrace():处理HTTP的trace请求。

HttpServletRequest,HttpServletResponse接口:

1.HttpServletRequest接口封装了http协议的客户端请求相关的内容,利用此接口可取得用户的输入,也可取得客户的配置。
String getParameter(String CtlName)方法:可取得用户在表单或URL中向服务器传送的相应参数,其中的CtlName代表html表单中控件的名称或在URL地址中传递的参数的名称

setCharacterEncoding( String encodingCode);
• 该方法用于设置接收参数的编码类型。

2.HttpServletResponse接口封装了http协议的服务器响应相关的内容,利用此接口可获得向浏览器或其他http客户端输出响应结果的输出流。
PrintWriter getWriter()方法:获得向客户端进行文本输出的控制流
ServletOutputStream getOutputStream()方法: 获得向客户端输出二进制数据的控制流

void setContentType(String TYPE)方法:设置输出流的数据类型。如果要设置输出
的数据类型,必须首先调用此方法对输出流的数据类型进行设定。
• TYPE的取值类型:
• text/html[;charset=charEncoding]
• 比如:response.setContentType("text/html;charset=utf-8");
• 向客户端回应一个超文本文件,其编码为charset所指定的编码。如果省略了charset指定,将采用服务器端的默认的编码
• 说明:如果响客户端回应的内容含有中文,且采用JDK自带的编译器进行编译(编译时不指定编码类型),则需要利用charset参数指定文档的编码类型为GBK或GB2312,否则向客户端输出的中文内容将是乱码

案例:

package com.sc.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
@WebServlet("/register")
public class SayHi extends HttpServlet {
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//1.请求
		req.setCharacterEncoding("utf-8");
		String name = req.getParameter("uname");
		System.out.println("用户名:" + name);
		//2.响应
		resp.setContentType("text/html;charset=gbk");
		PrintWriter out = resp.getWriter();
		out.println("你好," + name);
		out.close();
	}

}
 <body>
    <form action="register" method="post">
    	用户名:<input type="text" name="uname"><br>
    	密    码:<input type="password" name="upass"><br>
    	性    别:<input type="radio" >
    	<input type="submit" value="提交">
    </form>

 两种Servlet配置:

1.通过xml配置文件:

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.servletExample.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>

2.添加注解@WebServlet("/HelloServlet")

浏览器 访问Servlet:http://localhost:8080/ServletExample/HelloServlet

Servlet的生命周期
每个servlet实例的生命周期中只有三种类型的事情,分别对应于由servlet容器所唤醒的三个方法:
1、init() 初始化时期
• 当servlet第一次被装载的时候由servlet容器调用init(),且只调用一次,默认情况下调用超类的init()方法。
2、service()运行时期
• 接受客户请求并决定调用何种处理方法,并将处理结果返回到客户端。
3、destory()结束时期
• 为可选方法,释放不用的servlet实例所占内存和资源。


 Servlet的生命周期可以归纳为以下几步
由Servlet容器动态装载Servlet;
Servlet创建一个Servlet实例;
Servlet调用Servlet的init()方法;
客户发送请求到Servlet;
Servlet创建一个请求对象;
Servlet创建一个响应对象;
Servlet激活service()方法,传递请求和响应对象作为参数;
service()方法获得请求对象的参数,处理请求,访问其他资源。
service()方法通过响应对象将结果传递给Server,最终到达客户端。
对于更多的相同客户端请求, Servlet将创建新的请求和响应对象,仍然激活此Servlet的service方法,传递新的参数对象,不需在初始化一次。
当Servlet容器不再需要Servlet时(关闭时)调用destory()方法。

在JSP页面写${msg},无法显示msg信息!需要设置EL表达式,配置isELIgnored="false"。

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值