package cn.Reapsun.servlet;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class AServlet extends HttpServlet { /**
* request -->封装了客户端所有请求数据
* 请求行
* 请求头
* 空行
* 请求体(GET没体)
*
* 回忆http协议
*
* 获取常用信息
* >获取客户端IP request.getRemoteAdder()
* >请求方法 request.getMethod() ,可能用POST 也可能GET
*
* 获取HTTP请求头
* >*** String getHeader(String name) 适用单值头
* >int getIntHeader(String name) 使用单值int类型的请求头
* >long getDateHeader(String name)适用单值毫秒类型的请求头
* >Enumeration<String> getHeaders(String),适用于多值请求头
*
* 案例
* >通过User-Agent识别用户浏览器类型
* >防盗链:如果请求不是通过本网站连接发布的,发送错误代码404 Referer这个请求头,表示请求的来源
*
* 获取请求URL
* >String getScheme() 获取协议
* >String getServletName() 获取服务器名称 http
* >String getServletPort() 获取服务器端口 8080
* >String getContextPath() 获取项目名称 /day10_2
* >String getServletPath() 获取Sercvlet()路径 /AServlet
* >String getQueryString() 获取参数部分,即问号即问好后面部分 username=xxx&password=yyy
* >String getRequestURI() 获取请求URI 等于项目名 + Servlet路径 /day_2/AServlet
* >String getRequestURL() 获取请求URL 等于不包含参数的整个请求路径 http://localhost:8080/day10_2/AServlet
*
* 获取请求
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//演示获取客户端的IP地址、获取请求方式、获取User-Agent ,得到客户端信息(操作系统浏览器)
String adder = request.getRemoteAddr();//获取客户端IP
System.out.println("IP :" + adder);
System.out.println("请求方式 :" + request.getMethod());//获取请求方式
String userAgent = request.getHeader("User-Agent");//获取名为User-Agent的请求头
System.out.println(userAgent);
//IP :0:0:0:0:0:0:0:1
/*请求方式 :GET
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36*/ //是否包含Chrome 如何过包含 说明用的是google浏览器
if(userAgent.toLowerCase().contains("chorme")){
System.out.println("你好:" + adder + "你用的是谷歌");
}else if (userAgent.toLowerCase().contains("firefox")) {
System.out.println("你好:" + adder + "你用的是火狐");
}else if (userAgent.toLowerCase().contains("msie")) {
System.out.println("你好:" + adder + "你用的是IE");
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>cn.Reapsun.servlet.AServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>CServle</servlet-name>
<servlet-class>cn.Reapsun.servlet.CServle</servlet-class>
</servlet>
<servlet>
<servlet-name>BServlet</servlet-name>
<servlet-class>cn.Reapsun.servlet.BServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CServle</servlet-name>
<url-pattern>/CServle</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>BServlet</servlet-name>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
package cn.Reapsun.servlet;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class BServlet extends HttpServlet { /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 使用Referer请求头反盗链
*/
String referer = request.getHeader("Referer");
System.out.println("referer");
if (referer == null || !referer.contains("localhost")) {
response.sendRedirect("http://www.baidu.com"); } else{
System.out.println("Hello!");
}
} }
<!DOCTYPE html>
<html>
<head>
<title>a.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<a href="/day10_2/BServlet">xxx</a>
</body>
</html>
演示request  获取请求参数 
package cn.Reapsun.Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /*
* 演示request 获取请求参数
* * 获取请求URL
* >String getScheme() 获取协议
* >String getServletName() 获取服务器名称 http
* >String getServletPort() 获取服务器端口 8080
* >String getContextPath() 获取项目名称 /day10_2
* >String getServletPath() 获取Sercvlet()路径 /AServlet
* >String getQueryString() 获取参数部分,即问号即问好后面部分 username=xxx&password=yyy
* >String getRequestURI() 获取请求URI 等于项目名 + Servlet路径 /day_2/AServlet
* >String getRequestURL() 获取请求URL 等于不包含参数的整个请求路径 http://localhost:8080/day10_2/AServlet
*
* 获取请求参数 请求参数是由客户端发送给服务器的!有可能在请求体中(POST) 也可能在URL之后(GET)
* 请求参数:有一个参数一个值,还有一个参数多个值!
* >*******************String getParameter(String name) : 获取指定请求参数值 适用单值请求参数
* >String[] getParameterValues(String name) 获取指定请求参数值 适用多值请求参数
* >Enumeration<String ,String[]> getParameterMap() :获取所有请求参数,其中key为参数名 value为参数值
* 案例 超链接参数
* 案例 表单数据
*/
public class AServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("GET: " + request.getParameter("xxx"));
System.out.println("GET: " + request.getParameter("yyy"));
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String[] hobby = request.getParameterValues("hobby"); System.out.println(username + password + Arrays.toString(hobby)); /*
* 获取所有请求参数名称
*/
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()){
System.out.println(names.nextElement());
} /*
* 获取所有请求参数,封装到map中
*/
Map<String,String[]> map = request.getParameterMap();
//System.out.println(map);
for (String name : map.keySet()) {
String[] values = map.get(name);
System.out.println("name: " + "=" + Arrays.toString(values));
}
} }
package cn.Reapsun.Servlet;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class BServlet extends HttpServlet { /**
* 简单说下 请求转发 和请求包含
* RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");
* 请求转发 rd.forward(request,response); 使用request获取ResquestDispatcher对象 方法参数 是被转发或包含的Servlet的servlet路径
* 请求包含 rd.include(request,response);
*
* 有时需要请求多个Servlet协作才能完成所以需要在一个Servlet跳转到另外一个Servlet!
* >一个请求跨越多个Servlet 需要使用转发和包含
* >请求转发 由下一个Servlet完成响应体 当前Servlet可以设置响应头(留头不留体)
* >请求包含 由两个Servlet完成响应体(都留)
* >无论是请求头转发还是请求包含 都在一个请求范围内 使用一个Request 和response
*
* request域
* void setAttribute(String name,Object value)
* Object getAttribute(String name)
* >同一请求 范围内使用 request.setAttribute() resquest.getAttribute() 来宣传! 前一个Servlet 调用setAttribute()保存值 后一个Servlet调用getAttribute() 保存值,后一个Servlet调用getAttribute()获取值
*
* >请求转发和重定向区别
* >请求转发是一个请求一次响应 而重定向是两次请求两次响应
* >请求转发地址栏不变 而重定向会显示后一个请求地址
* >请求抓转发只能转发到本项目其他Servlet 而重定向不只能重定向到本项目的其他Servlet 还能定向到其他项目
* >请求转发是服务器端行为 只需给出转发的Servlet路径 而重定向需要给出requestURL 即包含其他项目名
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } }
第一,servlet可以让你比较彻底的了解一下java web应用的流程,这对你以后学习一些web方面开源的框架有好处,
第二,你如果先不学习servlet的话很多异常你是无从下手调试的,因为初学java web应用有很多异常是由于粗心导致的,
第三,JSP它本质上来说是servlet和html的混合体,JSP在执行的时候会被先解释为servlet源程序的,换句话说他必须以servlet作为基础,如果不先学习servlet的话,对JSP你是很难透彻的理解他的,我认为要学好JAVA WEB应用理论是很重要的。
 
JSP 在大型 外网 Java Web 项目中被淘汰掉,可没说 JSP 可以完全不学,对于一些人来说,Servlet 等相关的 Java Web 基础还是要掌握牢的,不然Spring MVC 这种框架是基于什么你都不知道

学javaweb 先学Servlet 应用理论很重要的更多相关文章

  1. JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

  2. JavaWeb开发之Servlet

    1. Servlet有关概念和前置知识 1.1 什么是动态网页 如果浏览器在不同时刻或不同条件下访问web服务器上的某个页面,浏览器所获得的页面内容可以发生变化,那么这个页面就称之为动态页面. 动态网 ...

  3. (转)JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

  4. .Net应该学什么怎么学(三)

    更新时间:2012年06月05日18时26分 来源:传智播客.Net 接上篇[我来解惑].Net应该学什么怎么学(二)七.HTML.JavaScript.Dom        HTML是对网页长什么样 ...

  5. .Net应该学什么怎么学(二)

    更新时间:2012年06月05日18时23分 来源:传智播客.Net 接上篇<[我来解惑].Net应该学什么怎么学(一)>. 二.C#面向对象基础 初学者学面向对象的时候没必要(也做不到) ...

  6. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  7. JavaWeb学习——了解Servlet

    JavaWeb学习——了解Servlet 摘要:本文主要学习了什么是Servlet,以及如何使用Servlet进行开发. 基础知识 背景 随着互联网技术的发展,基于HTTP和HTML的web应用急速增 ...

  8. JavaWeb(二):Servlet

    一.本教程使用的Web容器——Tomcat Tomcat是提供一个支持Servlet和JSP运行的容器.Servlet和JSP能根据实时需要,产生动态网页内容.而对于Web服务器来说, Apache仅 ...

  9. Intellij idea创建javaWeb:实现JSP/Servlet(转)

    转自:https://www.jianshu.com/p/9684e90cf7b5 Intellij idea创建javaWeb:实现JSP/Servlet by_love唯念 关注 2016.12. ...

随机推荐

  1. 二叉树的建立与遍历(c语言)入门

    树其实在本质上就是一对多,链表就是一对一. 二叉树的建立: 这里的代码采用的是最粗暴的创建方法,无实际用处.但初次学习二叉树可以通过这个创建方法更好的理解二叉树. 二叉树的遍历: 遍历在大体上分为递归 ...

  2. 【linux】驱动-2-内核模块

    目录 前言 2. 内核模块 2.1 内核模块概念 2.1.1 内核 2.1.2 内核模块机制的引入 2.2 内核模块 2.2.1 内核模块参考例程 2.2.2 内核模块命令 2.2.3 系统自动加载模 ...

  3. [换根DP]luogu P3647 [APIO2014]连珠线

    题面 https://www.luogu.com.cn/problem/P3647 不重复地取树中相邻的两条边,每次得分为两条边权和,问最大得分 分析 容易想到状态 f[i][0/1] 分别表示 i ...

  4. 用 Go + WebSocket 快速实现一个 chat 服务

    前言 在 go-zero 开源之后,非常多的用户询问是否可以支持以及什么时候支持 websocket,终于在 v1.1.6 里面我们从框架层面让 websocket 的支持落地了,下面我们就以 cha ...

  5. 力扣 - 92. 反转链表II

    目录 题目 思路1(迭代) 代码 复杂度分析 思路2(递归) 代码 复杂度分析 题目 92. 反转链表 II 思路1(迭代) 将反转链表分成3个部分:前一段未反转的部分.待反转链表部分.后一段未反转部 ...

  6. 力扣 - 剑指 Offer 37. 序列化二叉树

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...

  7. jenkins构建go及java项目

    jenkins构建go及java项目 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14554017.html 写在前面 jenkins作为java的好基友,经历 ...

  8. 【linux】驱动-8-一文解决设备树

    目录 前言 8. Linux设备树 8.1 设备树简介 8.2 设备树框架 8.2.1 设备树格式 8.2.1.1 DTS 文件布局 8.2.1.2 node 格式 8.2.1.3 propertie ...

  9. A. 【例题1】奶牛晒衣服

    A . [ 例 题 1 ] 奶 牛 晒 衣 服 A. [例题1]奶牛晒衣服 A.[例题1]奶牛晒衣服 关于很水的题解 既然是最少时间,那么就是由最湿的衣服来决定的.那么考虑烘干机对最湿的衣服进行操作 ...

  10. HTML5获取地理位置定位信息

    如何使用HTML5地理位置定位功能 定位功能(Geolocation)是HTML5的新特性,因此只有在支持HTML5的现代浏览器上运行,特别是手持设备如iphone,地理定位更加精确.首先我们要检测用 ...