您的位置:首页 > 新闻 > 资讯 > 营销推广的方案_淮北论坛招聘_西安网站seo服务_朝阳网站建设

营销推广的方案_淮北论坛招聘_西安网站seo服务_朝阳网站建设

2025/1/3 11:36:25 来源:https://blog.csdn.net/m0_74124657/article/details/144005521  浏览:    关键词:营销推广的方案_淮北论坛招聘_西安网站seo服务_朝阳网站建设
营销推广的方案_淮北论坛招聘_西安网站seo服务_朝阳网站建设

目录

前言

继承javax.servlet.http.HttpServlet类。


前言

上一篇博客介绍了Servlet的第二种创建方式:继承javax.servlet.GenericServlet类;

本篇博客介绍第三种Servlet创建方式:继承javax.servlet.http.HttpServlet类。

注意:这种方式,也是之后我们广泛使用的,用于前后端交互使用的。

继承javax.servlet.http.HttpServlet类。

继承javax.servlet.http.HttpServlet类。这种创建方式和前面两种的区别在于

  • 我们真正要写的变得越来越少,绝大部分已经自己实现了代码,只需要关心业务代码。

如 init() Servlet用于初始化方法 ,ServletConfig() 用于添加配置信息,destroy()注销....等

service 方法,也不需要我们去重写了

现在请看一下HttpServlet类 的源码

双击shift键,弹出搜索HttpServlet类并且选中右上角的“包括非项目条目” 查看源码

我们重点看 源代码中的重写service方法

 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method = req.getMethod();long lastModified;if (method.equals("GET")) {lastModified = this.getLastModified(req);if (lastModified == -1L) {this.doGet(req, resp);} else {long ifModifiedSince;try {ifModifiedSince = req.getDateHeader("If-Modified-Since");} catch (IllegalArgumentException var9) {ifModifiedSince = -1L;}if (ifModifiedSince < lastModified / 1000L * 1000L) {this.maybeSetLastModified(resp, lastModified);this.doGet(req, resp);} else {resp.setStatus(304);}}} else if (method.equals("HEAD")) {lastModified = this.getLastModified(req);this.maybeSetLastModified(resp, lastModified);this.doHead(req, resp);} else if (method.equals("POST")) {this.doPost(req, resp);} else if (method.equals("PUT")) {this.doPut(req, resp);} else if (method.equals("DELETE")) {this.doDelete(req, resp);} else if (method.equals("OPTIONS")) {this.doOptions(req, resp);} else if (method.equals("TRACE")) {this.doTrace(req, resp);} else {String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[]{method};errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(501, errMsg);}}

我们知道Servlet类中service方法是当我们访问Servlet类 会调用该方法,也就是前端请求后,后端处理请求业务的,就交给service方法来执行。就像上一篇博客【学习Servlet(Servlet实现方式2)】中我们需要重写service方法一样。

大家是否有这个疑问

现在我们service方法,在源码中也帮我们实现了,那我们应该做什么呢?

答案:实现 doGet ()方法和doPost()方法

原因:service ()方法确实是处理前端请求的 方法但 我们有注意到service ()方法的内部依旧有调用其他方法如 doGet ()方法和doPost()方法。因此 大的框架Service 已经帮我们处理好了,我们处理细节处。去重写这个两个方法

在IDEA 中我创建了LoginServlet 继承HttpServlet类

代码如下

package fs;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class CServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//super.doPost(req, resp);}
}

实例

我现在写一个简单的表单的前端代码使用 继承HttpServlet  的方式创建Servlet 来做一个简单的交互

前端代码如下

我们知道:

  • action 属性 是我们访问Servlet的地址
  • method 属性 是选择请求的方式。 常见的请求方式有 :get /post

注意:默认是get

并且我还做了一点小改动:把之前默认首页为index.html 变为我现在创建的login .html界面

操作如下

打开编辑配置,修改url 

那我们如何访问到我们创建的Servlet呢?还是像之前一样在xml配置文件中添加用来访问的url

如图所示

<!--    CServlet--><servlet><servlet-name>CServlet</servlet-name><servlet-class>fs.CServlet</servlet-class></servlet><servlet-mapping><servlet-name>CServlet</servlet-name><url-pattern>/c</url-pattern></servlet-mapping>

虽然这样也可以,但我们在后期是不在xml 配置文件中这样写了,采用注解的方式更加方便

如下图所示:

// 这个参数表示当我们在浏览器访问时,可以找到这个参数关联的Servlet中
// 如果这个参数只有一个 ,value 是可以省略的
//@WebServlet(value="/login")
@WebServlet("/login")

// 这个参数表示当我们在浏览器访问时,可以找到这个参数关联的Servlet中

最根本的原因:url 和Servlet 存在映射关系像key-value 键值对一样。
// 如果这个参数只有一个 ,value 是可以省略的
//@WebServlet(value="/login")

查看注解源码发现

由于我写的表单是默认使用get请求方式提交的

因此我们需要在doGet()方法中,写我们的逻辑代码

   @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);String username = req.getParameter("username");String password = req.getParameter("password");if ("admin".equals(username)&&"123".equals(password)){System.out.println("登录成功");}else {System.out.println("登录失败");}}

启动服务器,访问LoginServlet 

我现在输入正确答案

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com