java web部分学习小结(华清远见)
1、Servlet
web服务器通常只能处理静态的资源(html , css , img , js…) , 为了解决一些动态的处理数据 ,就需要对web服务器的功能进行扩展,servlet就是用于处理动态数据的组件规范。
组件: 符合一定规范 ,完成部分功能的软件模块。这些软件模块需要放在容器中进行运行。
容器:符合一定规范 , 能够运行组件的一种软件。 比如:tomcat …
servlet规范: 使用servlet的时候,自定义的类是HttpServlet的子类 ,那么就是符合servlet的规范。
Servlet 的开发步骤
-
新建符合java web项目的工程
-
servlet 类 继承 HttpServlet
- 重写service方法
- service(HttpServletRequest request , HttpServletResponse)
- request : 请求
- response :响应
-
java web工程中的web.xml文件
- web.xml 的文件名不能修改(tomcat找web.xml)
- 将java的类 和 浏览器访问的地址做一个映射
- 浏览器没法办法直接访问java类中的方法 , 所以需要java类映射到一个浏览器能访问的url地址。
-
打包(idea帮助完成)
- 把web项目运行需要的文件内容按指定文件结构保存。
-
部署(在idea中可以完成)
- 把打包好的web程序放到tomcat容器中,然后运行tomcat容器的时候,才能访问我们的web程序。
-
启动容器, 然后可以通过浏览器访问访问web程序。
maven web项目的创建
1、选择maven项目 ,选择项目的模板为maven-archetype-webapp
2、设置项目的名字、路径等信息
3、创建好meven项目后,添加java, resources目录
4、导入项目所需要的jar包:mysql驱动, servlet-api 的jar包
4、配置好新版本的web.xml文件
5、安装配置tomcat服务器,一切正常完成后,项目就创建完成了。
中文编码设置
中文编码设置需要设置请求的编码格式和响应的编码格式:
resp.setContentType("text/html;character=UTF-8");
req.setCharacterEncoding("UTF-8");
Servlet 的生命周期
- 容器启动或者第一次访问servlet的时候,会执行init方法,一个生命周期内只执行一次。
- 容器结束运行的时候,执行destroy方法,一个生命周期内容只执行一次。
- servlet被访问的时候,反复执行service(doXXX)
Servlet 的url映射方式
tomcat 优先查找 servlet ,如果没有符合的 servlet , 那么就找静态资源,如果也没有静态资源被找到,就404.
- /life :精确地址,没有扩展名,以/开始
- /life.do: 精确地址,有扩展名,以 / 开始
- *.do , 通配符 + 扩展名,所有以.do结尾的请求,都会被拦截,不以/开始。
- / , 拦截所有请求,但不拦截jsp
- /* , 拦截所有请求
jsp的使用
jsp 是一种运行在服务器端的页面, 它里面包含 html , 嵌入一些 java 语言, 在服务器 (tomcat) 上经过 解析转换, 输出为 html 页面。
jsp 不需要配置, 直接用它的路径和文件名进行访问。
jsp 是 sun 公司制定的一种用于服务器动态页面的技术规范 , 也是一种组件, 依赖于 tomcat 进行运行。
- servlet + html : 数据的处理和数据的显示
- servlet + jsp: 数据处理(servlet) , 数据展示(jsp-- 嵌套java使用)
- servlet 做数据显示的时候,不方便(编写, 维护都不方便)
- jsp:让数据的处理和数据的展示进行分离
jsp的本质是servlet,当第一个访问一个jsp页面的时候, 会将jsp文件,
对应生成一个servlet类。html , js , css这种内容就用输出语句拼接,
其他和java相关的内容,就按java的方式转换。
转发和重定向
转发:
转发的就是一个请求处理了一部分功能,然后开始另一个请求处理剩下的功能 ,其本质就是一个请求。
转发是共享request,response对象 ,因此可以把需要转发的数据保存在request对象中,浏览器的地址栏地址保存不变。(显示第一个请求的地址)
RequestDispatcher requestDispatcher=req.getRequestDispatcher("show.jsp"); requestDispatcher.forward(req,resp);
重定向:
重定向是一个请求的功能完成了,然后开启另一个请求,做另一个功能。 本质是两个请求。(第一个请求是我们主动发的, 第二个请求是浏览器收到302代码和重定向的url地址, 然后浏览器主动发送的请求。)
重定向因为是两个不同的请求,所以是两个不同的request对象,因此不能共享数据。
浏览器地址栏的地址是显示重定向的地址。(显示第二个请求的地址)
resp.sendRedirect("show.jsp"); // 重定向
el表达式
jsp页面上,用于方便的获取到转发到jsp页面上的数据的一种表达式语言。
语法规则: ${变量} , ${对象.属性}
el表达式: ${reques对象中保存的key},其本质上是在调用get方法,所以对象必须提供正确的get方法。
<h1>emp:${emp}</h1>
el表达式可以参与运算:
<h1>el表达式的运算</h1>
条件运算: ${age1 > 18 } <br>
逻辑运算: ${age1 > 18 || false} <br>
判空: ${empty emp1} <br>
算术运算: ${age1 + 20 }
jstl标签
jstl标签的使用必须引入要使用的标签库
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix=“c” , prefix 前缀 , 表示在使用的标签的前面都要加上c: ,解决命名冲突 。
jstl标签可以使用流程控制,包括循环、分支等。
cookie的使用
cookie是 用于保存客户端的状态的计数。 当我们有多次请求的时候,这个多次请求被看做一个整体,这个整体中有些数据需要保存的时候,可以使用cookie,把数据保存在浏览器中。
cookie的用方法
- 服务器端代码中,创建cookie对象,在response中添加cookie
- 客户端访问服务器的时候,会将把当前访问路径有关的cookie发送到服务器端
- 服务器端可以在request中获取到cookie数据,然后对这些数据进行使用
- 浏览器可以设置禁用cookie,或者用户可以删除cookie数据,用户可以查看到cookie数据,
- 所以重要数据不能直接保存在cookie中。
- cookie中存储的是string , 并且存储的数据大小也有限。
- cookie 可以设置有效期,过期之后,cookie会被浏览器清除掉。
session的使用
-
状态管理
- cookie : 客户端状态管理的技术
- session:服务器端状态管理技术
-
session中保存数据
getSession() : 规则就是如果有就根据 sessionid 获取 session 对象,如果没有就直接创建一个 session 对象。
getSession(boolean) : true, 同getSession()功能, false , 如果找不到session对象,就返回null.
-
session中获取数据,返回值是objec
session.getAttribute("loginname");
-
session中删除数据
session.removeAttribute("loginname");
-
设置session无效
session.invalidate();
jsp的内置对象
- request : 请求
- session : 会话
- out : 输出语句
- response : 响应结果
- page : 类似于this
- pageContext : 有效范围只在当前的jsp页面上。
- application: ServletContext
- config : servlet的数据
- exception: 异常
java web作用域
- pageContext :只在当前页面有效
- request : 请求期间有效
- session: 会话期间有效
- application : 程序运行期间有效