Servelt
一、servlet规范
(1)JAVASE规范和JAVAEE规范
1.JAVASE规范 : 指定Java基本开发的规则
2.JAVAEE规范 :指定Java与不同服务器之间进行联合开发时遵守规则。13种。
之前学习的JDBC规范就是13种规范的一种
(2)Servlet规范
1.指定了Java与Http服务器联合开发时遵守的规则
2.细节:
1)通知开发人员,如何开发一个作为动态资源文件的Java
2)通知Http服务器如何管理调用动态资源文件
(3)Servlet接口实现类的开发步骤
只有作为Servlet接口的实现类才有资格作为动态资源文件
Servlet接口由Http服务器厂商负责提供
Tomcat/lib/servlet-api.jar.Servlet接口来自于这个包
(4)具体开发步骤
二、Servlet的Httpservletrequest接口
import javax.servlet.http.*;
import java.io.IOException;
/*
* 问题:
* 以GET方式发送中文参数内容“老杨是正经人”时,得到正常结果
* 以POST方式发送中文参数内容"老崔是个男人",得到【乱码】“è?????????????·???”
*
* 原因:
*
* 浏览器以GET方式发送请求,请求参数保存在【请求头】,在Http请求协议包到达Http服务器之后,第一件事就是进行解码
* 请求头二进制内容由Tomcat负责解码,Tomcat9.0默认使用【utf-8】字符集,可以解释一切国家文字
*
* 浏览器以POST方式发送请求,请求参数保存在【请求体】,在Http请求协议包到达Http服务器之后,第一件事就是进行解码
* 请求体二进制内容由当前请求对象(request)负责解码。request默认使用[ISO-8859-1]字符集,一个东欧语系字符集
* 此时如果请求体参数内容是中文,将无法解码只能得到乱码
*
* 解决方案:
*
* 在Post请求方式下,在读取请求体内容之前,应该通知请求对象使用utf-8字符集对请求体内容进行一次重新解码
*
*
*/
public class ThreeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通过请求对象,从请求头得到参数信息
String userName = request.getParameter("userName");
System.out.println("从请求头得到参数值:"+userName);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通知请求对象,使用utf-8字符集对请求体二进制内容进行一次重写解码
request.setCharacterEncoding("utf-8");
String value = request.getParameter("userName");
System.out.println("从请求体得到参数值:"+value);
}
}
各种操作步骤
3.快速创建一个servlet的步骤
- 创建一个Java项目
- 在项目右键add Framewords Support
- 勾上Web Application:使其成为一个网站项目
- 在上方导航栏找到Run开关,配置Tomcat服务器开关,并将开关关联所运用的项目。
通过Application context给整个web项目起别名,就可以通过别名访问中文的web项目的名字,通过Tomcat开关控制它
- 添加项目源路径,以便能快速new出Servlet
- 加入Tomcat包
- new一个Servlet,如果不经过以上步骤则可能不会出现这个快捷选项。
- 记得将该create Java EE 选项框去掉。
- 编辑xml文件所创建的servlet文件添加别名,以便在浏览器中访问
至此,快速创建Servlet文件已完成,上面个个步骤不可少