IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Servlet学习笔记 -> 正文阅读

[Java知识库]Servlet学习笔记


一、如何在Tomcat中配置虚拟主机(host)

1.创建页面

创建 index.html 页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ITBZ </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY> Welcome to ITBZ </BODY>
</HTML>

2.修改server.xml添加Host配置以及添加Context配置

<Host name="www.itbz.com"  appBase="webapps"
                 unpackWARs="true" autoDeploy="true">
	<Context path="/itbz" docBase="C:\javatest"/>
	</Host>

3.修改windows的Host文件

实现域名与IP的绑定
Host文件位置

C:\Windows\System32\drivers\etc

4.访问资源测试结果

在这里插入图片描述

二、HttpServletRequest 对象

HttpServletRequest 对象代表客户端浏览器的请求,当客户端浏览器通过 HTTP 协议访问服务器时,HTTP 请求中的所有信息都会被 Tomcat 所解析并封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

三、获取请求信息

req.getRequestURL()
返回客户端浏览器发出请求时的完整 URL。
req.getRequestURI()
返回请求行中指定资源部分。
req.getRemoteAddr()
返回发出请求的客户机的 IP 地址。
req.getLocalAddr()
返回 WEB 服务器的 IP 地址。
req.getLocalPort()
返回 WEB 服务器处理 Http 协议的连接器所监听

//获取请求信息
public class DemoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        StringBuffer requestURL = req.getRequestURL();
        String requestURI = req.getRequestURI();
        String remoteAddr = req.getRemoteAddr();
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        out.println("URL:"+requestURL+"<br/>");
        out.println("URI:"+requestURI+"<br/>");
        out.println("RemoteAddr:"+remoteAddr+"<br/>");
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();

    }
}

在web.xml中:

    <servlet>
        <servlet-name>demoServlet</servlet-name>
        <servlet-class>servlet.DemoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>demoServlet</servlet-name>
        <url-pattern>/demo.do</url-pattern>
    </servlet-mapping>

结果:
在这里插入图片描述

四、获取请求数据

在 Servlet 获取请求数据的方式

req.getParameter(“key”)

根据 key 获取指定 value。

//获取请求数据
public class GetRequestDataServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        out.println("UserName:"+username+"<br/>");
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
    }
}

HTML界面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="getInfo.do" method="post">
        用户名:<input type="text" name="username"/><br/>
        <input type="submit" value="ok"/>
    </form>
</body>
</html>

web.xml界面:

    <servlet>
        <servlet-name>getRequestDataServlet</servlet-name>
        <servlet-class>servlet.GetRequestDataServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getRequestDataServlet</servlet-name>
        <url-pattern>/getInfo.do</url-pattern>
    </servlet-mapping>

五、获取复选框数据

获取复选框(checkbox 组件)中的值

req.getParameterValues(“checkboxkey”)

获取复选框(checkbox 组件)中的值,返回一个 String[]

public class GetRequestDataServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String[] userlikes = req.getParameterValues("userlike");
        List<String> strings = Arrays.asList(userlikes);
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        out.println("UserName:"+username+"<br/>");
        out.println("UserName:"+strings+"<br/>");
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
    }
}

HTML页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="getInfo.do" method="post">
        用户名:<input type="text" name="username"/><br/>
        爱好:<input type="checkbox" name="userlike" value="sport"/>体育
            <input type="checkbox" name="userlike" value="music"/>音乐
        <input type="submit" value="ok"/>
    </form>
</body>
</html>

六、获取所有提交数据的key

获取所有提交数据的 key

req.getParameterNames()

获取请求中所有数据的 key,该方法返回一个枚举

public class GetRequestDataServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String[] userlikes = req.getParameterValues("userlike");
        List<String> strings = Arrays.asList(userlikes);
        Enumeration<String> parameterNames = req.getParameterNames();
        List<String> keys = new ArrayList<>();
        while (parameterNames.hasMoreElements()){
            keys.add(parameterNames.nextElement());
        }
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        out.println("UserName:"+username+"<br/>");
        out.println("UserName:"+strings+"<br/>");
        out.println("Keys:"+keys+"<br/>");
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
    }
}

结果:
在这里插入图片描述

七、使用 Map 结构获取提交数据

req.getParameterMap()

获取请求中所有的数据并存放到一个 Map 结构中,该方法返回一个 Map,其中 key 为
String 类型 value

public class GetRequestDataServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String[] userlikes = req.getParameterValues("userlike");
        List<String> strings = Arrays.asList(userlikes);
        Enumeration<String> parameterNames = req.getParameterNames();
        List<String> keys = new ArrayList<>();
        while (parameterNames.hasMoreElements()){
            keys.add(parameterNames.nextElement());
        }
        Map<String,String[]> parameterMap = req.getParameterMap();
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        out.println("UserName:"+username+"<br/>");
        out.println("UserName:"+strings+"<br/>");
        out.println("Keys:"+keys+"<br/>");
        //获取迭代器
        Iterator<Map.Entry<String,String[]>> iterator = parameterMap.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String,String[]> entry = iterator.next();
            out.println("Keys:" + entry.getKey() +" Value:"+ Arrays.asList(entry.getValue()) +"<br/>");
        }
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
    }
}

八、设置请求编码

req.setCharacterEncoding(“utf-8”)

请求的数据包基于字节在网络上传输,Tomcat 接收到请求的数据包后会将数据包中的
字节转换为字符。在 Tomcat 中使用的是 ISO-8859-1 的单字节编码完成字节与字符的转换,
所以数据中含有中文就会出现乱码,可以通过 req.setCharacterEncoding(“utf-8”)方法来对提
交的数据根据指定的编码方式重新做编码处理。

public class GetRequestDataServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            String username = req.getParameter("username");
            String[] userlikes = req.getParameterValues("userlike");
            List<String> strings = Arrays.asList(userlikes);
            Enumeration<String> parameterNames = req.getParameterNames();
            List<String> keys = new ArrayList<>();
        while (parameterNames.hasMoreElements()){
            keys.add(parameterNames.nextElement());
        }
        Map<String,String[]> parameterMap = req.getParameterMap();
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        out.println("UserName:"+username+"<br/>");
        out.println("UserName:"+strings+"<br/>");
        out.println("Keys:"+keys+"<br/>");
        //获取迭代器
        Iterator<Map.Entry<String,String[]>> iterator = parameterMap.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String,String[]> entry = iterator.next();
            out.println("Keys:" + entry.getKey() +" Value:"+ Arrays.asList(entry.getValue()) +"<br/>");
        }
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
    }
}

九、资源访问方式

1.绝对路径

绝对路径访问资源表示直接以”/”作为项目的 Content Path。该方式适用于以”/”作为项目的 Content Path

<form action="/getInfo.do" method="post">

2.相对路径

相对路径访问资源表示会相对于项目的 Content Path 作为相对路径。该方式适用于为项目指定的具体的 Content Path

<form action="getInfo.do" method="post">

十、获取请求头信息

req.getHeader(“headerKey”)

根据请求头中的 key 获取对应value

String headerValue = req.getHeader(“headerKey”);

.

req.getHeaderNames()

获取请求头中所有的 key,该方法返回枚举类

Enumeration<>

//获取请求头信息
public class GetRequestHeaderServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String header = req.getHeader("Accept-Language");
        Enumeration<String> headerNames = req.getHeaderNames();
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        while (headerNames.hasMoreElements()){
            String key = headerNames.nextElement();
            String value = req.getHeader(key);
            out.println("key:"+key+" Value:"+value+"<br/>");
        }
        out.println("</BODY>");
        out.println("</HTML>");
    }
}

web.xml:

<servlet>
        <servlet-name>getRequestHeaderServlet</servlet-name>
        <servlet-class>servlet.GetRequestHeaderServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getRequestHeaderServlet</servlet-name>
        <url-pattern>/getHeader.do</url-pattern>
    </servlet-mapping>

结果:在这里插入图片描述

十一、获取请求头案例

需求:编写一个 Servlet,如果浏览器的语言是 zh-CN,显示“你好,聪明的中国人!”,如果浏览器的语言设置为 en-US,那么则显示“Hello,American”

//获取请求头案例
public class LanguageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String header = req.getHeader("accept-language");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE><HEAD>");
        out.println("<BODY>");
        if (header.indexOf("zh-CN") != -1){
            out.println("你好,聪明的中国人!");
        }else if(header.indexOf("en-US") != -1){
            out.println("hello,American");
        }else{
            out.println("对不起,不支持该语言!");
        }
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }
}

web.xml:

    <servlet>
        <servlet-name>languageServlet</servlet-name>
        <servlet-class>servlet.LanguageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>languageServlet</servlet-name>
        <url-pattern>/language.do</url-pattern>
    </servlet-mapping>
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 20:59:25  更:2022-02-14 21:01:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:53:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码