目录
Servlet两个顶级接口:接口的实现类:Servlet 的生命周期
HttpServletRequest接口:HttpServletResponse接口:重定向:请求转发(将request信息传递下去):
编写web.xml文件编写jsp文件编写html网页注意myServlet类编写
Servlet
servlet是服务器端的组件,从初始化到销毁,都依赖与容器Servlet只有在第一次被调用时初始化一次,该实例被存储在容器中多客户端并发访问时,Tomcat会启动多线程.如果某个Servlet需要在应用加载时被初始化,可以通过在web.xml中配置来完成
两个顶级接口:
Servlet接口定义了所有必须实现的方法:init(),service(),destroy()
ServletConfig接口封装Servlet实例的初始化配置信息:
getInitParameter(name)被HTTPServlet类实现
接口的实现类:
GenericServlet:实现了Servlet,ServletConfig接口中所有方法,
也扩展了新方法.
init()仅用于在Service类实例化后调用一次.
基于Http协议的实现类:HttpServlet
类关系:public abstract class HttpServlet
extends GenericServlet
implements Servlet,ServletConfig
自定义的Servlet类往往都直接继承HttpServlet
Servlet 的生命周期
* 初始化
* 构造方法
* init(ServletConfig)方法 init()方法
* 提供服务
* service方法
* doxxx方法
* 销毁
* destroy方法
HttpServletRequest接口:
定义了大量获得请求信息的方法
获取请求头的方法:getHeader(name),getIntHeader(),getDateHeader()
,getHearNames(),getHeaders()
获取请求参数的方法:获取某个name的vlaue:getParameter(name),
获取所有的Name和vlaue:getParameterValues(),
getParameterNames()
获取客户端以及服务器端信息的方法:getRemoteAddr,getRemotePort,
getLocalName,getLocalPort.
HttpServletResponse接口:
定义大量获得响应信息的方法
处理响应头信息的方法:addHeader,addIntHeader,
addDateHeader,setHeader,setIntHeader
获取响应输出流及设置内容类型的方法
getWriter:获得输出流out对象
setContentType:设置响应的内容类型 text/html;charset=UTF-8
响应重定向 sendRedirect:实现响应重定向功能,
用来将响应重新定向到其他页面,生成响应给客户端.
重定向:
sendRedirect(location)两次请求和响应地址栏会变化带工程名路径可以定向到任何网站
请求转发(将request信息传递下去):
getRequestDispatcher(path).forward(request, response);请求转发器的接口是RequestDispatcher:ServletRequest接口中的getRequestDispatcher获得,请求转发方法forword(request, response);Servlet内部调用地址栏不会变化路径不带工程名只能在本网站内部
重定向和请求转发的比较要了解详情请点击
编写web.xml文件
编写jsp文件
编写html网页
注意
服务器的8080端口被占用:
win+R : cmd
netstat -ano| findstr 8080
taskkill/pid XXXX /f
myServlet类编写
import java
.io
.IOException
;
import java
.util
.Enumeration
;
import javax
.servlet
.ServletException
;
import javax
.servlet
.annotation
.WebServlet
;
import javax
.servlet
.http
.HttpServlet
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;
@
WebServlet("/TestServlet")
public class TestServlet extends HttpServlet
{
private static final
long serialVersionUID
= 1L;
@Override
public void init() throws ServletException
{
System
.out
.println("Servlet类的构造方法:init()");
String level
=this.getInitParameter("level");
System
.out
.println("在web.xml中"
+ "(ServletConfig接口封装Servlet实例的初始化配置信息)"
+ "对Servlet配置初始化参数level:"+level
);
super
.init();
}
@Override
protected void service(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
System
.out
.println("调用service方法,可相应客户端请求.");
super
.service(request
, response
);
}
@Override
protected void doGet(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
System
.out
.println("调用 doGet 方法.");
String method
=request
.getMethod();
System
.out
.println(method
);
StringBuffer URLtxt
=request
.getRequestURL();
System
.out
.println(URLtxt
);
String URItxt
=request
.getRequestURI();
System
.out
.println(URItxt
);
String h
=request
.getScheme();
System
.out
.println(h
);
String vlaue
=request
.getHeader("age");
System
.out
.println(vlaue
);
request
.setCharacterEncoding("UTF-8");
Enumeration
<String
> e
=request
.getHeaderNames();
while(e
.hasMoreElements()) {
String name
=(String
)e
.nextElement();
String vlaue1
=request
.getHeader(name
);
System
.out
.println(name
+":"+vlaue1
);
}
String Name
=request
.getParameter("name");
int age
=Integer
.parseInt(request
.getParameter("age"));
String studentID
=request
.getParameter("studentID");
System
.out
.println(Name
+":"+age
+":"+studentID
);
if(age
<25) {
response
.setContentType("text/html;charset=UTF-8");
request
.getRequestDispatcher("denglv.html").forward(request
, response
);
}else {
response
.sendRedirect("index.jsp");
request
.getRequestDispatcher("index.jsp").forward(request
, response
);
}
}
@Override
protected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
System
.out
.println("调用 doPost 方法.");
doGet(req
,resp
);
}
@Override
public void destroy() {
System
.out
.println("destroy方法被容器调用,表示Servlet实例被销毁.");
super
.destroy();
}
}
写于2020-10-20