HttpServlet类简介和简单用法

一, servlet 的三种模式

1.1 实现servlet 接口

如果1个类要实现servlet接口.则要重写如下所有方法:

 void   destroy()

 ServletConfig  getServletConfig()

 String getServletInfo()

 void   init(ServletConfig config)

 void   service(ServletRequest req, ServletResponse res)

其中service方法是关键, 它决定了这个Servlet类获得http请求req的信息后做些什么, 返回什么信息到res对象中)



1.2 继承GenericServlet 抽象类.

实际上GenericServlet 这个抽象类本身是1个实现了servlet接口的抽象类, 只不过Servlet的程序猿按照默认情况帮你重写了上面5个方法中的4个,
但是关键的service()方法还是需要你字节写.

也就是讲GenericServlet的使用比上面的方法要更加方便了, 继承该类的Servlet类只需要重写1个方法(除构造方法外).

1.3 继承HttpServlet抽象类

但是上面两个方法都不是最常用的, 实际在软件公司工作工作中, 95%的情况下都会选择第3种情况, 就是继承HttpServlet抽象类.

HttpSerlvet也是1个实现了Servlet接口的抽象类.
继承抽象类HttpServlet的Servlet类要重写分别两个方法.

分别是

doGet(HttpServletRequest request, HttpServletResponse response)

doPost(HttpServletRequest request, HttpServletResponse response)

上面两个方法都可以处理http请求和返回信息给webserver. 当然了, 它们实际上最终都是重写并调用了Servlet接口的service方法.

但是为什么要分开doGet和doPost呢.

其实doGet是用于处理浏览器的Get请求的. 也就是如果1个浏览器向webserver发起1个Get请求, webserver就会交由队对应servlet类的doGet()方法来处理

相对地, Post请求就会交由doPost()来处理.

二, 什么是Get请求和Post请求.

p1

如上图, 我回了一个贴后,
见到浏览器向服务器发了很多个请求.

但是基本上都是Get请求, 只有1个Post请求, 但是那个Post请求包含了我回复的内容.

顾名思义,
Get请求就是浏览器向服务器申请内容的请求, Get information嘛.
而Post就是向浏览器提交数据的请求, 例如我想把我回复的内容发给服务器(回贴子).

但是上面两句话并不是绝对的. Get请求也可以提交数据.

如果打开1个网址url, 那么这个请求肯定是1个Get请求

如果提交数据则不是绝对的





它们取决于jsp的代码.

例如下面的就是利用Get请求来提交数据:

<form action="/TestServlet1/MyServlet2" method="get">

而下面的代码就是利用post请求来提交数据:

<form action="/TestServlet1/MyServlet2" method="get">

而默认情况下是Get请求. 例如:

<form action="/TestServlet1/MyServlet2">

三, Get请求提交数据的1个例子.

下面我们写1个简单例子来熟悉一下HttpServlet的用法以及Get请求的特点.

3.1 新建1个web项目.

建议利用IDE, 更加方便

p2

3.2 servlet代码

我们编写1个Servlet类MyServlet2:

package com.pkg1;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet2 extends HttpServlet {
  private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MyServlet2() {
        super();
        // TODO Auto-generated constructor stub
    }

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getOutputStream().println("It's call by doget()!");
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getOutputStream().println("It's call by dopost()!");
  }

}

上面的doGet() 和 doPost()方法分别给浏览器返回不同的信息. 那么我们就可以通过浏览器内容来判断究竟执行了哪个方法.

3.3 编写index.jsp

我们在主页上写两个文本框,分别是用户名和密码.
还有1个submit按钮, 用于提交用户输入的用户名和密码啦.

代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test doGet and doPost</title>
</head>
<body>
  <form action="/TestServlet1/MyServlet2" method="post">
  Username:<input type="text" name="username"/>
  Password:<input type="text" name="password"/>
  <input type="submit" value="login"/>
  </form>
</body>
</html>

3.4 修改web.xml, 将servlet类和action url对应起来

添加:

  <servlet>
    <servlet-name>MyServlet2</servlet-name>
    <servlet-class>com.pkg1.MyServlet2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServlet2</servlet-name>
    <url-pattern>/MyServlet2</url-pattern>
  </servlet-mapping>

3.5 编译执行, 然后导出war包到tomcat 的webapps 文件夹, 启动tomcat, 然后在浏览器输入:http:\\localhost:8080\TestServlet1\MyServlet2

其中TestServlet1是项目名.

p3

如上图, 然后输入登陆名和密码, 按submit button

见到网页跳转, 输出
p4

好明显, 见到这个请求交由servlet类的doGet()来处理了.

而且见到,我作为用户输入的密码和passwd作为1个url的部分显示在了地址栏等地方, 这样是不太安全的.
这也是Get方法不是很适合提交数据的原因, 因为提交的数据容易被别人看到.

四, post请求提交数据的1个例子

4.1 修改index.jsp改为post请求.

修改很简单, 改动1个地方就可以了:

<form action="/TestServlet1/MyServlet2" method="post">

4.2 在输入用户密码, 执行一次

只修改jsp的话不用重新编译..

p5

见到这次交由servlet类的dopost()方法处理

而且在地址栏等明显地方是看不到用户提交的数据的.
用户名和密码数据是作为参数, 封装在post请求里面.

所以讲post提交是比Get提交要安全一些的.

但是实际上, http的post请求信息一旦被他人截获, 密码等信息仍然可能被泄露, 因为http协议是明文发送数据的.
所以真正需要严格安全的网页(例如网银登陆),都需要使用https协议.

五, 总结Get提交和Post提交的一些区别.

  • Get提交把提交数据写在url后面, 而Post提交不会
  • Get提交有数据容量限制(4K), 而Post提交原则上是没有数据大小限制的, 但是不建议超过64k
  • Get提交是即时相应, 所以反应快, 而Post提交会被WebServer放入队列, 所以有时相应会慢点.
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,创建一个 HttpServlet 的步骤如下: 1. 新建一个 Java ,在名后面加上 "extends HttpServlet",表示继承 HttpServlet 。 2. 重写 HttpServlet 的 doGet() 和 doPost() 方法,这两个方法分别处理 GET 和 POST 请求。 3. 在 doGet() 和 doPost() 方法中编写具体的业务逻辑。 下面是一个简单的示例代码,用于创建一个名为 MyServletHttpServlet : ``` import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class MyServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>Hello World!</h1>"); out.println("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { // 处理 POST 请求逻辑 } } ``` 在 doGet() 方法中,我们设置了响应的内容型为 HTML,然后使用 PrintWriter 对象输出了一个简单的 HTML 页面。 值得注意的是,在实际应用中,我们通常会使用 JSP 或者模板引擎来生成动态的 HTML 页面,而不是直接在 Servlet 中输出 HTML 代码。 最后,我们还需要在 web.xml 文件中配置 Servlet 的映射关系,以便能够正确地将请求转发到对应的 Servlet 中处理。具体的配置方式可以参考以下代码: ``` <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 以上就是创建一个 HttpServlet 的基本步骤,希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值