欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb 之Servlet 干货详解(一)

程序员文章站 2022-06-03 09:15:44
...

目录

一.Servlet简介

二.Servlet-常见问题

三.​​​​​​​ Servlet-如何接收表单参数列表

四.​​​​​​​ request对象

1.​​​​​​​​​​​​​​ 简述&继承树

2.​​​​​​​Request操作-行

3.Request操作-头

4.​​​​​​​Request操作-体


一.Servlet简介

Servlet的作用

  • Servlet是JavaWEB三大组件之一,而且是最重要的。
  • 通常一个功能就需要创建一个Servlet,例如登录是一个功能,那么就要创建一个Servlet,注册也是一个功能,也要创建一个Servlet。
  • 当浏览器发送请求给服务器时,服务器会请求的处理工作交给对应的Servlet来完成。

什么是Servlet

  • Servlet是JavaWEB提供的一个接口,我们创建的Servlet需要实现该接口。
  • Servlet 运行在服务端的Java小程序。

    用来接收浏览器数据,处理数据,返回处理结果

创建Servlet步骤

  • 创建一个Java文件,创建一个类,这个类要继承BaseServlet

该类中要添加一个请求处理方法:

  1. 方法名无限定
  2. 方法不能有参数
  3. 方法的返回值必须是String

 

为Servlet在web.xml中配置url

<servlet>元素

  • <servlet-name>:通常无限定
  • <servlet-class>:指定Servlet完整的类名称(包含包名的)

 

<servlet-mapping>元素

  • <servlet-name>:为要谁指定url
  • <url-pattern>:指定url,通常以“/”开头

 

二.​​​​​​​Servlet-常见问题

1、<servlet>和<servlet-mapping>下的<servlet-name>必须相同

JavaWeb 之Servlet 干货详解(一)

 

 

2、<serlvet>下的<servlet-class>指向的servlet路径必须正确

JavaWeb 之Servlet 干货详解(一)

 

 

3、web.xml中,所有的<servlet-mapping>中 <url-pattern>绝对不能相同

JavaWeb 之Servlet 干货详解(一)

 

4、忘记继承BaseServlet

JavaWeb 之Servlet 干货详解(一)

 

 

5、请求路径上忘记 传递method参数

JavaWeb 之Servlet 干货详解(一)

 

 

6、lib文件夹必须放在WEB-INF下

 

 

 

三.​​​​​​​ Servlet-如何接收表单参数列表

  • get方式:

表单:

<form action=”/项目名/servlet路径”>

<input type=”hidden” name=”method” value=”servlet方法名/>

JavaBean:

成员变量的名称必须和表单name属性相同

成员变量的类型尽量是String

Servlet:

JavaBean 对象 = toBean(JavaBean.class);//数据就在对象中封装

 

解决中文乱码:(较少)

String 解决 = new String(“乱码”.getBytes(“iso8859-1”),”utf-8”);

 

Get练习:

form.jsp
<form action="/javaweb_day02_1/d1">
    <input type="hidden" name="method" value="run2"/>
    <input type="text" name="username"/><br/>
    <input type="password" name="pwd"/><br/>
    <input type="submit"/>
</form>


User.java
public class User implements Serializable {
    private String username;
    private String pwd;
    //get/set/有参/无参/toString
}

Demo1.java
/*
* 接收从form.jsp传递而来的表单数据
* */
public String run2() throws UnsupportedEncodingException {
    //接收表单数据
    User user = toBean(User.class);
    //get乱码解决:
    String username = user.getUsername();
    username = new String(username.getBytes("iso8859-1"),"utf-8");
    user.setUsername(username);
    System.out.println(user);
    return null;
}
 

 

 

  • post方式:

表单:

<form action=”/项目名/servlet路径”>

<input type=”hidden” name=”method” value=”servlet方法名/>

JavaBean:

成员变量的名称必须和表单name属性相同

成员变量的类型尽量是String

Servlet:

JavaBean 对象 = toBean(JavaBean.class);//数据就在对象中封装

 

内部已经解决了乱码:

请求体编码解码都使用utf-8

 

 

复选框的接收:

JavaWeb 之Servlet 干货详解(一)

 

JavaWeb 之Servlet 干货详解(一)

 

 

四.​​​​​​​ request对象

JavaWeb 之Servlet 干货详解(一)

 

 

 

1.​​​​​​​​​​​​​​ 简述&继承树

request对象的类型

  • HttpServletRequest是一个接口,实现类由服务器(Tomcat)提供。
  • 父接口:ServletRequest

 

request对象的作用

  • request与HTTP请求之间的关系:Tomcat会把所有请求协议的数据封装到request对象中,再把request对象传递给Servlet

 

封装请求行数据:

  • 请求方式:GET、POST
  • 请求URL:网址
  • 请求协议与版本:HTTP /1.1

 

封装请求头数据

  • 请求头:
  • String getHeader(String name):通常参数指定的头名称返回对应的值
  • int getIntHeader(String name):会把上面方法返回的字符串转换成int类型
  • long getDateHeader(String name):会把上面方法返回的字符串表示的时间转换成毫秒值
  • Enumeration<String> getHeaderNames():返回所有头的名称

 

封装请求参数数据

  • 所有的请求参数
  • String getParameter(String name):通过参数名获取参数值
  • Map<String,String[]> getParameterMap():获取所有参数和和参数值
  • String[] getParameterValues(String name):通过参数名获取0-N个参数值。
  • Enumeration<String> getParameterNames():获取所有参数名称

 

request域属性及请求转发

       request域属性

  • Object getAttribute(String name):通过属性名获取属性值
  • void setAttribute(String name, Object value):保存一个属性
  • void removeAttribute(String name):通过属性名删除一个属性
  • Enumeration<String> getAttributeNames():获取所有属性名称

 

JavaWeb 之Servlet 干货详解(一)

 

 

从request对象中读信息response对象中写

JavaWeb 之Servlet 干货详解(一)

现在我们servlet中获取的request对象,都实现了HttpServletRequest接口

 

 

2.​​​​​​​Request操作-行

方法声明

功能描述

String getRemoteAddr()

该方法用于获取请求客户端的IP地址,其格式类似于“192.168.0.3”

String getContextPath()

该方法用于获取请求URL中属于WEB应用程序的路径,这个路径以“/”开头,表示相对于整个WEB站点的根目录,路径结尾不含“/”。如果请求URL属于WEB站点的根目录,那么返回结果为空字符串("")

 

 

       方法声明(不建议/过时)

功能描述

String getMethod()

该方法用于获取HTTP请求消息中的请求方式(如GETPOST等)

String getRequestURI()

该方法用于获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的部分

String getQueryString()

该方法用于获取请求行中的参数部分,也就是资源路径后面问号(?)以后的所有内容

String getProtocol()

该方法用于获取请求行中的协议名和版本,例如,HTTP/1.0HTTP/1.1

String getServletPath()

该方法用于获取Servlet的名称或Servlet所映射的路径

String getRemoteHost()

该方法用于获取请求客户端的完整主机名,其格式类似于“pc1.itcast.cn”。需要注意的是,如果无法解析出客户机的完整主机名,该方法将会返回客户端的IP地址

int getRemotePort()

该方法用于获取请求客户端网络连接的端口号

String getLocalAddr()

该方法用于获取Web服务器上接收当前请求网络连接的IP地址

String getLocalName()

该方法用于获取Web服务器上接收当前网络连接IP所对应的主机名

int getLocalPort()

该方法用于获取Web服务器上接收当前网络连接的端口号

String getServerName()

该方法用于获取当前请求所指向的主机名,即HTTP请求消息中Host头字段所对应的主机名部分

int getServerPort()

该方法用于获取当前请求所连接的服务器端口号,即如果HTTP请求消息中Host头字段所对应的端口号部分

String getScheme()

该方法用于获取请求的协议名,例如http、https或ftp

StringBuffer getRequestURL()

该方法用于获取客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径等信息,但不包括后面的查询参数部分。注意,getRequestURL()方法返回的结果是StringBuffer类型,而不是String类型,这样更便于对结果进行修改

代码:

public String run1(){
    System.out.println("操作请求行");
    //读取请求行
    HttpServletRequest request = getRequest();
    //常见:
    //0:0:0:0:0:0:0:1  127.0.0.1  localhost : 本机
    System.out.println(request.getRemoteAddr());
    //当前项目名    /javaweb_day04_1
    System.out.println(request.getContextPath());
    //了解:
    //请求方式:get/post
    System.out.println(request.getMethod());// get
    //请求路径
    System.out.println(request.getRequestURI());//  /javaweb_day04_1/d3
    System.out.println(request.getRequestURL());//  http://localhost:8080/javaweb_day04_1/d3
    //请求参数 get
    System.out.println(request.getQueryString());// method=run1&username=zzz&pwd=111
    //获取当前servlet路径
    System.out.println(request.getServletPath());// /d3
    //获取端口号
    System.out.println(request.getRemotePort());//  62065
    //获取服务器名称
    System.out.println(request.getServerName());//  localhost
    //获取协议名
    System.out.println(request.getScheme());//  http
    return null;
}

 

 

3.Request操作-头

方法声明

功能描述

String getHeader(String name)

该方法用于获取一个指定头字段的值,如果请求消息中没有包含指定的头字段,getHeader()方法返回null;如果请求消息中包含有多个指定名称的头字段,getHeader()方法返回其中第一个头字段的值

public String run2(){
    System.out.println("操作请求头");
    HttpServletRequest request = getRequest();
    System.out.println(request.getHeader("accept"));
    System.out.println(request.getHeader("memeda"));//null
    return null;
}

 

 

4.​​​​​​​Request操作-体

仅有post请求,才有请求体

 

获取参数列表:

JavaBean 对象 = toBean(JavaBean.class); //需要获取全部数据,封装到JavaBean

JavaWeb 之Servlet 干货详解(一)

 

如果需要针对性地获取某一个参数:

String 参数值 = getParameter(“参数名”);

注意:如果有多个参数,仅返回第一个

      

String[] 参数值 = getParameterValues(“参数名”);

注意:以上两者,如果该参数不存在,返回null

 

代码:

public String run3(){
    System.out.println("获取参数列表");
    //针对性获取某一个参数的值
    String username = getRequest().getParameter("username");
    System.out.println(username);
    //针对性获取某一个参数值,String[]
    String[] hobby = getRequest().getParameterValues("hobby");
    System.out.println(Arrays.toString(hobby));
    return null;
}

 

 

未完待续,下篇详解~~~

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

注: 如果本篇有需要改进的地方或错误,欢迎大神们指定一二~~