学javaweb 先学Servlet 应用理论很重要
2023-03-14 09:45:01 时间
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应用理论是很重要的。
第二,你如果先不学习servlet的话很多异常你是无从下手调试的,因为初学java web应用有很多异常是由于粗心导致的,
第三,JSP它本质上来说是servlet和html的混合体,JSP在执行的时候会被先解释为servlet源程序的,换句话说他必须以servlet作为基础,如果不先学习servlet的话,对JSP你是很难透彻的理解他的,我认为要学好JAVA WEB应用理论是很重要的。
JSP 在大型 外网 Java Web 项目中被淘汰掉,可没说 JSP 可以完全不学,对于一些人来说,Servlet 等相关的 Java Web 基础还是要掌握牢的,不然Spring MVC 这种框架是基于什么你都不知道
相关文章
- 后台开发:核心技术与应用实践1.1 第一个C++程序
- 后台开发:核心技术与应用实践1.2 函数
- 后台开发:核心技术与应用实践1.3 数组
- 后台开发:核心技术与应用实践1.4 指针
- 后台开发:核心技术与应用实践1.5 引用
- 后台开发:核心技术与应用实践1.6.1 结构体、共用体、枚举的概念
- 后台开发:核心技术与应用实践1.7 预处理
- 后台开发:核心技术与应用实践1.8 本章小结
- 后台开发:核心技术与应用实践2.1 类与对象
- 后台开发:核心技术与应用实践2.2 继承与派生
- 后台开发:核心技术与应用实践2.3 类的多态
- 后台开发:核心技术与应用实践2.4 本章小结
- 后台开发:核心技术与应用实践3.1 STL是什么
- 后台开发:核心技术与应用实践3.2 string
- 后台开发:核心技术与应用实践3.3.1 vector是什么
- 后台开发:核心技术与应用实践3.3.2 vector的查增删
- 后台开发:核心技术与应用实践3.3.3 vector的内存管理与效率
- 后台开发:核心技术与应用实践3.3.4 Vector类的简单实现
- 后台开发:核心技术与应用实践3.4.1 map是什么
- 后台开发:核心技术与应用实践3.4.2 map的查增删