学javaweb 先学Servlet 应用理论很重要
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应用有很多异常是由于粗心导致的,
第三,JSP它本质上来说是servlet和html的混合体,JSP在执行的时候会被先解释为servlet源程序的,换句话说他必须以servlet作为基础,如果不先学习servlet的话,对JSP你是很难透彻的理解他的,我认为要学好JAVA WEB应用理论是很重要的。
学javaweb 先学Servlet 应用理论很重要的更多相关文章
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- JavaWeb开发之Servlet
1. Servlet有关概念和前置知识 1.1 什么是动态网页 如果浏览器在不同时刻或不同条件下访问web服务器上的某个页面,浏览器所获得的页面内容可以发生变化,那么这个页面就称之为动态页面. 动态网 ...
- (转)JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- .Net应该学什么怎么学(三)
更新时间:2012年06月05日18时26分 来源:传智播客.Net 接上篇[我来解惑].Net应该学什么怎么学(二)七.HTML.JavaScript.Dom HTML是对网页长什么样 ...
- .Net应该学什么怎么学(二)
更新时间:2012年06月05日18时23分 来源:传智播客.Net 接上篇<[我来解惑].Net应该学什么怎么学(一)>. 二.C#面向对象基础 初学者学面向对象的时候没必要(也做不到) ...
- JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference
- JavaWeb学习——了解Servlet
JavaWeb学习——了解Servlet 摘要:本文主要学习了什么是Servlet,以及如何使用Servlet进行开发. 基础知识 背景 随着互联网技术的发展,基于HTTP和HTML的web应用急速增 ...
- JavaWeb(二):Servlet
一.本教程使用的Web容器——Tomcat Tomcat是提供一个支持Servlet和JSP运行的容器.Servlet和JSP能根据实时需要,产生动态网页内容.而对于Web服务器来说, Apache仅 ...
- Intellij idea创建javaWeb:实现JSP/Servlet(转)
转自:https://www.jianshu.com/p/9684e90cf7b5 Intellij idea创建javaWeb:实现JSP/Servlet by_love唯念 关注 2016.12. ...
随机推荐
- 任务4 PHP扩展模块安装
/usr/local/php/bin/php -m //如何查看PHP加载了哪些模块 #cd /usr/local/src #wget http://pecl.php.net/get/redis-2 ...
- Git常用命名
文字整理: git config - - 可以配置git的参数,可以使用 git config --list查看已经配置的git参数. 其中有三个级别的保存位置, –system(本系统) –glob ...
- 简单ping确定网络故障
1.ping localhost (127.0.0.1) 目的:确定TCP/IP有无问题 2.ping本机地址 用来检测网卡驱动有无问题 如何获取本机地址? win+r cmd 输入ipconfig/ ...
- python 查看模块中的方法
way 1.help() way 2.dir() # dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: way 3. 使用inspect模块, inspect.getmembe ...
- 《C++反汇编与逆向分析技术揭秘》--认识启动函数,找到用户入口
<C++反汇编与逆向分析>和<程序员的自我修养>都是以VC6的代码作为例子讲解的.这里是在vs2017下,CRT代码有些区别,但整体流程上都是初始化环境,设置参数,最后转到用户 ...
- c++ vector容器浅析
注:本文章参考 https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html 前言: 最近遇到一个广搜的题,不管怎么试都会暴 然后 ...
- PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642
PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642 题目描述: Calculate a+b and output the sum i ...
- Redis-AOF日志与RDB快照
AOF日志与RDB是Reids中两大持久化机制,当服务器或者Reids宕机的时候可以通过这两大机制恢复Redis的数据. 先说说AOF日志吧,在执行一条操作请求时,Redis先将命令在内存中执行,之后 ...
- 2019年度CMMI V2.0性能报告
2020年底,CMMI研究院发布<2019 CMMI V2.0 Performance Report Summary>,渠成团队进行了全文翻译并简单总结如下.(文末提供中英双版PDF下载) ...
- Java实现基于朴素贝叶斯的情感词分析
朴素贝叶斯(Naive Bayesian)是一种基于贝叶斯定理和特征条件独立假设的分类方法,它是基于概率论的一种有监督学习方法,被广泛应用于自然语言处理,并在机器学习领域中占据了非常重要的地位.在之前 ...