这里设置的编码有没有重复 有什么不同??pageEncoding是jsp文件本身的编码 编译器的编码方式contentType的charset是指服务器发送给客户端时的内容编码 浏览器的解析方式..._接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现">
赞
踩
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>这里设置的编码有没有重复 有什么不同??
pageEncoding是jsp文件本身的编码 编译器的编码方式
contentType的charset是指服务器发送给客户端时的内容编码 浏览器的解析方式
el表达式可以插入到jsp页面的哪些地方?
这里的el值可以是看成一个变量值, 可以放在
js中 ,HTML页面中都可以
与jstl一起使用,判断(布尔表达式),遍历(对象的集合)
作为参数传入到后台(变量或是对象)
前台传入到后台的传入值需要考虑的问题:
前台:传到后台:json 数据的形式 ,表单,变量的形式
接受:ajax获得的json类型的数据 el表达式
后台:接受:通过request(HttpServletRequest) 的方法获得
传到前台:通过response对象把数据(json类型的数据,字符串)写到response缓冲区中然后被Tomcat引擎包装成响应。(存入到域
HttpServletRequest和ServletRequest的区别以及HttpServletRequest对象方法的用法???
答:Java中HttpServletRequest接口是ServletRequest子接口,HttpServletRequest接口遵循http协议。
相比于HttpServletRequest接口,ServletRequest的应用范围更加广泛,HttpServletRequest只适合在web开发中的http协议的请求,而
ServletRequest则没有具体要求。
HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。 例如:
getHeader(), getMethod() , getSession() (获得session对象只能通过HTTPservletrequest对象获得)
URL与URI的区别 服务器的地址与客户端地址的区别???
getRequestURL方法返回客户端发出请求时的完整URL。(有HTTP协议头 ,有服务器的主机名和端口号)
getRequestURI方法返回请求行中的资源名部分。(没有上面这些 )
客户端地址:带项目名(重定向)
服务器端地址:不带项目名(转发)
frame 响应式框架(用于后台管理,不过网页的大小只能是你屏幕的大小)
- <!DOCTYPE html>
-
- <html>
-
-
-
- <frameset rows="15,70%,15%">//把页面占据化成多少个部分,每个部分页面的比例
-
- <frame src="header.html" />
-
- <frame src="center.html" />
-
- <frame src="footer.html" />
-
- </frameset>
-
-
-
- </html>
-
-
-
- iframe(要设置大小 是否需要有滚动条) 作用就是一个网页中加载一个网页)(头和尾)
-
-
-
- 可以让IFrame随着嵌入页面的内容大小自动调节大小而不出现滚动条
-
- <script type="text/javascript">
-
- iFrameResize({
-
- log : true, // Enable console logging
-
- enablePublicMethods : true, // Enable methods within iframe hosted page
-
- });
-
- </script>
-
-
-
- <iframe src="http://anotherdomain.com/frame.content.html" width="100%" scrolling="no"></iframe>

面向对象与面向过程的区别
说说你对面向对象三个特性的理解(封装,继承,多态)举例说明
封装:就是某些方法封装起来 程序员主要需要知道 输入参数,输出类型 方法的功能就可以了。我们使用的框架或是某些工具的时候需要导入jar包 你们就是一些写好功能的类,这些类被封装起来,需要的时候只需要调用。类中的方法就可以了。
继承:继承父类 就是有了这个类的方法和字段 属性 同时可以方法的增强。
多态:一个接口可以被多个类实现。。 方法的重载
接口和抽象类的区别:
1、抽象类和接口都不能直接实例化,如果要实例化,
2、抽象类要被子类继承,接口要被类实现。
3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口
的时候,如不能全部实现接口方法,那么该类也只能为抽象类。(不怎么会用到)
6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
7、抽象类里可以没有抽象方法
8、如果一个类里有抽象方法,那么这个类只能是抽象类
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。(抽象方法不能静态,不能私有。)
10、接口可继承接口,并可多继承接口,但类只能单根继承。
类中的方法名和成员变量设置不一样的权限,
抽象方法的类就是抽象类 子类继承的时候一定要重写抽象方法
接口的所有方法都是静态方法。
继承:
把父类抽象类与接口区分开来
分类除了用final修饰的类其他;类都可以作为父类,调用子类的方法没有的时候回调用父类的方法(因为继承了父类其实就是把父类的
方法和成员变量都给了子类 写了extends 某个类就拥有了这个类所有的成员变量和方法)
多态:
一个接口 被多个类实现
方法的重载
private,prodect,public的使用
注意 private 和protect不能修饰类
private(本类)、protect(该包,和继承的类),public(该项目的所有类)、default(该包下)
字段往往设置为私有(pojo中) 成员变量和方法设置为public
jdk jvm jre 的区别,和分别的作用是什么???
jre java运行环境(java命令(执行.class文件))
jdk Java的开发环境(包含jre 多了一些命令 Javac(把Java文件转成.class文件))
jvm Java虚拟机(把.class文件转成二进制文件)
异常和错误的区别??什么时候会出现错误什么时候会出现异常??说说你对异常的理解???
错误是非程序错误,有可能是硬件(内存不足out of memory就是虚拟机空间),断电,或者其他非通过程序可解决的错误叫error,一般
能通过程序解决的叫异常
异常如果不处理那么全都都会由Java虚拟机来处理。 处理就是调用异常的某些方法 .getMessage() e.printStackTrace
(printStream/printWriter);
处理异常的作用就是当程序出问题的时候找到问题的所在。
某些类的方法调用的时候就会出现异常提示需要你进行处理 ,不出来,Java虚拟机就会帮你处理(jdbc 中的 NullPointerException,
IOException、SQLException) (如果出现异常不知道怎么处理可以百度某种经常出现的原因。
)
throw 与throws的区别:
一个写在方法中 一个写在方法体中 其实意义都是一样的 调用这个方法的的调用者来处理异常
- public static void main(String[] args) {
-
- // TODO Auto-generated method stub
-
- String s = "abc";
-
- if(s.equals("abc")) {
-
- throw new NumberFormatException();
-
- } else {
-
- System.out.println(s);
-
- }
-
- }
-

在开发的过程中良好的编程习惯有哪些
1. 命名规范,有意义 多写注释。
2,少用空格 多用tab(快速对齐)
3.自己写完的代码要多做测试
做测试:
前台web层的测试 dao层的测试 service 中的功能测试
堆存储与栈存储的区别 new的对象在堆中 什么类型的数据放在堆栈中???
参看博客:https://blog.csdn.net/chensi16114/article/details/72867260
1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等
2 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。
除了这两部分,还有一部分是:
3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。
value写好,用户操作了哪个就会传入哪个(radio,CheckBox select)
- <select name="is_hot">//传入到后台是value是你选中的值,而name=is_hot 显示是、否
-
- <option value="1">是</option>
-
- <option value="0">否</option>
-
- </select>
-
-
-
- radio:CheckBox也是一样(radio命名为同一name value为选中的值,CheckBox也是命名为同一个name value为选中的的值)
-
- <label for="inlineRadio1" class="col-sm-2 control-label">性别</label>
-
- <div class="col-sm-6">
-
- <label class="radio-inline">
-
- <input type="radio" name="sex" id="sex1" value="male" >
-
- 男
-
- </label>
-
- <label class="radio-inline">
-
- <input type="radio" name="sex" id="sex2" value="female">
-
- 女
-
- </label>
-
- <label class="error" for="sex" style="display:none ">您没有第三
-
- 种选择</label>
-
- </div>
-
-
-
- 传入到后台是用户输入的值(之前没有写好)text,password date file
-
- <input type="text" name="pname" value="" id="userAction_save_do_logonName" class="bg"/>
-
- //传入到后台的是:name=就是属性name的值, value=用户输入的信息
-
-
-
- <input type="date" class="form-control" name="birthday">出现的是一个date日期控件 value是用户选中值
-
- ServletContext context = this.getServletContext();//this指的的servlet吗?

map的遍历
Map<String, String[]> parameterMap = request.getParameterMap();
for(Map.Entry<String, String[]> entry:parameterMap.entrySet()){//map集合的遍历方式就是这样的
System.out.println(entry.getKey());
for(String str:entry.getValue()){
System.out.println(str);
}
八进制和十六进制的意义:
(十六进制中的一位表示四位二进制 十六进制的写法举例Ox1313 (常用) 八进制的一位表示三位
二进制O45 注意前面的是数字零 不是字母O )
二进制数是计算机进行计算的基本进制,它能方便地通过0和1两种状态表示各种数值,这使得逻辑电路的设计简洁。八进制和十六进制对
二进制的转换十分方便,同时又能将较大的二进制数以较短的字数来表示,便于人们书写和记录,所以使用八进制和十六进制来表达二进制数。
length() 与length
str.length()都是表示字符的长度。 一个数字,字母,中文都表示一个字符(Unicode的编码方式是这些都是占用两个字节,但是UTF-8 数字字母只占一个字节 中文占用三个字节)
Array.length 数组单元的个数
字节与字符
一个字节有八位,但是一个字符可以是一个或是多个字节
一个中文占用字节数可能是2个、3个、4个字节。不同的编码格式占字节数是不同的,
编码方式:就是对于字母,数字 字符如何表示弄成二进制的表 有些只支持英文 字母,数字 有些支持中文,全世界的字符
ASCII码---非ASCII编码(GB2312支持中文)--Unicode(世界上的所有字符 字符长度不变)--UTF-8长度(在Unicode的基础上 字符
长度可变)。
有关乱码的问题:
前台传给服务器不出现乱码问题:(注意Tomcat使用的码表默认是ISO8859-1. )
post:request.setCharacterEncoding(“UTF-8”);//post 方式
乱码问题通用的解决办法:
get/post都可以(不过post不常用因为每个字符这是增对单个字符串的编码解码方式):
parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);//对字符串进行iso8859-1编码,utf-8解码。
服务器传给前台不出现乱码问题:
response.setContentType("text/html;charset=UTF-8");//告诉Tomcat使用什么方式编码,并告诉浏览器使用什么方式解码
数据库中的字符集其实就是设置数据库的编码方式(保证服务器传入数据库的数据/或是导入到数据库中的数据 可以正常的显示)
编码和解码的区别
编码是把高级语言或代码 转成二进制的代码
解码把二进制的代码转成高级语言获得代码
String与stringbuffer的区别
String定长的字符串, stringbuffer表示不定长的字符串 string主要方法用于查询字符,但是stringbuffer可以对字符进行增删改
String 转StringBuffer
String temp="fsfs";
StringBuffer sb = new StringBuffer(temp);
Stringbuffer 转String类型的数据
sb.toString()
System/Math /Random这些对象主要的方法??
- System类
-
- 包含一些有用的类字段和方法。它不能被实例化。
-
-
-
- 字段(成员变量):
-
-
-
- in
-
- “标准”输入流。
-
- out
-
- “标准”输出流。
-
-
-
-
-
- 常用的方法:
-
- public static void gc()
-
- 运行垃圾回收器。
-
-
-
- public static void exit(int status)
-
- 终止当前正在运行的 Java 虚拟机。参数用作状态码; 一般情况,需要终止Jvm,那么参数0
-
-
-
- public static long currentTimeMillis()
-
- 返回以毫秒为单位的当前时间
-
- 单独使用,没有意义。一般情况,来测试一段代码的执行效率
-
-
-
- public static void arraycopy(Object src,int srcPos, Object dest,int destPos, int length)
-
- 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
-
- src:原数组
-
- dest:目标数组
-
- srcPos :从原数组的哪个位置开始
-
- destPos:到目标数组的哪个位置结束
-
- length:长度
-
-
-
- Math用于求比较数的大小 ,进位,四舍五入
-
- Random 随机产生某个数字

集合ArrayList LinkedList,HashSet . HashMap 主要的方法,分别在什么情下使用以及的Intertor区别之间的转换
ArrayList 元素有放入顺序,元素可重复 用于查询效率高
LinkedList 元素有放入顺序,元素可重复 用于增加和删除效率高
HashSet 元素无放入顺序,元素不可重复
另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。
HashMap 键值对
多种输入输出流之前的区别,分别什么时候使用 文件拷贝 上传下载 获得文件信息的方法(文件上传下载)
File类是IO包中唯一代表磁盘文件本身的对象。通过File来创建,删除,重命名文件。File类对象的主要作用就是用来获取文本本身的一
些信息。如文本的所在的目录,文件的长度,读写权限等等。(有的需要记忆,比如isFile(),isDirectory(),exits();有的了解即可。
主要方法:
File(String pathname):根据一个路径得到File对象
public boolean isDirectory():判断是否一个文件夹
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
字节流 字符流
inputStream/outStream (利用数组) Reader/Writer(利用字符串)
jdk在安装完之后需要配置三个变量,这三个变量分别是在配置什么东西???
- 1 创建JAVA_HOME,值是你的刚刚jdk的安装目录,比如 C:\Program Files (x86)\Java\jdk1.8.0_101
- 2 创建CLASSPATH,值是 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
- 3 编辑Path,把值放到最前边 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
我们学习的request和response是HttpServletRequest 和HttpServletResonse
不是没有HTTP的 但是在过滤器中 和service ,方法中的都是不带HTTP的,如果需要获得请求或是设置
响应的信息需要强转成带HTTP的
浏览器设置下载文件的编码可以在客服端设置吗 友好的话还是要在服务器端设置.....
jsp中的page指令
errorPage:当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面(一起使用,出错是什么情况页面展示不出来? 出现异常的时候)
引用类型与基本类型的区别,
变量就是一个房间的房号,值类型房间里面是本人,引用类型里面住的是本人的秘书,要找到本人,必须通过本人的秘书
值类型的变量放在栈内存中,引用类型的值放在堆中但是地址在栈中
常量池
(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
看例1:
- String s0=”punkll”;
-
- String s1=”punkll”;
-
- String s2=”punk” + “ll”;
-
- System.out.println( s0==s1 );
-
- System.out.println( s0==s2 );
-
- 结果为:
-
- true
-
- true
-
- 首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。
-
- 因为例子中的s0和s1中的”punkll”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”punk”和”ll”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”punkll”的一个引用。
-
- 所以我们得出s0==s1==s2;
-
- 用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。

看例2:
- String s0=”punkll”;
-
- String s1=new String(”punkll”);
-
- String s2=”punk” + new String(“ll”);
-
- System.out.println( s0==s1 );
-
- System.out.println( s0==s2 );
-
- System.out.println( s1==s2 );
-
- 结果为:
-
- false
-
- false
-
- false
-
- 例2中s0还是常量池中”punkll”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”punkll”的引用,s2因为有后半部分new String(“ll”)所以也无法在编译期确定,所以也是一个新创建对象”punkll”的应用;明白了这些也就知道为何得出此结果了。
-
-
-
- ==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不一定为true
-

声明 赋值 引用
声明:在栈中创建了一个指针
赋值:指针和堆中的一个实体绑定关系
引用:通过指针调用实体
== 和equals的区别
== 和equals在引用类型中才有区别 在数值类型中没有区别
引用类型与值类型
引用类型:对象的内容是放在堆中的,指针放在栈中
值类型:内容直接就在栈中
new出来的变量地址是不一样的,直接声明的变量的地址是一样的
var a = 10;
var b = a;
b = 20;
console.log(a); // 10值
var obj1 = new Object();
var obj2 = obj1;
obj2.name = "我有名字了";
console.log(obj1.name); // 我有名字了
解析properties文件
/**
* 静态代码块加载配置文件信息
*/
//通过类加载器获取资源传入输入流中 用properties对象获取加载到流资源,在通过相关的方法获取到流中的信息
//properties对象只能加载properties中的配合信息。。。
static {
try {
// 1.通过当前类获取类加载器
ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();
// 2.通过类加载器的方法获得一个输入流
InputStream is = classLoader.getResourceAsStream("db.properties");
// 3.创建一个properties对象
Properties props = new Properties();
// 4.加载输入流
props.load(is);
// 5.获取相关参数的值
driver = props.getProperty("driver");
url = props.getProperty("url");
username = props.getProperty("username");
password = props.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取连接方法
*
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
解析xml文件的方法:
Java中常用解析xml文件的方法:Sax (一遍扫描一遍解析)(simple API for XML),pull(常用在安卓开发中),doM(先全部加载在解析)文档对象模型(Document Object Model,简称DOM)
常用的解析开发包:
Jaxp(dom 和sax解析),jdom jsoup(处理HTML特定解析开发包),dom4j(hibernate)
1.继承重写某个方法:
2.动态代理
JDK的Proxy动态代理:(实现统一的接口 通过反射的原理)
1.目标对象:
2.通过目标对象获得代理对象(在匿名内部类中进行方法的增强)
TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(
target.getClass().getClassLoader(), //获得类加载器
target.getClass().getInterfaces(), //实现同一接口
new InvocationHandler() { //InvocationHandler()用于增强方法的匿名内部类
@Override
//被执行几次?------- 看代理对象调用方法几次
//代理对象调用接口相应方法 都是调用invoke
/*
* proxy:是代理对象
* method:代表的是目标方法的字节码对象
* args:代表是调用目标方法时参数
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//反射知识点
Object invoke = method.invoke(target, args);//目标对象的相应方法
//retrun返回的值给代理对象
return invoke;
}
}
);
3.通过代理对象相关的方法
Cglib代理:(继承同一个类)
4.装饰者模式:
举例:
假设要制造添加甜蜜素和着色剂的馒头:
1.需要生产一个正常馒头
2.为节省成本(不使用玉米面),使用染色剂加入到正常馒头中
3.和面,最后生产出染色馒头
一..先实现做面包的接口
IBread接口包括准备材料,和面,蒸馒头,加工馒头(即调用前面三个步骤)
二.制作正常馒头(普通的馒头,正常的馒头)
三.定义出制作面包的抽象类(要传入正常面包)
抽象类实现了IBread这个制作面包的接口,同时包含IBread接口的实例
对应上述的第2个注意点:装饰者类内有一个真实对象的引用
四.生产有着色剂的"玉米馒头"(装饰二)
继承AbstarctBread类,所以可以有选择的覆盖正常生产馒头的方法,并添加原有方法原来的信息,同时也可以添加自己的方法
五.生产有甜蜜素的"甜馒头"(装饰一)
实现与第四部一样
六.开始制作添加甜蜜素和着色剂的馒头(做好吃的馒头)
public class Client {
4
5 public static void main(String[] args) {
6
7 System.out.println("=======开始装饰馒头");
8 IBread normalBread = new NormalBread();
9 normalBread = new SweetDecorator(normalBread);
10 normalBread = new CornDecorator(normalBread);
11 normalBread.process();
12 System.out.println("=======装饰馒头结束");
13 }
14 }
Xml文件的标签是可以任意取名的, 但是如果引用了约束就只能使用约束规定的的标签
Dtd约束
这个约束可以是在本地的电脑里(本地dtd),也可以是在网络上 (外地dtd)(需要连接网络 使用普遍 框架也是使用这个(struts2 ,hibernate) 不连网的话需要把dtd约束导入到eclipse中)
Schema约束(spring)
有网的话只需要导入头部信息就可以了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。