Servlet入门第二天——搭建简易Servlet和表单数据提交方法

Servlet

通过本篇博客,您将会学到如下知识:用idea搭建一个简易的Servlet、表单数据(get,post)

IDEA搭建一个简易Servlet

创建项目

在这里插入图片描述

然后随便命名

项目配置

  • 在WEB-INF目录下新建两个文件夹classes和lib
    • classes:用于存放编译后的class文件
    • lib用于存放依赖的jar包
  • 进入Project Structure页面按照下图进行配置,将编译后的class文件放到指定位置

在这里插入图片描述

  • 点击 Modules –> 选中项目“JavaWeb” –> 切换到 Dependencies 选项卡 –> 点击右边的“+”,选择 “JARs or directories…”,选择创建的lib目录

在这里插入图片描述

编写servlet程序

  • 在src中创建一个Servlet程序

    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;
    import java.io.PrintWriter;
    
    /**
     * Created with IntelliJ IDEA
     * Description:
     * Author: sun mingzhi
     * Date:  2019/10/29 14:08
     * Company: Inspur
     */
    @WebServlet(name = "demo")
    public class demo extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //设置网页响应类型  
            response.setContentType("text/html");
            PrintWriter out =response.getWriter();
            out.println("成功啊");
        }
    }
    
  • 修改web.xml中的配置信息

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 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_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>demo</servlet-name>
            <servlet-class>demo</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>demo</servlet-name>
            <url-pattern>/demo</url-pattern>
        </servlet-mapping>
    
    </web-app>
    

配置tomcat

在这里插入图片描述

运行程序

在这里插入图片描述

表单数据

Get方法

  • 向页面请求发送已编码的用户信息。页面和已编码的信息中间用?字符隔开
http://www.test.com/hello?key1=value1&key2=value2
  • 是默认从浏览器向Web服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中,还有大小限制
  • 使用doGet()方法来处理这种类型的请求

POST方法

  • 使用doPost()来处理这种请求

使用Servlet读取表单数据

  • **getParameter():**您可以调用 request.getParameter() 方法来获取表单参数的值。
  • **getParameterValues():**如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
  • **getParameterNames():**如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

使用URL的GET方法实例

  • URl:
    • 其中/web是由tomcat来指定的
    • /demo是由xml配置的或者在Servlet中有@WebServlet配置的。优先使用xml中的
    • ?后面就是传输的数据
http://localhost:8080/web/Demo?name=冢狐&url=https://blog.csdn.net/issunmingzhi

输入这个路径发生了什么

  • 发现Tomcat中的web.xml有配置这个映射路径 /Demo
  • 查看映射路径的名字是什么 Demo
  • 通过映射路径的名字找到配置Servelt的名字 Demo
  • 通过Servlet的名字找到Servlet编译后class文件存放的位置 Demo
  • 执行Demo
  • Servlet代码
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;
import java.io.PrintWriter;

/**
 * Created with IntelliJ IDEA
 * Description:
 * Author: sun mingzhi
 * Date:  2019/11/13 9:47
 * Company: Inspur
 */
@WebServlet("/Demo")
public class Demo extends HttpServlet {
    public Demo(){
        super();
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
        //处理中文乱码,设置消息头
        response.setContentType("text/html;charset=UTF-8");
        String name=request.getParameter("name");
        String url=request.getParameter("url");
        PrintWriter out=response.getWriter();
        out.println(name+url);
    }
    @Override
    protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        doGet(request,response);
    }
}

  • xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>Demo</servlet-name>
        <servlet-class>Demo</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Demo</servlet-name>
        <url-pattern>/Demo</url-pattern>
    </servlet-mapping>

</web-app>
  • xml注册一个Servlet组件节点

    • servlet
      • Servlet名称,当前xml中唯一
      • Servlet实现类的全限定类名
    • servlet-mapping 给注册的servlet添加映射路径
      • 这个要与 前面写的servlet保持一致
      • 配置这个组件的访问路径必须以/开头
  • xml中的load-on-startup:

    如果其值大于等于0:表示容器在应用启动时就加载这个Servlet

    当时一个负数或者没有指定时:则指示容器在该servlet被选择时才加载

    配置后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;如未配置load-on-startup,容器一般在第一次响应web请求时,会先检测该servlet是否初始化,如未初始化,则调用servlet的init()先初始化,初始化成功后,再响应请求。

    • 正数越小,优先级越高
    • 好处
      • 如果初始化失败,则容器会提示启动失败,此时我们能够提前知道相关错误
      • 配置该参数相当于将初始化servlet的工作转移到容器启动过程,使得容器只要启动成功后,就可以立即响应web请求
  • 使用@WebServlet注解

    • 不要在web.xml文件的根元素()中指定metadata-complete=“true”;默认为metadata-complete="true"的话修改其属性为metadata-complete="false"IDEA默认Web.xml配置文件没有对metadata-complete属性进行设置,此时不需要进行设置即可使用。
    • 不要再xml中配置该Servlet

注意几点:

  • 一个Servlet可以配置多个映射路径
    • 配置多个servlet-mapping
    • 出现多个url-pattern
  • *可以匹配任意字符路径,在点击计数器那一章中有具体应用
  • 通配符的使用格式是固定的
    • 如果路径要匹配后缀名,路径必须以*开头
    • 如果一个路径是以"/“开头,那么”*"必须在最后
  • 注意"/"优先级高于*开头的路径

效果

在这里插入图片描述

使用表单的get方法实例

  • HTML页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>冢狐</title>
</head>
<body>
<form action="Demo" method="GET">
  网址名:<input type="text" name="name">
  <br />
  网址:<input type="text" name="url" />
  <input type="submit" value="提交" />
</form>
</body>
</html>

​ action:表示往哪个页面去跳转

​ method:表示提交数据的方式

在这里插入图片描述

点击提交即可跳转的响应的页面

使用表单的POST方法实例

和使用表单的get方法差不多

将复选框数据传递到Servlet

  • HTML
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>冢狐</title>
</head>
<body>
<form action="demo" method="POST" target="_blank">
  <input type="checkbox" name="zhonghu" checked="checked" /> 冢狐
  <input type="checkbox" name="google"  /> Google
  <input type="checkbox" name="taobao" checked="checked" /> 淘宝
  <input type="submit" value="选择站点" />
</form>
</body>
</html>

​ check="checked"默认勾选

  • Servlet
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;
import java.io.PrintWriter;

/**
 * Created with IntelliJ IDEA
 * Description:
 * Author: sun mingzhi
 * Date:  2019/10/29 14:08
 * Company: Inspur
 */
@WebServlet("/demo")
public class demo extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String title = "读取复选框数据";
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>冢狐标识:</b>: "
                + request.getParameter("zhonghu") + "\n" +
                "  <li><b>Google 标识:</b>: "
                + request.getParameter("google") + "\n" +
                "  <li><b>淘宝标识:</b>: "
                + request.getParameter("taobao") + "\n" +
                "</ul>\n" +
                "</body></html>");
    }

    // 处理 POST 方法请求的方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

效果图:

在这里插入图片描述
在这里插入图片描述

读取所有的表单参数

  • 使用 HttpServletRequest 的 getParameterNames() 方法读取所有可用的表单参数。该方法返回一个枚举,其中包含未指定顺序的参数名。
  • 一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称

xml:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>冢狐</title>
</head>
<body>

<form action="demo" method="POST" target="_blank">
  <input type="checkbox" name="maths" checked="checked" /> 数学
  <input type="checkbox" name="physics"  /> 物理
  <input type="checkbox" name="chemistry" checked="checked" /> 化学
  <input type="submit" value="选择学科" />
</form>

</body>
</html>

servlet

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;
import java.io.PrintWriter;
import java.util.Enumeration;

/**
 * Created with IntelliJ IDEA
 * Description:
 * Author: sun mingzhi
 * Date:  2019/10/29 14:08
 * Company: Inspur
 */
@WebServlet("/demo")
public class demo extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String title = "读取所有的表单数据";
        String docType =
                "<!doctype html public \"-//w3c//dtd html 4.0 " +
                        "transitional//en\">\n";
        out.println(docType +
                "<html>\n" +
                "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<table width=\"100%\" border=\"1\" align=\"center\">\n" +
                "<tr bgcolor=\"#949494\">\n" +
                "<th>参数名称</th><th>参数值</th>\n"+
                "</tr>\n");

        Enumeration paramNames = request.getParameterNames();

        while(paramNames.hasMoreElements()) {
            String paramName = (String)paramNames.nextElement();
            out.print("<tr><td>" + paramName + "</td>\n");
            String[] paramValues =
                    request.getParameterValues(paramName);
            // 读取单个值的数据
            if (paramValues.length == 1) {
                String paramValue = paramValues[0];
                if (paramValue.length() == 0)
                    out.println("<td><i>没有值</i></td>");
                else
                    out.println("<td>" + paramValue + "</td>");
            } else {
                // 读取多个值的数据
                out.println("<td><ul>");
                for(int i=0; i < paramValues.length; i++) {
                    out.println("<li>" + paramValues[i]);
                }
                out.println("</ul></td>");
            }
            out.print("</tr>");
        }
        out.println("\n</table>\n</body></html>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

效果图

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值