二.servlet简单使用

1.Servlet接口所需重写的方法
 上次简单介绍了servlet,不过重写之后的该接口通常创建之后都是一个单独线程,这点需要注意。知道了servlet在java中的本质是一个接口,而我们使用它,只是重写了这个接口,当然了,接下来就是实现接口所要重写的方法,该接口重写的方法如下:

  • init() 初始化方法
     该方法只调用一次,初始化数据,并且数据用于servlet线程的整个过程。
  • service() 执行实际任务方法
     web容器调用该方法处理库护短请求并返回响应,每个servlet请求都会产生一个线程用于回应。该方法中只用处理常用的doGet()和doPost()方法即可
  • destory()
    只被调用一次,在servlet线程生命周期结束时间调用
  1. 架构
     整个求情响应过程如下:
     HTTP请求交给servlet容器,每个请求产生一个新的线程,使用不同实例的不同方法来处理各个请求。如图所示:
     在这里插入图片描述
  2. servlet文件配置
    servlet的class文件理论上放在tomcat(本人使用的服务)安装目录下的webapps/Root/web-INF/class文件夹下。但是假如使用eclipse编辑的项目,可以直接放在src文档的新包下。
    并且需要在web.xml下配置该servlet类映射的名称,以及对应的正确路径
    具体如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                       http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
         <servlet-name>HelloWorld</servlet-name> <!-- servlet类名 -->
         <servlet-class>com.servlet.MessgeServlet</servlet-class>
         <!-- servlet类所在路径 -->
    </servlet>
    <servlet-mapping>
         <servlet-name>HelloWorld</servlet-name><!-- servlet类名 -->
         <url-pattern>/MessgeServlet</url-pattern>
         <!-- 访问服务器时在浏览器上显示的URL -->
    </servlet-mapping>
</web-app>
  1. 接口下方法的重写:
  • 重新编译类,继承HTTPServlet类,重写doGet()以及doPost()方法,还有init()和destory()方法。
  • 其中doGet()和doPost()方法的传入参数都是HTTPServletRequset 以及 HTTPServletResponse
  • 需要区分的是,Http协议中也有各种请求方法,但是常用的也只有Get()方法,和Post()方法,他们分别对应的处理类也已经很明显了。但是还是要注意的是,Get()方法没有验证机制,不如Post请求方法安全
  • 接下来要注意的是HTTPServletRequset和HTTPServletResponse两个参数类的所有方法
     1.HTTPServletRequse类对于请求头部信息可用方法:
      首先来看看浏览器端重要的头信息:
     在这里插入图片描述
     接着是可用的方法:
      在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. HTTPServletResponse类对于响应头部信息可用方法:
     
     同样先看看服务端重要的头信息
    在这里插入图片描述
     该类对应的可用方法:
    在这里插入图片描述
    在这里插入图片描述

两个实体类可用方法具体如上,下面接着上我写过的一个简单servlet实例代码:

源码:

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.GregorianCalendar;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MessgeServlet extends HttpServlet{
   
	private String messgeString;
	
	public void init() { //初始化数据
	   messgeString="Hello World!";   
    }
	//请求处理方法,处理Get请求的数据
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
		response.setIntHeader("Refresh", 5);//设置5s刷新页面
		response.setContentType("text/html");//设置请求页面格式
		response.sendError(407,"Need auther!!!!");//设置返回的状态码
		String nameString = request.getParameter("maths");//获取页面表单中名称为maths的具体值
		String  nameString2 = request.getParameter("physics");//同上
		String nameString3 = request.getParameter("chemistry");
		Enumeration enumeration = request.getHeaderNames();//获取HTTP请求头部
		while(enumeration.hasMoreElements()) {//遍历输出头部名称以及对应的具体值
			String nameString4 =(String) enumeration.nextElement();
			String nameString5 =(String) request.getParameter(nameString4);
			System.out.println(nameString4+"     "+nameString5);
		}
		Calendar calendar=new GregorianCalendar();//用于获取时间
		int hour = calendar.get(calendar.HOUR);
		int minute = calendar.get(calendar.MINUTE);
		int second = calendar.get(calendar.SECOND);
		PrintWriter out = response.getWriter();
		System.out.println(hour+":"+minute+":"+second);
	}
	//用于处理解决Post请求.
	public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
		response.setContentType("text/html");
		doGet(request, response);//此处直接重新调用了doGet()方法类对其请求进行处理
	}
	public void destroy() {//线程结束时间调用的方法
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值