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. 目标检测入门论文YOLOV1精读以及pytorch源码复现(yolov1)

    结果展示 其中绿线是我绘制的图像划分网格. 这里的loss是我训练的 0.77 ,由于损失函数是我自己写的,所以可能跟大家的不太一样,这个不重要,重要的是学习思路. 重点提示 yolov1是一个目标检 ...

  2. ES6学习笔记(1)- 块级作用域

    1. var声明变量和变量提升(Hoisting)机制的问题 在JS中通过var关键字声明的变量,无论在函数作用域中亦或是全局作用域中,都会被当成当前作用域顶部的变量,和就是所谓的提升机制(Hoist ...

  3. ImportError: No module named site

    cmd中执行python提示:ImportError: No module named site 运行python.exe Fatal Python error: initfsencoding: un ...

  4. 8、Spring教程之静态代理/动态代理

    为什么要学习代理模式,因为AOP的底层机制就是动态代理! 代理模式: 静态代理 动态代理 学习aop之前 , 我们要先了解一下代理模式! 静态代理 静态代理角色分析 抽象角色 : 一般使用接口或者抽象 ...

  5. java位运算求一个整数的绝对值

    1 import java.util.Scanner; 2 3 public class Question1 { 4 public static void main(String[] args) { ...

  6. Androi Studio 之 LinearLayout

    LinearLayout •常用属性 •注意事项 当  android:orientation="vertical"  时, 只有水平方向的设置才起作用,垂直方向的设置不起作用 a ...

  7. FFMPEG编译问题记录

    一.ffmpeg下载与配置 下载地址 FFmpeg/FFmpeg (https://github.com/FFmpeg/FFmpeg) ~$ git clone https://github.com/ ...

  8. Logstash生产环境实践手册(含grok规则示例和ELKF应用场景)

    ELKF应用场景: 1) datasource->logstash->elasticsearch->kibana 2) datasource->filebeat->log ...

  9. 打造云原生大型分布式监控系统系列文章-腾讯工程师roc

    附上本系列文章链接 打造云原生大型分布式监控系统(一): 大规模场景下 Prometheus 的优化手段 打造云原生大型分布式监控系统(二): Thanos 架构详解 打造云原生大型分布式监控系统(二 ...

  10. 【设计模式】- 生成器模式(Builder)

    生成器模式 建造者模式.Builder 生成器模式 也叫建造者模式,可以理解成可以分步骤创建一个复杂的对象.在该模式中允许你使用相同的创建代码生成不同类型和形式的对象. 生成器的结构模式 生成器(Bu ...