Servlethtml
server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就能够被浏览器(tomcat)识别)java
Servlet方法:web
init方法:只执行一次,Servlet在第一次被访问时或者在服务器启动时被建立,就会执行init方法,小程序
service方法:能够执行屡次,每一次访问服务器就执行一次数组
destroy方法:在服务器被关闭前,就执行一次浏览器
ServletConfig getSerletConfig方法:获取ServletConfig对象tomcat
String getServletInfo:获取Servlet的一些信息服务器
在Servlet3.0以前须要这样web.xml来配置项目的路径cookie
在Servlet3.0以后能够经过注解配置来选择项目路径了app
servlet是一个接口,他有两个抽象子类GenericServlet和HttpServlet.
package com.Data.HttpServlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; //Http一共有其中请求方式 //可使用HttpServlet的方法来判断请求方式 //继承HttpServlet @WebServlet("/demo1") public class HttpServletDemo extends HttpServlet{ //重写父类方法 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //若是是Get请求方式就执行此语句 System.out.println("doGet.....");//浏览器直接访问服务器的地址使用的是Get方式 } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //若是是Post请求方式就执行此语句 System.out.println("doPost");//输出结果doPost } }
使用post方式访问服务器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--指定地址demo3--> <!--指定访问方式post--> <form action="/demo1" method="post"> <input name="username" placeholder="请输入用户名"> <input type="submit" value="登陆"> </form> </body> </html>
概念:Hyper Text Transfer Protocol 超文本传输协议,定义了客户端和服务器端通讯时,发送数据的格式
1.请求行 :
格式:请求方式(GET) 请求url(/Hello.html) 请求协议/版本(HTTP1.1)
当请求协议为GET时,请求的参数在请求行中,为POST时,请求的参数在请求体
2.请求头:就是我浏览器告诉服务器我有哪些信息
字符串格式:请求头名称:请求头值
常见的请求头:
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Referer: http://localhost:8080/Hello.html(我火狐浏览器不知道怎么会没有显示这个头.....),这个头能够告诉服务器我从哪里来
3.请求空行:就是一个空行,分隔请求头和请求体
请求体:封装POST请求消息的请求体参数的,username: zhangsan
1.request和response对象是由服务器建立的,
2.request对象是来获取请求消息,response对象是来设置响应消息
ServletRequest(父接口)-->HttpServletRequest(子接口)--->RequestFacade(实现类)
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; //演示Request对象获取请求行数据 @WebServlet( "/demo") public class Servlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取请求行的请求方式 //request对象有tomcat服务器建立 String method = request.getMethod(); System.out.println(method);//GET //获取请求行的虚拟目录 String method1 = request.getContextPath(); System.out.println(method1);// /day13 //获取请求行的URI String method2 = request.getRequestURI(); System.out.println(method2);// /day13/demo //获取客户机的IP地址 String method3 = request.getRemoteAddr(); System.out.println(method3);// 0:0:0:0:0:0:0:1 //获取请求行的请求参数 String method4 = request.getQueryString(); System.out.println(method4);// name=zhangsan } }
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration; @WebServlet("/RDemo1") public class RuquestDemo1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取全部请求头的名称 Enumeration<String> headerNames = request.getHeaderNames(); //遍历,至关于迭代器 //有下一个元素就为真 while(headerNames.hasMoreElements()){ //获取元素 String name = headerNames.nextElement(); //经过key找到value String value = request.getHeader(name); System.out.println(name+"------"+value); // 全部头,获取出来了 // host------localhost:8080 // connection------keep-alive // upgrade-insecure-requests------1 // user-agent------Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 // accept------text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 //accept-encoding------gzip, deflate, br //accept-language------zh-CN,zh-HK;q=0.9,zh;q=0.8,en;q=0.7 //cookie------JSESSIONID=0329F34A83457E749B1818AFBE4C0A57; Idea-a0bb733=23efa255-9ce7-42d9-8d0b-9853348226b8; JSESSIONID=8FE68A2847DC38B4290ADBCE1BFD164F } } }
请求体:只有在POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
首先建立一个html文件,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--绑定服务器的地址--> <form action="/day13/RDemo1" method="post"> <input type="text" name="username"><br> <input type="text" name="password"><br> <!--向服务器提交数据--> <input type="submit" value="注册"> </form> </body> </html>
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; @WebServlet("/RDemo1") public class RuquestDemo1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取请求体的请求参数 //获取字符流 BufferedReader reader = request.getReader(); String line=null; while((line=reader.readLine())!=null){ //读取一行写一行 System.out.println(line);// username=zhangsan&password=123 } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
其余功能:
获取请求参数通用方式,不管是get请求仍是post请求均可以使用下列方法来获取参数值
1.String getParameter(String name):根据参数名称获取参数值
2.String[] getParameterValues(String name):根据参数名称获取参数值的数组
3.Enumeration
getParameterNames();获取全部请求的参数名称 4.Map<String,String[]> getParameterMap():获取全部参数的map集合(与3不一样的地方是,3所得到的键值对,是一个键只获取一个值,4方法的话一个键能够对应对个值)
Map方法的 演示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--绑定服务器的地址--> <!--//不管是post请求仍是get请求都同样--> <form action="/day13/Demo3" method="GET"> <input type="text" name="username"><br> <input type="text" name="password"><br> <input type="checkbox" name="hobby" value="打游戏">打游戏 <input type="checkbox" name="hobby" value="看电影">看电影 <!--向服务器提交数据--> <input type="submit" value="注册"> </form> </body> </html>
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Map; import java.util.Set; @WebServlet("/Demo3") //不管是GET请求仍是POST请求均可以使用下面的方法获取请求的参数 public class RequestDemo3 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Map<String,String[]> map = request.getParameterMap(); //把全部的键存到一个集合中 Set<String> strings = map.keySet(); for(String key : strings){ //获取出每个键 System.out.println(key); //获取出值的集合 String[] values = map.get(key); //获取出每个值 for(String key2 : values){ System.out.println(key2); } System.out.println("---------------"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }