零散知识
-
查看系统: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,您好”功能