javaweb
servlet
1. 什么是servlet?
(1). servlet是运行在服务器上的Java小程序,定义一个类实现Servlet接口,实现Servlet里面的方法,获取继承HttpServlet 重现doGet、doPost方法,这样一个servlet就创建完成 。
(2).servlet的作用是接收浏览器的请求以及接收浏览器数据,向浏览器返回服务器的处理结果。
(3).servlet是JavaWeb的三大组件之一(三大组件:servlet,过滤器:Filter,监听器:Listener)。
2.servlet的作用
(1).用来处理客户端(浏览器)发送过来的请求并对请求响应。
(2).servlet的任务:处理客户端(浏览器)发送过来的请求及参数;调用service业务处理层;向浏览器响应数据。
(3)Servlet要求规范
①Servlet程序需要编写实现类,并在web.xml进行配置访问路径
②实现类
1)通常继承HttpServlet并重写doGet(),doPost()
2)doGet() : 用于处理get请求
3)doPost() : 用于处理post请求
③配置信息
1)在web.xml进行配置访问路径,需要注意两边name保持一致
3.servlet执行流程
1.http://localhost:8080/day12/demo
(1)在浏览器输入请求地址并回车(前提服务器启动)
(2)检查day12这个项目是否存在
(3)去web.xml中找到/demo路径
(4)找到url-pattern对应的servlet-name的名字
(5)找到和servlet-name相同名称的servlet-name
(6)找相对应的Servlet类
(7)执行相对应的doGet()或者doPost()方法
request
Request常用的方法
- request.getParameter(“”)
(1)获取指定参数值,参数名称相同时,获取第一个参数值; - request.getParameterValues(“”)
(1)获取指定参数值,参数名称相同时,获取多个参数值,返回值为数组; - request.getParameterNames()
(1)获取参数中的所有name属性,返回值为Enumeration; - request.getParameterMap()
(1)获取所有参数,返回值为Map,Map中的key为属性名,value为属性值,value数据类型是一个String数组; - 代码示例
代码优化
- 问题 : 每一个表单参数都需要写一个getParameter()方法,不利于开发
- 可以使用BeanUtils类中的populate(bean,map)直接将map中的数据封装到实体类对象当中
- 注意
(1)map中的键必须和bean中的属性能对应上(区分大小写) - 代码示例
post请求乱码问题解决
-
post方式提交发生中文乱码
(1)request.setCharacterEncoding(“utf-8”);
(2)可以应用于doGet和doPost方法; -
get方式提交为什么不乱码
(1)tomcat8.0版本之后get提交方式的乱码已经被解决
Request对象讲解
- 在Servlet API中,定义了一个HttpServletRequest接口,他继承自ServletRequest接口,专门用于封装HTTP请求消息. 由于HTTP请求消息分为了请求行,头,体三部分,因此,在httpServletRequest接口中定义了获取请求行 头 体的相关方法。
- 区别
(1)ServletRequest请求的顶层接口.规定了普通请求的操作方法,无法处理http协议;
(2)HttpServletRequest是ServletRequest子接口.可以处理Http协议;
(3)注意 : request对象只能进行请求行 头 体读取操作,不能进行写入数据操作;
response
response知识讲解
- 在Servlet API中,定义了HttpServletResponse接口, 他继承自ServletResponse接口
- 区别
(1)HttpServletResponse接口,专门处理http协议的响应接口
(2)ServletResponse接口,普通的响应接口,不能处理http协议
response对象操作响应行
- setStatus(int code)
(1)设置响应的状态码 - sendError(int code, String message)
(1)设置错误提示信息
response操作响应头
- 设置响应头字段的方法
(1)addHeader(String name, String value)
(2)setHeader(String name, String value)
区别:1)相同点1.这两个方法都是用来设置http协议的响应头字段,其中name为key value为值;2)不同点:1.addHeader方法可以增加同名的响应头字段,而setHeader方法则会覆盖同名头字段
代码示例
(3)void setCharacterEncoding(String charset):①该方法用于设置servlet输出内容使用的字符编码. 对于HTTP来说,就是设置Content-type头字段中的字符编码部分;
(4)void setContentType(String type):①该方法用户这是servlet输出内容的mime类型. 比如发送到客户端的内容是jpeg的格式图片,那么就需要设置”image/jpeg”;②需要注意的是,如果响应的内容为文本,setContentType方法还可以设置字符编码,如”text/html;charset=utf-8”;
response操作响应体
- 响应体信息是无限的,所以一般用来传递大量数据
- 常用方式
(1)getOutputStream():①获取一个字节流,通过write方法向响应体输出二进制字节流信息
(2)getWriter():①获取一个字符流,通过write方法向响应体输出字符流信息
代码示例
- 中文乱码问题解决
- 流关闭问题
(1)流是服务器自动管理的,不用程序员手动关闭