发表于: 2018-01-25 15:14:08
1 742
今天完成的事情
1.梳理知识点。
(1)首先就是servlet,一直在用,但具体的东西一直没有深究:
·servlet是什么:servlet是小型服务程序或服务连接器,主要作用是交互式的浏览和修改数据,生成动态web内容,一个servlet就是一个类,被用来扩展服务器的性能。
·servlet的实现过程:1.客户端发送请求到服务器 2.服务器将请求发送至servlet 3.servlet生成响应内容将其传给服务器 4.服务器将内容发给客户端
·servlet的生命周期:实例化,初始化,提供服务,销毁,被回收
实例化:用户在浏览器输入路径,对应的servlet被调用的时候,该servlet就会被实例化
初始化:servlet继承了HttpServlet的init方法
提供服务:判断浏览器的请求是get还是post,调用对应的方法
销毁:该servlet所在的web应用重启或者是tomcat关闭时
被回收:这个就是回收。。
·request的常见方法:
request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)" +
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名" +
request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名
request.getMethod(): 得到客户机请求方式一般是GET或者POST
·request获取参数:
request.getParameter(): 是常见的方法,用于获取单值的参数
request.getParameterValues(): 用于获取具有多值得参数,比如注册的时候提交的爱好,可以使多选的。
request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。
·response的用法:
response.getWriter():获取一个PrintWriter对象,然后通过print()等方法来设置返回给浏览器的内容。
response.setContentType("text/html"):设置响应格式,括弧里面就是格式
(2)HTTP协议,之前知识大概明白是什么意思,今天扫盲
HTTP 超文本传输协议 Hyper Text Transfer Protocol
·当我们在浏览器的地址栏输入一个地址的时候,就能够访问服务器的某个页面
·这个过程本身就是两个应用程序之间的交互,一个应用程序是浏览器,另一个应用程序是服务器。
·协议是什么? 协议就是不同的应用程序之间按照事先做好的约定进行的通信。 这样就能互相读懂对方的意思。
·浏览器和WEB服务器之间,使用的就是一种叫做HTTP的协议。 这样是BS (Browser Server )架构模型的基础
HTTP协议由两种类型组成:请求和响应。
(3)jsp页面的一些内容:
·<%@page%>指令,用来设定jsp页面的属性主要包含contentType属性(用来通知浏览器的解码方式)和import属性(引入其他类)多各类用,隔开
如:<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
通知浏览器以8类型解码,jsp页面中的中文编码方式是8类型,引入util下的所有类。
·<%=%> 用来取后台的非私有变量值 如:<%=new Date().toLocaleString()%> 就能在jsp页面显示当前时间。
·为什么jsp可以再Html中运行java代码?因为jsp被转译成了servlet 上个图帮助理解:
·jsp页面的元素一共有七种:直接上图:
1其中我用到了除<%!%>的所有元素,尤其是include很有趣,做个一个脚标。
2还有上面提到了<%=%>和<%%>两者的区别有一点点:前者不需要用;结尾,而后者需要。上个例子说明:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%="hello jsp"%>
<
br
>
<% out.println("hello jsp");%>
3而且在上面的例子中,倒数第一行和倒数第三行是一样的,out是隐式的,可以直接使用。(类似于无参构造方法)
4还有说一下include,方式有两种:指令和动作。<%@include file="footer.jsp" %>这个是指令 <jsp:include page="footer.jsp" />这个是动作。
说一下两者的区别:之前说过是把jsp转译成java,指令include的话是直接将要插入的页面直接怼进了主页面的java文件中,只生成一个文件;而动作呢是分别编译成java,然后再嵌入;也就是一体和非一体的关系。
(4)cookie的知识:
cookie是浏览器和服务器交互数据的一种方式,cookie由服务器创建,由客户端保存,下一次访问的时候就会发送cookie给服务器。
下面是添加cookie:
Cookie c =
new
Cookie(
"name"
,
"Gareen"
);//新建一个cookie,名字是name,值是Gareen
c.setMaxAge(
60
*
24
*
60
);//设置cookie的有效期 这是一天,如果是0的话,关闭浏览器就销毁。
c.setPath(
"127.0.0.1"
);//path表示这个访问服务器的主机名,只有用这个主机名访问的时候提交cookie
response.addCookie(c);//通过response把这个cookie保存在浏览器。
下面是取出cookie:
Cookie[] cookies = request.getCookies();
if
(
null
!= cookies)
for
(
int
d =
0
; d <= cookies.length -
1
; d++) {
out.print(cookies[d].getName() +
":"
+ cookies[d].getValue() +
"<br>"
);
}
这个没啥好说的,就是这种方法。
(5)session的知识:session就是会话,会话值得是从登入一个网站到离开网站这个过程。关于session和cookie的区别昨天说过,地址不一样,一个在客户端,一个在服务器。
session保存数据的方式有点类似键值对:
session.setAttribute("name", "teemo");//name是键 teemo是值
取出来:String name = (String)session.getAttribute("name");//取出来的是teemo
而session的有效期默认是30分钟
(4)作用域的相关知识:
http://how2j.cn/k/jsp/jsp-scope/584.html#nowhere 直接在这里放链接了,我觉得说的简单明了。
四个作用域,也就是取值的范围。、
(6)jstl的知识,也就是标签库。
这个之前已经介绍过了,主要是c标签,用到的是if和foreach。
(7)EL表达式 这个东西真的是好使。
为了保证el表达式可以正常使用,通常在<%@page 标签里加上isELIgnored="false"。这个东西好使到什么程度呢:
·取值: 比如使用c标签输出内容:<c:out value="${name}" /> 而使用el表达式只需要这样:${name}怎么样,贼鸡儿刺激。
·作用域:el表达式可以从四个作用域取到值,并且重复值的时候会按照从小到大的顺序取值pageContext>request>session>application。
这是验证代码,设置作用域
·访问javaBean的属性:那什么是javaBean呢?
我平常写的model类都是javaBean
·el表达式访问的时候非常方便,取值只需用“.”比如student类中的name值:${student.name}就可以直接取到值,是不是贼好使
(8)mvc的知识 这个老生长谈了
(9)过滤器和监听器的相关知识:
在web.xml文件中添加过滤器:
<
filter
>
<
filter-name
>FirstFilter</
filter-name
>
<
filter-class
>filter.FirstFilter</
filter-class
>
</
filter
>
<
filter-mapping
>
<
filter-name
>FirstFilter</
filter-name
>
<
url-pattern
>/*</
url-pattern
>
</
filter-mapping
>
/*表示所有请求都会过滤,如果是*.jsp就只过滤jsp文件
过滤器可以有多个,按顺序执行。
在今天的整理过程中发现之前对于监听器和过滤器的理解太低了
放一篇过滤器的博客:http://www.cnblogs.com/hellojava/archive/2012/12/19/2824444.html
监听器的:http://blog.csdn.net/w938706428/article/details/41845899
在这里放个总结:
过滤器主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处理并生成响应,最后Filter 再对服务器响应进行后处理。
Filter功能:
- 在HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest 。 根据需要检查 HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
- 在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。 根据需要检查 HttpServletResponse ,也可以修改HttpServletResponse头和数据。
接下来是监听器:
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。
同样对于这些东西没有深究,只是知道了他们是做什么的以及怎么用。
(10)拦截器的知识
·什么是拦截器
Java里的拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
·为什么使用拦截器
如果具有这样一个需求,就是用户未登陆的拦截,接口的幂等性等,我们可以使用springmvc的拦截器为我们做到。实现接口HandlerInterceptor接口,需要实现3个方法,或者实现WebRequestInterceptor接口,需要实现的方法和介绍。
·需要实现的方法
preHandler : 是controller的前置方法,当方法返回false整个请求就结束了。多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在。
WebRequestInterceptor和HandlerInterceptor的preHandler的方法的区别就在与webRepuestInterceptor的preHandler的方法是没有拦截的功能,是没有返回值的。
postHandle : 就是在当前请求进行处理之后,也就是Controller方法调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用。
afterHandler:该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行,可用于清理资源。
(11)MD5加密,这块儿用的是MD5加密工具类,知识对这个加密非常简单的了解了一下下,传一下:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Util {
public final static String getMd5(String str) {
MessageDigest mdInst = null;
try {
mdInst = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
mdInst.update(str.getBytes());// 使用指定的字节更新摘要
byte[] md = mdInst.digest();// 获得密文
return StrConvertUtil.byteArrToHexStr(md);
}
}
至此,知识点整理完毕。
2.修改自己的task5代码,使其完善了一点点,其实也是瞎搞的一些东西。
下拉菜单:
其实并么有什么卵用
注册界面加提示以及显示当前时间,一秒刷新一次:
3.部署到服务器,并且正常访问。
4.提交任务五。
简书链接:https://www.jianshu.com/p/e4277547035e
任务总结:
任务名称:java=task5
成果链接:http://47.93.229.36/task5Demo/
任务耗时:1.23-1.25 没有延期
机能脑图:
个人脑图:
官方脑图:
a.任务进度符合预期要求,并无延期
b.脑图对比分析:
通过对比可以发现我的脑图的划分不是特别规范,深究起来应该是脑海中还没有一个这样的框架,都是零碎的一些知识,在这一块儿以后应该对自己要求严格一些,把知识的划分整理好,形成一个体系,对知识的掌握也是非常有好处的。但总体来说,需要掌握的内容都已经涉猎到,总体来说任务还行。
c.任务中碰到的疑难问题:
(1)首先是一开始任务五的时候不知道从何下手,直接去百度了DES算法,至今想起来仍然很难受,记得当时看那些东西,虽然看的明白是怎么个意思,但是让我用这个原理来加密的话,实在是做不到;于是在研究了半天之后点开了师兄的日报,突然发现一个信息!就是直接使用的加密工具类来进行加密,仅仅对加密的过程有所了解就行。这就是第一个问题:从这个问题中应该吸取的教训是做任务的时候应该带着目标来进行,而不是一看任务要求急吼吼地去百度了,还有就是和师兄的交流,如果能问一问师兄的话,能节省半天时间。
(2)碰到的第二个问题是就是生成了cookie,而我设置的cookie的有效期是一天,导致我访问任务要求的需要登录的页面时总是直接进去而不需要登录验证。我就以为是我的拦截器没有生效,后来憋不住了问的师兄,师兄让我先修改cookie的有效时间,然后换了一个浏览器来进行验证,这次果然成功了。
(3)第三个问题也是cookie有关的问题,我在拦截器中输出了日志,通过观察日志发现我每次登录拦截器会拦截到两次,经过曲师兄的帮助,推断出是因为之前的cookie有效期太长而我又新建了一个cookie,所以拦截了两次,在清除了浏览器的cookie后,正常运行。
5.开始接触任务六
(1) 下载Jmeter
(2)看后面的任务用到了负载均衡,在服务器安装jetty,很难受,网速0.25k。。。
今天的收获
今天将知识点梳理一遍,感觉清晰了不少。
今天遇到的问题
今天也在任务收尾阶段,没有什么问题
明天计划的事情
搞清楚任务六什么情况,推进任务六
评论