049天
行百里者半九十,想要在一个行业里成为顶尖人才,一定满足一万小时定律,要想学好JAVA,需要持之以恒不断地努力,每天都要勤思考+善于询问+解决问题!
知识温故而知新>>>>>>>
IO流体系总结
因为最近忙于学校里考试的测验,时间交错不开,所以耽误了这边的学习,后期我会尽快补上,加快学习速度!
HTTPServletRequest的介绍和特点
request对象的作用是什么。
获取请求报文中的所有数据
1、获取请求参数【input表单项提交的数据】
2、获取url地址中的所有数据
3、获取请求转发器转发请求
request对象的特点是什么?
request对象是由谁创建的?
由Web容器创建的
request获取请求行数据和根据键名获取请求头数据
请说出request对象获取请求行的方法及其作用
请求方式:"+request.getMethod()
请求URL:"+request.getRequestURL()
请求URL中附带的参数:"+request.getQueryString()
请求资源:"+request.getRequestURI()
getHeader方法的作用及特点
获取指定的头信息:采用 request.getHeader("头名称") 方法。
request获取请求头键名枚举和根据键名获取实体数据和获取同名不同值数据
简要说明getHeaderNames的作用?
获取HTTP协议中的请求头
获取请求实体数据的方法是?区别是?
直接使用request.getQueryString()获取String
当请求方式为“Post”时,读取InputStream(request.getInputStream())
区别是请求方式不同
request获取请求实体键名枚举和获取请求相关网络数据
请列举获取网络信息的方法是哪些及其作用
请说名getParameterNames的作用是什么,以及需要注意什么?
request.getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举.
通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值.
最后通过request.getParameter()方法获取表单控件的value值.
response设置响应行和设置响应头
说明addHeader和setHeader的方法的作用和区别
setHeader(name, value):如果Header中没有定义则添加,如果已定义则用新的value覆盖原用value值。
addHeader(name, value):如果Header中没有定义则添加,如果已定义则保持原有value不改变。
说明sendError的作用
sendError(int errnum )说明:用来向客户端发送错误信息,这对调试程序有很大帮助。
response设置响应实体
响应实体是什么?
响应实体:正文,服务器返回给浏览器的信息
响应实体和响应头有啥区别?
响应头:消息报头,客户端使用的附加信息
乱码问题解决
请说明get和post请求乱码的解决方案
post乱码:
原因:
对于POST方式,它采用的编码是由页面来决定的即ContentType("text/html; charset=GBK")。当通过点击页面的submit按钮来提交表单时,浏览器首先会根据ContentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器,在服务器端同样也是用ContentType中设置的字符集来进行解码,这就是通过POST表单提交的参数一般而言都不会出现乱码问题。
当然这个字符集编码我们是可以自己设定的:request.setCharacterEncoding(charset)设置编码,然后通过request.getParameter获得正确的数据。
解决方案:
springMVC已经提供了轮子给我们使用,在web.xml添加post乱码filter
在web.xml中加入:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上可以解决post请求乱码问题。
get乱码:
原因:
对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。
当URL拼接后,浏览器对其进行encode,然后发送到服务器。具体规则见URL编码规则。
tomcat服务器在进行解码过程中URIEncoding就起到作用了。tomcat服务器会根据设置的URIEncoding来进行解码,如果没有设置则会使用默认的ISO-8859-1来解码。假如我们在页面将编码设置为UTF-8,而URIEncoding设置的不是或者没有设置,那么服务器进行解码时就会产生乱码。
这个时候我们一般可以通过new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8") 的形式来获取正确数据,或者通过更改服务器的编码方式: tomcat 设置中<Connector port="8080"protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000"redirectPort="8443"URIEncoding="客户端编码"/> (默认是iso-8859-1)。
服务器获取的数据都是ASCII范围内的请求头字符,其中请求URL里面带有参数数据,如果是中文或特殊字符,那么encode后的%XY(编码规则中的十六进制数)通过request.setCharacterEncoding()是不管用的。这时候我们就能发现出现乱码的根本原因就是客户端一般是通过用UTF-8或GBK等对数据进行encode的,到了服务器却用iso-8859-1方式decoder。
解决方案:
1.修改tomcat配置文件添加编码与工程编码一致,如下:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
2.对参数进行重新编码:
String userName new
String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
请求说明如何解决响应数据乱码
1、设置缓存区编码格式为UTF-8,使用 setCharacterEncoding() 方法。
2、在响应中主动告诉浏览器使用UTF-8编码格式接收数据,使用 setHeader() 方法。
3、使用封装类简写Content-Type,使用 setContentType() 方法则无需使用 setCharacterEncoding() 方法,推荐使用这种方法。
简单的登录练习
什么是Servlet?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet的特点是什么?
性能明显更好。
Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
Servlet 是独立于平台的,因为它们是用 Java 编写的。
服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
写出视频中对Servlet总结的内容