上午学了web项目常用的两种请求方式,做一个小结。
并通过一个Servlet例子来说明两者的区别。
一、Get请求方式
1、当需要向服务器请求制定的资源时使用的方法
2、它不应该用于一些会造成副作用的操作中(在网络应用中用它来提交请求是一种常见的错误用法)3、什么情况浏览器发送Get请求
- — 在地址栏输入一个地址
- — 点击链接
- — 表单默认提交
4、Get请求方式的特点
- 会将请求数据添加到请求资源路径的后面,所以只能提交少量的数据给Web服务器
- 请求参数显示在浏览器地址栏上,不安全。
(这两点不明不要紧,在后面的项目中还会提到。)
二、Post请求方式
1、向服务器提交需要处理的数据,这些数据写在请求的内容里,可以导致新资源的产生和已有资源的更新。
2、什么情况浏览器发送Post请求
— 设置表单method属性为Post
3、Post 请求方式的特点
- 请求参数添加到实体内容中,可提交大量数据
- 不会将请求参数显示在浏览器地址栏,相对安全。
三、案例实战
1、处理POST请求中的中文参数值
步骤
step1: 新建hello1.jsp页面并增加meta标记
新建hello1.jsp页面如下所示:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Servlet program</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--增加的meta标记,使页面支持中文 -->
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="hello1" method="post"> <!-- 此处用get不能输出中文名 -->
姓名:<input name="name"><br>
联系方式:<br>
QQ<input type="checkbox" name="contact" value="qq"/>
电话<input type="checkbox" name="contact" value="电话"/>
微信<input type="checkbox" name="contact" value="WeChat"/>
<br>
<input type="submit" value="OK">
</form>
</body>
</html>
Step2 : 新建Hello1Servlet.java文件
代码如下:
package web;
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 Hello1Servlet extends HttpServlet{
protected void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
//保证正确读取Post提交来的中文
request.setCharacterEncoding("utf-8");
//保证正确输出中文
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//获取提交的name的值
String name = request.getParameter("name");
out.println("<h1>Hello,"+name+"</h1>");
//获取提交的contact的值
String[] contacts=request.getParameterValues("contact");
if(contacts!=null){
out.print("<h1>联系方式:</h1>");
for(String info:contacts){
out.print("<h1>"+info+"</h1>");
}
}
out.close();
}
}
Step3: 修改web.xml文件
如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>hello1Servlet</servlet-name>
<servlet-class>web.Hello1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello1Servlet</servlet-name>
<url-pattern>/hello1</url-pattern> <!-- 和JSP的名字相同 -->
</servlet-mapping>
</web-app>
Step4:部署并访问工程
2、处理Get请求中的中文参数值
步骤
step1: 新建hello2.jsp页面并增加meta标记
新建hello2.jsp页面如下所示:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Servlet program</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<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>
<form action="hello2" method="get">
姓名:<input name="name"><br>
联系方式:<br>
QQ<input type="checkbox" name="contact" value="qq"/>
电话<input type="checkbox" name="contact" value="Tel"/>
微信<input type="checkbox" name="contact" value="WeChat"/>
<br>
<input type="submit" value="OK">
</form>
</body>
</html>
Step2 : 新建Hello2Servlet.java文件
代码如下:
package web;
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 Hello2Servlet extends HttpServlet{
protected void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
//保证正确输出中文
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//获取提交的name的值
String name = request.getParameter("name");
//保证正确读取get提交来的中文
name=new String(name.getBytes("iso-8859-1"),"utf-8");
out.println("<h1>Hello,"+name+"</h1>");
//获取提交的contact的值
String[] contacts=request.getParameterValues("contact");
if(contacts!=null){
out.print("<h1>联系方式:</h1>");
for(String info:contacts){
out.print("<h1>"+info+"</h1>");
}
}
out.close();
}
}
Step3: 修改web.xml文件
如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>hello2Servlet</servlet-name>
<servlet-class>web.Hello2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello2Servlet</servlet-name>
<url-pattern>/hello2</url-pattern> <!-- 和JSP的名字相同 -->
</servlet-mapping>
</web-app>
Step4:部署并访问工程
注意看红色箭头标记的地址可看出区别。