【JavaWeb学习,快一起呀,干!】第二章 Servlet基础(3)—— 应用:数据处理

开门见山

我先和大家唠两句嗑,要到秋天了,天气改转凉了。可神特喵的天气 29度,29度啊大哥,和大夏天有啥子区别,这谁顶得住!【来自怕热星人的碎碎念】

Servlet 是运行于 Web 服务器端的 Java 程序。在 Web 开发中,Servlet 常用于在服务器端处理一些与界面无关的任务。

例如,客户端请求数据的处理、HTTP 请求报头和响应报头的处理、请求链的传递和转向控制等。

今天来详细的说说,Servlet 应用,学东西起码要知道是做什么用的

教学内容:

一、数据处理

二、重定向与请求转发

一、数据处理

在 Web 应用中,客户端向服务端请求数据的方式通常有两种:

· 一种是通过超链接形式查询数据

· 另一种是通过 From 表单形式更新数据

对于这两种不同的数据请求方式,Servlet 使用 HttoServletRequest 接口负责对其请求的数据进行处理

1)处理超链接请求数据

【语法】
在这里插入图片描述

【代码】link.jsp
在这里插入图片描述
【运行结果】
在这里插入图片描述
【程序说明】

LinkRequestServlet:链接地址中的 LinkRequestServlet 为请求地址;

pageNo:pageNo 表示请求参数

2:2 为 pageNo 请求参数的值

&:&为多个参数间的关联符

queryString:queryString 表示另一个请求参数

QST:QST为 queryString 请求参数的值

当用户通过超链接发送的请求到达 Servlet 容器时,包含数据的请求将被容器转换为 ServletRequest 对象,如果用户请求使用的是 HTTP 协议,请求还将被进一步包装成 HttpServletRequest 对象。对请求数据的处理工作就由 HttpServletRequest 对象完成

HttpServletRequest 对象常用的数据处理方法:

· public String getParameter(String name) 返回由 name 指定的用户请求参数的值

· public String[] getParameterValues(String name) 返回由 name 指定的一组用户请求参数的值

· public Enumeration getParameterNames() 返回所有客户请求的参数名

容器在将请求转换为 HttpServletRequest 对象之后,还会根据请求的类型调用不同的请求方法。

对用超链接的 GET 请求则会调用 doGet() 方法;对于 From 表单的 POST 请求则会调用 doPost() 方法。

HttpServletRequest 对象的超链接数据请求处理代码

【代码】LinkRequestServlet.java
在这里插入图片描述
在这里插入图片描述
【运行结果】
在这里插入图片描述

2)处理 Form 表单请求数据

通过 Form 表单形式发送数据请求的语法格式

【语法】
在这里插入图片描述
【代码】regist.jsp
在这里插入图片描述
【运行结果】
在这里插入图片描述
From 表单中的 method 属性表示请求类型,取值包括为 GET 和 POST。

GET 一般用于资源信息获取或查询;POST 则一般用于资源信息更新。

无论是基于安全性的考虑还是传输数据大小的限制,POST 都要好于 GET,一般在 Form 表单使用中请求多用 POST

From 表单中 action=“FormRequestServlet” , FormRequestServlet 对请求参数的处理代码

【代码】FormRequestServlet.java
在这里插入图片描述
在这里插入图片描述
【运行结果】在 regist.jsp 运行结果中,点击提交表单
在这里插入图片描述
总结一下,对于Servlet对于数据的处理有两种,

分别是 标签的超链接请求数据的处理,属性名为 href;和表单请求数据,属性名为 action。

直观感觉看起来东西挺多,其实还真没什么。

代码奉上:

【link.jsp】

<%@page language="java" contentType="text/html; charest=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>Insert title here</title>

</head>

<body>

<a href="LinkRequestServlet?pageNo=2&queryString=QST">下一页</a>

</body>

</html>

【regist.jsp】

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>用户注册</title>

</head>

<body>

       <form action="FromRequestServlet" method="POST">

       <p>用户名:<input name="username" type="text"></p>

       <p>密&nbsp;码:<input name="password" type="password"></p>

       <p>信息来源:<input name="channel" type="checkbox" value="Web">网络

       <input name="channel" type="checkbox" value="Newspaper">报纸

       <input name="channel" type="checkbox" value="Friend">亲友</p>

       <p><input type="submit" value="提交"/><input type="reset" value="重置"/></p>

       </form>

</body>

</html>

【LinkRequestServlet.java】

import java.io.IOException;

import java.io.PrintWriter;

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("/LinkRequestServlet")

public class LinkRequestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public LinkRequestServlet() {

        super();

    }

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

        //设置请求的字符编码为 UTF-8

        request.setCharacterEncoding("UTF-8");

        //设置响应的文本类型为 HTML, 字符编码为 UTF-8

        response.setContentType("text/html; charset=UTF-8");

        //获取输出流

        PrintWriter out = response.getWriter();

        //获取请求数据

        String pageNo = request.getParameter("pageNo");

        String queryString = request.getParameter("queryString");

        int pageNum = 0;

        if(pageNo!=null)

            pageNum = Integer.parseInt(pageNo);

        //响应输出数据

        out.println("<p>请求的页数是:"+pageNum+"</p>");

        out.println("<p>请求的查询字符是:"+queryString+"</p>");

        out.flush();

        out.close();

    }

    

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

    

    }

}

【FromRequestServlet.java】

import java.io.IOException;

import java.io.PrintWriter;

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;

/**

 * Servlet implementation class FromRequestServlet

 */

@WebServlet("/FromRequestServlet")

public class FromRequestServlet extends HttpServlet {

       private static final long serialVersionUID = 1L;

      

    /**

     * @see HttpServlet#HttpServlet()

     */

    public FromRequestServlet() {

        super();

    }

       /**

        * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

        */

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

             //设置响应的文本类型为 HTML, 字符编码为 UTF-8

             response.setContentType("text/html; charset=UTF-8");

             //获取请求数据

             String username = request.getParameter("username");

             String password = request.getParameter("password");

             String[] channel = request.getParameterValues("channel");

             Enumeration<String> elem = request.getParameterNames();

             //获取输出流

             PrintWriter out = response.getWriter();

             //响应输出数据

             out.print("<p>注册的用户名是:" + username + "</p>");

             out.print("<p>注册的密码是:" + password + "</p>");

             out.print("<p>注册的信息来源是:");

             for(String c:channel)

                    out.print(c+ "&nbsp;");

             out.print("</p><p>所有客户请求的参数名是:");

             while(elem.hasMoreElements())

                    out.print(elem.nextElement() + "&nbsp;");

             out.print("</p>");

             out.flush();

             out.close();

       }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值