您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
13-Servlet方法介绍&体系结构(HttpServlet的使用)
发布时间:2024-11-26 13:57:32编辑:雪饮阅读()
-
在前番实现Servlet接口的时候有个方法我们看到默认是返回unll的getServletConfig
方法,如果想要实质上返回有用的信息。
则可以结合init方法
package com;
import javax.servlet.*;
import java.io.IOException;
public class ServletTest2 implements Servlet {
private ServletConfig config=null;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
this.config=servletConfig;
}
@Override
public ServletConfig getServletConfig() {
return config;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
那这里你还可以看到一个方法getServletInfo这个一般是返回一些信息,比如作者,版权,版本号之类的,一般没有什么作用,所以一般也就是返回null或者空字符串就行了。
httpServlet是针对Servlet专门处理http的一个实现类,可以让我们更加便捷的处理http请求。
比如我们创建一根HttpServletTest01的类如HttpServletTest01:
package com;
import javax.jws.WebService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/httpServletTest01")
public class HttpServletTest01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
System.out.print("doGet....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doPost(req, resp);
System.out.print("doPost....");
}
}
这里定义该servlet的访问路径可如localhost:8080/servlet01/httpServletTest01
并且我们覆写了其HttpServlet的doGet与doPost方法,并且这里暂时我们先屏蔽掉父类执行doGet与doPost方法。
若我们直接访问localhost:8080/servlet01/httpServletTest01则肯定是输出doGet。
但是此时在我们的项目中的module中的webapp里面创建如index.html为
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/servlet01/httpServletTest01" method="post">
<input name="username"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
那么我们访问http://localhost:8080/servlet01/并在里面的表单中进行submit操作后。则控制台会输出doPost。
所以说这里doGet和doPost是HttpServlet为我们封装的方便区别get请求和post请求的。
否则如果我们自己要来封装就也挺麻烦的,首先我们需要一个实现Servlet的类并优先于我们的实体子类在service中接受请求并分别将get请求分给doGet处理,将post请求分给post请求处理。
如这个父类可以是这样:
package com;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class ServletTest3 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
HttpServletRequest request=(HttpServletRequest) servletRequest;
String method=request.getMethod();
if("GET".equals(method)){
//get方式的处理逻辑
doGet(servletRequest,servletResponse);
}
else if("POST".equals(method)){
//post方式的处理逻辑
doPost(servletRequest,servletResponse);
}
}
protected void doGet(ServletRequest servletRequest,ServletResponse servletResponse){}
protected void doPost(ServletRequest servletRequest,ServletResponse servletResponse){}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
这里doGet和doPost都是protected修饰的,可以用来被子里覆写。
那么我们现在在webapp目录中再次建立一个如index2.html并且定义一个新的提交servlet的路径如
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/servlet01/MyHttpServlet" method="post">
<input name="username"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
然后我们继承刚才自己封装的doGet与doPost方法所在的父类已分发处理了http请求以不同请求到不同请求对应的方法doGet与doPost,然后进行实现的实际业务子类并对于上面的index2的提交的servlet的path,则如
package com;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
@WebServlet("/MyHttpServlet")
public class MyHttpServlet extends ServletTest3{
@Override
protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
// super.doGet(servletRequest, servletResponse);
System.out. println("MyHttpServlet doGet");
}
@Override
protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
// super.doPost(servletRequest, servletResponse);
System.out. println("MyHttpServlet doPost");
}
}
则此时访问如
localhost:8080/servlet01/MyHttpServlet
则在控制台输出如MyHttpServlet doGet
访问如http://localhost:8080/servlet01/index2.html
并在其中的表单进行submit操作,则控制台会输出如
MyHttpServlet doPost
如此的麻烦呢,所以如果是处理http请求,就最好直接用HttpServlet类进行extends即可。
关键字词:Servlet,HttpServlet
相关文章
- 12-Servlet执行流程&生命周期(init、service、destroy
- 11-Servlet简介&快速入门
- 16-编写Servlet-依赖范围配置(maven项目实现servlet)
- 16_Listener_ServletContextListener使用(servlet容器
- 6_Filter_细节_过滤器拦截路径配置(servlet拦截与目录
- 19_ServletContext_功能_获取文件服务器路径(src,web,w
- 18_ServletContext_功能_域对象(全局)
- 17_ServletContext_功能_获取MIME类型
- 16_ServletContext_获取
- 18_Request_获取ServletContext