一、Java web
web资源可以简单的分为:静态web资源和动态web资源。
- 静态web资源:例如:html页面,一般都是一些不会变动的数据。
- 相对应的就是静态web发开技术:例如:HTML、CSS等。
- 动态web资源:一般指的是,在web页面中,因时间不同,或者操作不同等等原因,所导致的人浏览的数据也将各不相同。
- 相对应的动态web开发技术:JavaScript、JSP、Servlet等等
- 动态web资源开发技术统称为Java Web。
二、HTTP协议和Servlet的执行
- HTTP协议建立连接
- 发送请求(get和post两种请求方式)
- tomcat容器内部解析请求数据包,然后将请求数据存放在request对象当中,并同时创建了一个response对象。
- tomcat容器创建servlet对象。
- 调用重写之后的service(req,resp)中的方法。
- 将响应数据包打包发送
- 浏览器解析响应数据包,并展示在当前页面。
- 断开连接。
三、客户端的缓存
1、一般来说,如果该内容为静态内容,那么就会直接去寻找缓存,就不需要去访问服务器了。
2、如果需要访问的内容为动态内容,这需要访问服务器获得动态内容资源。
当自己不想访问已经缓存好的内容的时候,就可以在url地址后面加上一些不同的参数,让请求参数进行变化,这样就会去访问服务器,获得新的资源。
四、 servlet地址的配置
在个人实际使用当中,一般都会先去获取请求地址。然后再对请求地址进行判断,判断该用户接下来会进行的操作。
1.获取地址常用的三种方法
- getContextPath( )
- getServletPath( )
- getRequestURI( )
如果你的web项目名称为Application,在浏览器中请求的路径为(http://localhost:8080/Application/homework/user.jsp)
那么,使用以上三种方法将会得到一下结果。
--方法1:getContextPath( )--
结果:/Application
--方法2:getServletPath( )--
结果:/homework/user.jsp
--方法3:getRequestURI( )--
结果:/Application/homework/user.jsp
要根据不同的需求,合理的运用方法,才能是自己的代码更加合理,也能让自己的思维更加清晰。
2.配置web.xml文件
<servlet>
<servlet-name>user</servlet-name>
<!--资源地址-->
<servlet-class>action.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user</servlet-name>
<!--通过*来模糊匹配当前的操作,并且必须是".do"为后缀名 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
3.getServletPath( )
- 通过获取请求地址,再通过请求的地址来进行一个判断。
- 例如:
if(req.getServletPath().equals("/add.do")){ System.out.println("添加操作"); }
- 例如:
这种方法自己也使用的较多,也是较为好用的一种判断用户操作的一个方式。特别对于JDBC的操作来说,该方法更是锦上添花。
五、Servlet的生命周期
- Tomcat容器一旦启动,就会创建servlet对象。
-创建Servlet对象的时候,就会进行init初始化。这个过程只执行一次。 - 然后客户端每次发送请求的时候,都会执行service(doGet/doPost),
- 最后Tomcat容器运行结束的时候,执行destroy方法,这个过程也是只执行一次。
六、转发或者重定向
- 两者定义的区别:
(a)请求转发:当服务器接收到客户端请求之后,会将客户端的请求转发给目标地址,最后再将目标地址的返回数据结果反馈到客户端。(这一系列过程都发生在服务器内部)
(b)重定向:当服务器接收到客户端请求之后,会反馈客户端一个临时响应头,在这个临时响应头中包含了,客户端需要再次发送请求的url地址,客户端就会将请求再次发送到新的url地址上去,最终从新的url地址中反馈得到数据结果。
- 数据共享不同
(a)请求转发:整个过程是在服务器上实现的,所以客户端只需要发送一次请求,并且在这个过程中,请求和返回的数据结果都是共享的。
(b)重定向:因为客户端需要先从服务器得到临时响应头,再从临时响应头中获取目标url地址,并再次发送请求,因此,发送的请求不同,所以得到的数据也是不同。
- 最终 URL 地址不同
(a)请求转发:因为整个过程是在服务器端执行,并得到数据结果,所以整个请求过程的url地址不会改变。
(b)重定向:因为客户端需要先向服务器发送一次请求并“询问”自己如果想要获得目标信息所需要访问的url地址,所以整个过程的url地址也将会改变从最终跳转的地址。
七、el表达式
el表达式是方便于我们获取数据,并转发到jsp页面上的数据的一种表达语言。
它的语法规则:${变量} , ${对象.属性}
<%-- el表达式: ${reques对象中保存的key} --%>
<h1>user:${user}</h1>
<%-- ${emp.eno}
1、emp对象的属性值的获取
2、对象.属性名 (要求,属性必须提供了正确的get方法。)
3、el表达式中,如果获取数据值是null, 那么就不显示内容
--%>
八、jstl标签
1.需要先导入库
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2.在jsp页面引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 然后我们就可以正常的使用了。
- 需要注意的是jstl需要引入的taglib的标签。
<%--taglib指令 prefix="c" , prefix 前缀 , 表示在使用的标签的前面都要加上c: ,解决命名冲突 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>
- jstl使用的方法,个人感觉有点类似c的感觉(但是也只是个人感觉)
九、cookie的使用
其实对于cookie的使用,个人感觉还是了解就行,因为cookie目前对于自己来说还是比较容易就上手的。
- cookie中存储的是String类型,而且cokie中的存贮数据大小也有限。
- 在我们的浏览器中也可以设置禁用cookie,查看cookie数据或者删除cookie数据。
- cookie的也可以设置有效期,一旦有效期过后,cookie会被浏览器清除掉。
十、session
- 状态管理:
- cookie:客户端状态管理技术
- session:服务器端状态管理技术
- 在session中保存数据:
- 把数据存入session中,使用setSession(“名字”,数据) ,存入的方式类是以键值对的形式。
- session中取出数据,getSession(“名字”)
- session在会话期间才会有效:
- 在会话期间的时候,session中保存的数据,所有请求都可以共享。
- 客户端向服务器端发送请求的时候,就会创建session对象。若用户关闭浏览器(客户端),那么session对象就会失效。
- 设置session有效期
- session.setMaxInactiveInterval(60) :是以秒作为单位。
1、其实在目前个人的使用当中,request对象使用的会相较于session对象多一点。
2、但是,request对象是每请求一次,就是一个全新的对象,所以request并不能达到数据的共享。但是我们可以通过对request对象的转发,从而实现数据的共享。
# 十一、过滤器
过滤器的执行过程:
1、就是访问请求的同时,需要先进行过滤器的配置。
2、然后再对过滤器路径的请求,进入过滤器中去执行。
3、执行结束之后,根据相应的要求,去判断是否满足要求。
4、最后达到一个过滤的效果。
十二、java web作用域
java web作用域:pageContext、request、session和application。
- pageContext:只在当前页面有效
- request:请求期间有效
- session:会话期间有效
- application: 程序运行期间有效
十三、ajax(异步请求)
ajax:就是通过jquery中的ajax函数,将异步请求发送,发送之后再将获取的数据使用jquery同步到浏览器中来。
- 前端
<script src="js/jquery.js"></script> <script>
$("button").click(function () { //ajax函数, 参数是json格式
let args = $("form").serialize();// key=value&key=value....
$.ajax({
url: "hobby", // 请求的url
data: args, // 请求参数
type: "get", // 请求的方式
dataType: "json",// 期待的响应结果的格式
success:function (res) {//成功之后, // res ==> {"success":true}
if(res.success){
alert("成功")
}else{
alert("失败了")
}
}
})
})
</script>
- 后端
// 响应结果: json格式的结果 {key:value, key1:value1}
// *** application/json: 表示响应结果是json格式
// *** text/html :表示响应结果是html格式
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().println("{\"success\" :true}");
目前异步个人,因为初学的原因,使用还是不太熟练。但是在练习的过程当中,发现使用ajax(异步请求)会比之前使用jsp方便很多,而且对代码整体逻辑来讲也更加合理。
1、以上就是自己在Java Web中学习总结的一些知识点,也是自己使用较为频繁,遇到问题最多的地方。
2、在整Web学习的过程中,自己也渐渐对前后端的概念更加清晰,对整体逻辑设计、处理也更加合理。
3、举个简单例子来讲,如果我面前有一个需求。以前的我,面对需求我可能会无从下手,但是在系统的学习了web阶段之后,现在自己能明确,自己应该先做什么,怎么去实现这个过程,最后这么把数据在浏览器中去体现出来。这也是我在整个web阶段进步最大的一点。