目前直接通过form提交数据方式越来越少了。ajax+json是主流方式。
随着微服务的盛行,前端也在涌现了各种框架,目前vue+element是比较常见的。
但是百变不离其宗,封装来封装去,浏览器的核心机制没变,网路传输协议规则还是那样。
GET实现搜索引擎
form提交数据,method属性指向get,action指向请求地址。
get请求有路径参数,但是常用的还是查询参数 Query String,也就是?后面&连接的部分。
例如:
https://www.baidu.com/s?ie=utf-8&mod=1&isbd=1&isid=ddb830d2000433ee&ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Tomcat%20JNDI%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E6%BA%90&oq=Tomcat%2520JNDI%25E9%2585%258D%25E7%25BD%25AE%25E6%2595%25B0%25E6%258D%25AE%25E6%25BA%2590&rsv_pq=ddb830d2000433ee&rsv_t=a788apPNIOShGHlGb64YBGjyK05YhxO%2Bh9M13wqos5QBlWACpzNDCmFPs54&rqlang=cn&rsv_enter=0&rsv_dl=tb&inputT=2534&rsv_sug3=46&rsv_sug4=3556&bs=Tomcat%20JNDI%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E6%BA%90&rsv_sid=1451_21114_30492&_ss=1&clist=&hsug=&f4s=1&csor=16&_cr1=38141
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
<style>
div, body, span {
font-size: 16px;
}
</style>
</head>
<body>
<div align="center">
<div><img src="/FirstWeb/HelloServlet" style="margin: 25px;"/></div>
<div>
<form action="" method="get">
<div>
<input type="radio" name="type" value="web" checked/>网页
<input type="radio" name="type" value="news"/>新闻
<input type="radio" name="type" value="image"/>图片
<input type="radio" name="type" value="video"/>视频
</div>
<div style="margin-top: 20px;">
<input type="text" name="word" value="" style="width:300px;"/>
<input type="submit" value="用雅虎搜索" style="width: 100px;"/>
</div>
</form>
</div>
<div style="margin-top: 50px;"> © JDIT 2020-2200</div>
</div>
</body>
</html>
HelloServlet 可以这样接收参数
String word = request.getParameter("word");
String type = request.getParameter("type");
GET不能超过255字符,内容显示在地址栏也不安全,涉及到账号密码类敏感信息也不能使用GET方式。
POST提交个人信息
之前有个实例,init-param参数的时候
请求连接:http://localhost:10024/FirstWeb/notice.html
请求方式:post
form参数传递:
核心秘密其实就是:Content-Type: application/x-www-form-urlencoded
只不过post的参数不显示在地址栏中。
当然我们现在常用的json传递参数了。
获取参数的方式:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("username");
String password = request.getParameter("password");
Enumeration<String> params = this.getInitParameterNames();
while(params.hasMoreElements()){
String userNameParam = params.nextElement();
String passNameParam = getInitParameter(userNameParam);
if(userNameParam.equalsIgnoreCase(userName)&&passNameParam.equalsIgnoreCase(password)){
request.getRequestDispatcher("/WEB-INF/notice.html").forward(request,response);
return;
}
}
}
这里包含了从请求中获取参数和web.xml配置中获取参数。