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. python inspect库

    一.介绍 inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等. inspect模块主要提供了四种用处: 对是否是模块.框架.函数进行 ...

  2. 3.学习numyp的矩阵

    Numpy提供了ndarray来进行矩阵的操作,在Numpy中 矩阵继承于NumPy中的二维数组对象,但是矩阵区别于数组,不可共用数组的运算规律 一.创建矩阵 import numpy as np m ...

  3. 使用jhipster 加速java web开发

    jhipster,中文释义: Java 热爱者! JHipster is a development platform to quickly generate, develop, & depl ...

  4. 攻防世界 reverse 进阶 easyre-153

    easyre-153 查壳: upx壳 脱壳: 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 int ...

  5. java中ReentrantLock核心源码详解

    ReentrantLock简介 ReentrantLock是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与synchronized关键字相比,它更灵活. ...

  6. ubuntu修改默认启动内核

    一.序言 新换的笔记本由于太新的主板芯片,驱动还没有完善.每次升级系统内核都要小心谨慎.经常发生部分硬件驱动失败的事情.系统Ubuntu 20.04.2 LTS x86_64 ,我现在使用的两个版本的 ...

  7. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

  8. PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...

  9. [BFS]翻币问题

    翻币问题 Description 有N个硬币(6<=N<=20000)全部正面朝上排成一排,每次将其中5个硬币翻过来放在原位置,直到最后全部硬币翻成反面朝上为止.试编程找出步数最少的翻法, ...

  10. jd的艺术

    我看最近的狗东的ldz很火哈.所以我也来凑个热闹发个教程. 准备工作 1.一台openwrt系统设备 2.一个脑子 3.一双手 话不多说,开始吧! 步骤 一.链接N1(你的设备) 这里需要一款ssh工 ...