零散知识
- 查看系统:window+r -> dxdiag
- 卸载时:先卸载eclipse或myeclipse,在卸载jdk
快捷键
- 快速查找Java文件:选中类名 -> ctrl+shift+h
零、 服务器
0.1 服务器
0.2 tomcat服务器与eclipse整合
- eclipse环境配置:
window -> preferences -> -> Java -> Instatlled JREs -> 如果有问题 -> add -> Standart VM - 取消校验:
window -> preferences General -> Validation -> 应该默认全选,现在改为只选第2个
0.3 tomcat的目录结构
- bin目录:可执行命令
- conf:配置
- lib:jar包
- logs:日志
- temp:临时文件
- webapps:开发好的web程序
- work:将jsp翻译成servlet后的文件
一、 基础
- 新建项目:new -> Dynamic Web Project -> 起名 -> next -> next -> 有个框,勾选以下
- 项目想要被浏览器访问到,必须继承HttpServlet类 -> 重写doGet和doPost方法 -> 在class上写“@WebServlet(“名字”)”
1.1 HttpServlet类
- 如果某个类继承HttpServlet类,那么这个类就是servlet。浏览器可直接访问servlet
- 重写HttpServlet中的doget和doPost方法。get请求传输的参数直接在导航栏中显示。一般默认通过地址栏访问用get请求。
- servlet类的包名为cn.java.servlet,同时给类命名时在类名后加servlet。
虚拟路径的配置方式
- 第一种方式:通过@webserviet(“虚拟路径”),虚拟路径前一定有“/”
- 第二种方式,在WebContent -> WEB-INF -> web.xml -> 上方写
<servlet>
<servlet-name>别名</servlet-name>
<servlet-class>指定的一个servlet的路径</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>上面的别名</servlet-name>
<url-pattern>对外虚拟路径<url-pattern>
</servlet-mapping>
1.2 为工程配置默认的访问路径
- 第一步:写一个html,放在WebContent下,
- 第二步:在WebContent -> WEB-INF -> web.xml -> -> -> 删除之前所有的 -> 写第一步的html
1.3 request
- 接受参数:request.getParameter(),该方法的返回值一定是字符串
- 修改编码:request.setCharacterEncoding(“utf-8”)。该方法只能修改post提交方式,get提交不能修改。
get修改编码:修改tomcat服务器的编码:P57 - 获取访问协议:request.getScheme()。http——超文本传输协议
- 获取端口号:request.getServerPort()
- 获取服务器名:request.getServerName()
- 获取工程名:request.getContextPath()
- 获取访问者的IP:request.getRemoteaddr()
二、 jsp
jsp与html文件类似,html中能使用的标签在jsp中都能使用,但是jsp中可以写Java代码。jsp本质是servlet
修改jsp默认编码:
1. 点击window
2. 点击preferences
3. 搜索jsp
4. 找到jsp files点击
5. 右边有一个Encoding,点击、下拉找到utf-8
6. 一路ok
jsp执行流程:请求jsp引擎,将文件生成java文件,将Java文件编译为class文件,class常见对象,给用户相应
组成:静态内容、指令、表达式、小脚本、声明区、注释
2.1 jsp组成
2.1.1 jsp指令(面试)
- 指令是给服务器看的。
- 语法:<%@ 指令名 属性名=属性值 %>
- page指令:<%@ page 属性名=属性值 %>。设置整个jsp页面的相关属性。
如:<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8">
属性有:
- language=“java”:指定jsp页面使用的脚本语言。现在已经沦为摆设,没有实用性
- contentType=“text/html; charset=utf-8”:告诉服务器以html的方式来解析jsp文件,同时采用utf-8编码
- import:引用脚本语言中使用到的类文件
- extends:可以指定jsp生成时继承的Servlet类
- session:是否可以使用session
- errorPage:产生错误后,跳转的错误处理页面
- contentType:描述网页内容类型与编码格式
- taglib指令:使用标签库定义的新的自定义标签
如:
<%@ taglib uri="tagliburi" prefix="别名"%>
uri:用来匹配引入的标签库描述文件,对应标签库中的uri
prefix:标签库引入时的别名,再使用标签中需要加入 别名:前缀
有时我们在一个jsp文件中引入多个标签,prefix是用来区别不同标签库的!
jstl标签库:
使用:
1. 引入相关jar包,jstl标签 standard.jar和jstl.jar两个jar包
2. 在jsp页面通过taglib指令引入核心标签库
3. 常用标签:
<c: if test="${条件 }"></c:if>
<c: forEach items=“被循环的信息” begin=“开始的元素” step=“迭代步长” var=“当前变量名” varStatus=“循环状态的变量名”></c:forEach>
如:<C:forEach var="i" begin="1" step="2" end="5"> ${i } </c:forEach>
<c: choose>
<c: when test=""></c:when>
<c: otherwise></c:otherwise>
</c:choose>
- include指令:<%@ include file=“引入页面所在路径” %>将一个外部文件嵌入到另一个jsp或html文件,同时解析这个页面中的jsp语句
2.1.2 jsp脚本片段
- 可以在脚本片段中书写Java代码
- 语法:在中写<% 代码 %>,将<% %>看为Java方法中的大括号,所以不能定义方法
- 注释:
- html注释
- jsp注释:<%-- --%>
2.1.3 脚本表达式
- 语法: <%= 表达式 %>
- 作用:
- 向浏览器打印数据:out.print()
- 取值
2.1.4 注释
- html注释:
- jsp注释:<%-- --%>
- jsp脚本注释://或/**/
2.1.5 声明(区)
- 定义:指的是Java中的成员位置,可以用来声明成员变量,声明成员方法
- 格式:
<%!
声明区
%>
2.2 内置对象
2.2.1 九大内置对象
内置对象(隐含对象),就是在jsp中,不需要创建(由服务器<容器>创建),可以直接使用的对象
- out:out对象时JSPWriter类的实例,是向客户端输出内容常用的对象
类型:JSPWriter
作用:向客户端输出内容 - request:
类型:HttpServletRequest
作用:请求对象,包含了请求的信息
getParameter(“key”):获取用户提交的表单信息
setCharacterEncoding(“编码集”):设置请求编码,放置乱码
setAttribute(“key”,“value”):将数据保存到request范围内的变量
forward(String url):转发
getParameterValues(String name):返回包含参数name的所有值的数值 - response:
类型:HttpServletResponse
作用:相应对象,用来给用户进行相应
addCookie():将一个cookie对象发送到客户端
sendRedirect(String url):重定向 - session:
类型:HttpSession
作用:会话对象,用来进行数据的共享和会话的跟踪
setMaxInactiveInterVal(int num):设置session对象的有效活动的时间
invalidate():销毁当前的session - application:
类型:ServletContext
作用:全局的Servlet上下文对象,每个应用只有一个,从应用启动,就创建,指导应用消亡,对象才被释放 - config:
类型:ServletConfig
作用:Servlet配置对象,较少使用 - page:
类型:Object
作用:指的是当前jsp页面对象 - pageContext:
类型:PageContext
作用:页面的上下文,用来在一个页面中进行数据的共享和通讯 - exception:
类型:Throwable
作用:用于错误处理页面,用来收集其他页面产生的错误信息,只有isErrorPage='true’时才产生这个对象
2.2.2 四大作用域
为了在页面、请求、用户之间传递和共享数据,jsp提供了四个作用域,这些作用域规定了数据可以传递和共享的范围,以及数据存活时间
- pageContext:页面作用域
- request:请求作用域
- session:会话作用域
- application:应用程序作用域
常用方法:
1. setAttribute(key,value):
2. Object value = getAttribute(key):
3. removeAttribute(key):
4. 作用域取值方式:
1. 脚本表达式:<%=request.getAttribute() %>
2. EL表达式:${key }
2.2.2.1 作用域取值方式:
- 脚本表达式:<%=request.getAttribute() %>
- EL表达式:${key }
2.2.2.2 转发和重定向
- 转发:request.getRequestDispatcher(“页面”).forward(request, response)
- 重定向:response.sendRedirect("")
- 区别:
- 请求重定向:客户端行为。从本质上将等同于两次请求,前一次的请求对象不会保存,地址栏的url会改变
- 请求转发:服务器行为。是以此请求,转发后请求对象不变,地址栏和url不变
2.3 EL表达式
EL表达式,用于快速的从域对象中取出信息,并输出至网页.从小往大找值
- 取出字符串或基本数据类型的格式:$(key)
- 取出对象的属性:
2.4 EL运算符
- 算数运算
- 关系运算
- > gt
- >= ge
- < lt
- <= le
- == eq
- != ne
- 逻辑运算
- && and
- || or
- ! not
- 三元运算
- 特殊运算
- empty:判断EL表达式中的表达式是否成立
2.5 jsp六大动作
- include
- <jsp:include page=“引用文件的地址” flush=“false”></jsp:include>
- 作用:引入jsp文件,在转换时期没有被引入,只有当执行到include代码位置的时候,才会动态编译载入
- useBean
- <jsp:useBean id=“别名” class=“包名.类名” scope=“作用域”></jsp:useBean>。指向java对象,需要先创建类对象
- setProperty
- <jsp:setProperty property=“属性名称” name=“别名” value=""/>
- getProperty
- <jsp:getProperty property=“属性名称” name=“别名”/>
- forward
- <jsp:forward page=“转发”></jsp:forward>
- param
- <jsp:param value=“转发参数” name=""/>
<jsp:forward page="转发">
<jsp:param value="转发参数" name=""/>
</jsp:forward>
在转发页面获取值
${param.name }
2.6 include指令与include动作的区别
- include动作在转换为Java文件时,引入的文件不会被编译,只有客户端请求到生成的servlet文件时,才会被动态编译载入
- include指令是在jsp程序的转换时期,将引入的文件内容嵌入,然后统一进行编译
三、 Servlet
3.1 简介
- Servlet就是运行在服务器Tomcat上的Java程序
- Serlvet用来处理客户端的请求,以及负责对客户端的响应
- Servlet默认是单例模式,每次用户访问都是开启一个新线程,调用service方法处理。
3.2 使用Servlet
- 先引入servlet-api.jar
- 编写Java类,继承HttpServlet
- 重写service(request, response)方法
- 在service方法中处理请求,以及进行响应
3.3 Servlet配置到web.xml
配置到web.xml的作用:让tomcat帮我们创建对象,并映射地址,当地址匹配,由tomcat调用这个对象的service方法进行处理
- 将servlet配置到web.xml并起别名
<servlet>
<servlet-name>任意标识符</servlet-name>
<servlet-class>类的全称(包名+类名)</servlet-class>
</servlet>
- 根据别名,映射一个网址
<servlet-mapping>
<servlet-name>与第一步标识一致</servlet-name>
<url-pattern>/地址</url-pattern>
</servlet-mapping>
“/地址的替换”
1. /:拦截没有后缀的请求
2. /*:拦截所有请求
3. *.do:拦截所有以.do结尾的请求
3.4 常用方法
- request.setCharcterEncoding(“UTF-8”)
- request.getParameter("")
- request.getParameterMap():请求接受参数,封装到map中,通过map.get(key)获取
- request.setAttribute(“key”,value):将数据设置到request作用域中
- request.getRequestDispatcher().forward():转发
- request.getSession()
- request.getServletPath():获取servlet请求路径
- response.setCharacterEncoding(“utf-8”)
- response.sendRedirect():重定向
- response.getWriter()
- response.setContentType(“text/html;charset=UTF-8”):设置响应类型
- response.getWriter()
3.4 servlet生命周期
- init:初始化
- service:服务
- destroy:销毁
- GC回收
3.5 get和post
- get请求
- 请求地址在url中以键值对的形式拼接
- 传输数据量小
- 不安全
- post请求
- 请求的数据存在于请求体中
- 传输数据量大,如视频
- 较安全
- get乱码:
new String(username.getBytes(“ISO-8859-1”),“utf-8”);
四、 session
4.1 什么是session
服务器端为了保存用户的状态而创建的一个特殊对象
4.2 获取session对象
- request.getSession(boolean flg)
4.3 常用方法
- session.setArrtribute(String name, Object obj)
- session.getArrtribute(String name)
- session.removeAttribute(String name)
- session.invalidate():将session设置为失效,一般在退出时使用,但要注意的是:session失效的同时 浏览器会立即创建一个新的session的,你第一个session已经失效了 所以调用它的getAttribute方法时候一定会抛出NullPointerException的
五、 cookie
5.2 cookie使用
Cookie uname = new Cookie();
cookie如果存中文必须设置编码,因为cookie不能存储中文,否则报错
URLEncoder.encode(值,编码)
5.3 cookie和session的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上
- cookie不是很安全,别人可以分析存放在本地cookie并允许cookie欺骗
- session会在一定时间内保存在服务器上
- 单个cookie保存数据不超过4k,很多浏览器限制一个站点最多保存20个cookie
- 建议:登录信息放在session其他信息如果需要保留放在cookie中
六、 过滤器 Filter
七、 监听器
八、 web项目
8.1 错误码
- 200:成功,客户端请求成功
- 404:找不到资源
- 500:浏览器请求服务器,服务器处理错误(代码书写错误)
- 505:http版本版本不受支持
8.2 Javaweb项目读取properties配置文件
- 方式一:
8.3 web三大组件
Servlet、Filter(过滤器)、Listener(监听器)
- 过滤器
- 通过过滤器技术,对web服务器管理所有web资源:如jsp、servlet、静态图片、文件、静态html进行拦截,从而实现一些特殊的功能,如使用url级别的权限访问控制、过滤敏感词汇、压缩相应信息等一些高级功能
- 使用:
- 编写一个类,实现filter接口
- 在web.xml中进行配置拦截地址
<filter>
<filter-name> </filter-name>
<filter-class> </filter-class>
</filter>
<filter-mapping>
<filter-name> </filter-name>
<url-pattern> </url-pattern>
</filter-mapping>
- 监听器
- web监听器是servlet中特殊的类,能帮助开发者监听者监听web中的特定事件,如:ServletContext、HttpSession、ServletRequest的创建和销毁、变量的创建和销毁和修改,可以在某些动作前后增加处理,实现监控
- 用途:
- 统计在线人数 利用HttpSessionListener
- 加载初始化信息 利用ServletContextListener
- 统计网站访问量 利用ServletContext
ServletContext监控:实现ServletContextListener接口
HttpSession监控:实现HttpSessionLinstener接口
ServletRequest:实现ServletRequestLinstener接口
- 使用监听器
- 创建监听器,实现某种接口
- web.xml配置监听器
<listener>
<listener-class> <listener-class>
</listener>
- 在jsp中添加操作
九、 xml
- web.xml文件是用来初始化配置信息:
比如welcome页面、servlet、filter、listener、servlet-mapping、启动加载级别等
十、 Ajax
10.1 Ajax概念和原理
- Ajax是一组原有技术的综合运用,涉及如下技术:
- 以XMLHttpRequest为核心发送请求和接受响应
- 以JavaScript为基础使用XMLHttpRequest
- 以XML或JSON作为数据交互格式
- 以HTML和CSS作为数据展现(渲染)
10.2 Ajax作用和优点
- Ajax交互(异步)和传统交互(同步)区别
- 请求的发送和接受:
传统:浏览器直接发送HTTP请求,然后由浏览器直接接受服务器返回的结果,直接呈现在浏览器页面上
Ajax:浏览器利用js调用XMLHpptRequest对象发送HTTP请求,然后利用XMLHpptRequest接受服务器的返回结果,然后需要利用js将结果显示到浏览器页面 - 区分Ajax请求和传统请求:
请求的Header格式不同,Ajax请求会在请求Header部分多一组参数值“x-requested-with:XMLHttpRequest”,如果存储该参数就可以认为是Ajax - 服务器响应结果不同:
传统:服务器一般会调用Servlet或JSP生成一个HTML界面给浏览器,然后浏览器显示
Ajax:服务器一般调用Servlet处理,然后生成一个JSON或者xml字符串给XMLHttpRequest - 页面刷新:
传统:整个页面刷新
Ajax:局部刷新 - 同步和异步
传统:同步交互- 请求1–>响应1–>请求2–>响应2
Ajax:异步交互- 请求1–>请求2–>响应1–>响应2
10.2.1 Ajax作用和优点
- 作用:
- 页面局部刷新处理
- 页面不改变,异步请求和响应
- 优点:
- 用户操作更连续,提高用户体验
- Ajax交互传输数据量较小,提升程序性能
- 异步处理,可以进行异步加载和请求处理
- 减少整个页面刷新率
10.2.2 Ajax使用
- 创建XMLHttpRequest对象,发送请求(客户端js编程)
function sendRequest(){
//创建XMLHttpRequest对象
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest(); //支持chrom,IE7、8、9
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP"); //支持IE5、6
}
//创建http请求
xhr.open("get","hello.do",true);
//发送Ajax请求
xhr.send(null);
}
- 服务器端处理Servlet/JSP(服务端Java编程)
- 解析服务器返回数据结果,显示到页面(客户端js编程)
//创建http请求
xhr.open("get","hello.do",true);
//设置回调处理函数
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){ //判断请求成功
var msg = xhr.responseText; //获取服务器返回的字符串信息
//操作
}
}
//发送Ajax请求
xhr.send(null);
10.3 jQuery的Ajax
十一、 JSON
11.1 JSON概念和基本使用
- JavaScript Object Nitation是JavaScript对象格式,属于JavaScript语言数据格式
- 格式:{“key”:value,“key”:value}
key是字符串,value是任意类型
访问value可以使用变量.key获取
11.2 JSON字符串转化为json对象
- 方法一:JSON.parse(字符串)
- 方法二:var obj_data = eval("("+data+")");
11.3 将Java对象转换为JSON字符串
- 方法一:使用gson.jar工具包
Gson gson = new Gson();
String data = gson.toJson(obj);
- 方法二:使用json-lib.jar工具包
- 单个Java对象
JSONObject json = JSONObject.fromObject(obj);
String strng = json.toString();
- Java集合
JSONArray fromObject = JSONArray.fromObject(list);
String strng = fromObject.toString();
十三、 文件上传
项目一:员工管理系统(仿)
项目二:图书管理系统(按上例流程独立完成)–问题解决
1. 步骤
参考上个案例总结
- 页面信息分析(功能、内容)(不是真页面,只是看有什么)
- 数据库设计
- 项目分析
- 使用技术
- 需要jar包
- 规划包
- 规划web.xml
- 创建servlet,规划请求
- 在需要的时候编写工具类
- 实现之前规划的各请求
2. 页面(http为模板)
1.1 http/jsp
- span:对元素进行分组
- section:定义文档中的节
- nav:用来作为页面导航的连接组,其中的导航元素连接到其他页面或当前页面的其他部分,并不是所有的连接组都要别放进nav元素
- strong:和标签一样,用于强调文本,但它的强调程度更强
- label:为input元素定义标注,不会向用户呈现任何特殊效果,不过,为鼠标用户改进了可用性:在label元素内点击文本,就会触发次控件,就是说,当用户选择改标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
- for属性可把label绑定到另一个元素。请把for属性的值设置为相关元素的id属性值。
- form表单:
- enctype="multipart/form-data"属性:只对要上传文件的表单有效,通过实例化对象获取文件和表单提交数据;当表单中没有文件时使用该属性,则所有表单提交数据为null
1.2. js
3. servlet
- 登陆时为什么要session参数?
答:session作用域为一次会话有效,通过session的参数可以在登陆后实现jsp页面“xxx,您好”功能