1.Servlet接口所需重写的方法
上次简单介绍了servlet,不过重写之后的该接口通常创建之后都是一个单独线程,这点需要注意。知道了servlet在java中的本质是一个接口,而我们使用它,只是重写了这个接口,当然了,接下来就是实现接口所要重写的方法,该接口重写的方法如下:
- init() 初始化方法
该方法只调用一次,初始化数据,并且数据用于servlet线程的整个过程。 - service() 执行实际任务方法
web容器调用该方法处理库护短请求并返回响应,每个servlet请求都会产生一个线程用于回应。该方法中只用处理常用的doGet()和doPost()方法即可 - destory()
只被调用一次,在servlet线程生命周期结束时间调用
- 架构
整个求情响应过程如下:
HTTP请求交给servlet容器,每个请求产生一个新的线程,使用不同实例的不同方法来处理各个请求。如图所示:
- 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>
- 接口下方法的重写:
- 重新编译类,继承HTTPServlet类,重写doGet()以及doPost()方法,还有init()和destory()方法。
- 其中doGet()和doPost()方法的传入参数都是HTTPServletRequset 以及 HTTPServletResponse
- 需要区分的是,Http协议中也有各种请求方法,但是常用的也只有Get()方法,和Post()方法,他们分别对应的处理类也已经很明显了。但是还是要注意的是,Get()方法没有验证机制,不如Post请求方法安全
- 接下来要注意的是HTTPServletRequset和HTTPServletResponse两个参数类的所有方法
1.HTTPServletRequse类对于请求头部信息可用方法:
首先来看看浏览器端重要的头信息:
接着是可用的方法:
- 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() {//线程结束时间调用的方法
}
}