1, 你怎么理解web开发?
前端请求和后台处理数据,并返回数据,响应给服务器
2, 什么是B/S,什么是C/S?
B/S最大优势为客户端免维护,适用于用户群庞大,或客户需求经长发生变化的情况.
C/S功能强大,可以减轻服务器端压力,如果用户的需求特别复杂,用C/S.
Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的.
3, 在一次浏览器的请求/响应过程中,请描述浏览器和服务器都做了什么?
建立TCP连接,Web浏览器向Web服务器发送请求命令,Web浏览器发送请求头信息,Web服务器应答,Web服务器发送应答头信息,Web服务器向浏览器发送数据,Web服务器关闭TCP连接
4, 你知道有哪些服务器端的语言?你知道有哪些web的服务器软件?
服务器端的语言:ASP.NET, JSP, PHP, python
嵌入式HTTP服务器:运行在消费者产品上
通用软件HTTP服务器:(Apache、Nginx、Tomcat、IIS)运行在标准的,有网络功能的计算机系统上
5, 你知道Java的web服务器软件有哪些?
Tomcat、Jetty、Weblogic、WebSphere
后两个是企业级应用的服务器
6, 你知道Java的web开发技术主要建立哪些技术的基础上?
Css,html,js,json,ajax
7, 你知道tomcat与servlet的关系吗?
Tomcat是一个免费开源的Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.
而Servlet是一种运行在支持Java语言的服务器上的组件.
8, 你知道servet与jsp的关系吗?
Jsp实际上就是一个Servlet,
9, 请说出servlet的生命周期。
Servlet的生命周期:
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
10, 请说出servlet是单实例的还是多实例的?一个servlet如何支持很多个客户端请求的 ?
每一个servlet都是单例模式,并且通过多线程,来处理多个用户的响应。
可以通过传递参数method,来选择请求的不同方法。
11, 你知道常用的客户端开发语言都有哪些?他们是如何被执行的?
Java、c#、c++
12, 你知道在tomcat中部署一个web项目,有几种方式吗?
tomcat中三种部署项目的方法
第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:
<Context path="/hello" docBase="D:eclipse3.2.2forwebtoolsworkspacehelloWebRoot" debug="0" privileged="true">
</Context>
第二种方法:将web项目文件件拷贝到webapps目录中。也可以将JSP程序打包成一个war包放在目录下,服务器会自动解开这个war包,并在这个目录下生成一个同名的文件夹。
第三种方法:很灵活,在conf目录中,新建Catalina(注意大小写)\localhost目录,在该目录中新建一个xml文件,名字可以随意取,只要和当前文件中的文件名不重复就行了,该xml文件的内容为:
<Context path="/hello" docBase="D:eclipse3.2.2forwebtoolsworkspacehelloWebRoot" debug="0" privileged="true">
</Context>
13, 你知道一个标准的Java的web项目要包括哪些必须的元素?
src:其中是java源文件
WebContent:其中的WEB-INF中的lib目录下,是项目使用的jar包
web.xml配置文件,主要是对该web项目的默认欢迎页面、servlet、filter、listener、进行配置
14, 什么是cookie,cookie能做什么?
cookie是在浏览器访问web服务器的某个资源时,有web服务器在http响应头中福袋传送给浏览器一个小文本文件
一旦web浏览器保存了某个cookie,那么他以后每次访问该web服务器是,都会在http请求头中将这个cookie回传给web服务器
15, 什么是session,session能做什么?
它是保存在服务器的一个标识,可以保存用户信息
16, Cookie和session的关系是什么?
session是由一个cookie存起来的
17, 转发和重定向的区别是什么?
转发:客户端只有一次请求,服务器端转发后会将请求对象保存,地址栏中的URL地址不会改变,得到响应后服务器端再将响应发给客户端
重定向:地址栏的URL地址会改变
18, 在web开发中,什么时候用“/”来表示项目的根路径,什么时候又需要加上项目的上下文?
若/需由Servlet容器来处理时:(请求转发时,web.xml.文件中映射Servlet访问路径)------>代表当前web项目的根路径
若/由浏览器处理(超链接、表达式的action、response.sendRedirect:请求的重定向)------>代表web站点的根路径
19, Request.getParameter()与Request.getParameterValues()各有什么作用?
获取请求参数
getParameterValues():获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量
getParameter():是获得相应名的数据,如果有重复的名,则返回第一个的值
20, Request能获取哪些信息?
请求转发request.getRequestDispatcher().forward()
21, Response能做什么?
请求的重定向response.sendRedirect()
22, 怎么解决web开发的中文乱码问题?请分别从请求、响应的角度说明。
请求:
Get请求:
String val= request.getParamter(“username ”);
String username = new String(val.getBytes(“iso-8859-1”),”utf-8”);
Out.print(username);
Post请求:
Requset.setCharacterEncoding(“utf-8”);
响应:
response.setContentType("text/html;charset=utf-8");
23, Get请求与post请求有什么区别?
Get请求:提交的信息都显示在地址栏中;对于敏感的数据信息不安全;对于大数据不可,因为地址栏存储体积有限;将信息封装到了请求消息的请求行中。
Post请求:提交的信息不显示在地址栏中;对于敏感信息安全;可以提交大体积数据;将信息封装到了请求体中
24, Request.getParameter()与request.getAttribute()有何不同?
Request.getParameter():返回的是字符串;
request.getAttribute():返回一个对象
25, Web开发中page\request\session\application四个作用域有何不同?
Page:属性的作用范围仅限于当前JSP页面
Request:属性的作用范围仅限于同一个请求
Session:属性的作用范围仅限于一次会话:浏览器打开到关闭称为一次会话。(在此期间会话不会失效)
Application:属性的作用范围限于WEB应用,是最大范围的属性作用范围
Page、request、session、application(对属性的作用域的范围从小到大)
26, Web.xml有什么作用?里面都能配置哪些东西?
配置文件
web.xml配置文件,主要是对该web项目的默认欢迎页面、servlet、filter、listener、进行配置
27, 什么是MVC?
M:model-->dao层
V:view -->view。Jsp,在页面上填写java代码实现显示
C:Controller-->Servlet:
1. 受理请求
2. 获取请求参数
3. 调用dao层方法
4. 可能会把dao方法的返回值放入request中
5. 转发(或重定向)页面
28, JSP有多少内置对象?分别有什么作用?
九大隐含对象:
Request:为HttpServletRequest对象
Response:为HttpServletResponse对象
pageContext:页面的上下文。是PageContext的一个对象
session:代表浏览器和服务器的一次会话,是HttpSession的一个对象
application:代表当前WEB应用,是ServletContext对象
config:是ServletConfig对象,是当前JSP对应的Servlet的ServletConfig对象。
out:JSPWriter对象,调用out.println()可以直接把字符串打印到浏览器上
page:指向当前JSP对应的Servlet对象的引用,但是为Object类型,只能调用Object方法
exception:只有在声明了<%@ page isErrorPage=”true”%>时才可以使用
29, JSP的三大指令,7大动作?
一、三大指令:
1、page: 该指令是针对当前页面的指令。
2、include: 用于指定如何包含另一个页面。
3、taglib: 用于定义和访问自定义标签。
二、七大动作:
1、forward: 执行页面转向,将请求的处理转发到下一个页面。
2、param: 用于传递参数,必须与其他支持参数曲标签一起使用。
3、include: 用于动态引入一个 JSP 页面。
4、plugin: 用于下载 JavaBean 或 Applet 到客户端执行。
5、useBean: 使用 JavaBean。
6、setProperty: 修改 JavaBean 实例的属性值。
7、getProperty: 获取 JavaBean 实例的属性值
30, Xml文件有什么特点?有什么优点?
“可扩展标记语言”(XML) 提供一种描述结构化数据的方法。与主要用于控制数据的显示和外观的 HTML 标记不同,XML 标记用于定义数据本身的结构和数据类型。
特点:1.内容与形式分离;2.易扩展;3.易移植;
轻量级的数据储存文件
优点:1)XML文档的内容和结构完全分离,2)互操作性强,3)规范统一,4)支持多种编码,5)可扩展性
31, Xml文件的解析,在Java的jdk中提供里几种方法?他们有何不同?
DOM解析
优点:
1)形成了树结构,直观易于理解,代码更易编写。
2)解析过程中树结构保存在内存中,方便修改
缺点:
1)当XML文件较大的时候,最内存耗费比较大,容易影响解析性能并且可能会造成内存溢出。
SAX
优点:
1)不需要等待所有数据都被处理,分析就能立即开始。
2)只在读取数据时检查数据,不需要保存在内存中。
3)可以在某个条件得到满足时停止解析,不必解析整个文档。
4)效率和性能较高,能解决大于系统内存的文档。
缺点:
1)需要应用程序自己负责TAG的处理逻辑(例如维护父子关系等),文档越复杂程序就越复杂,即不易编码。
2)单向导航,很难同时访问同一个XML中的多处不同数据。
JDOM
优点:
1)使用具体类而不是接口,简化了DOM的API。
2)大量使用了Java集合(Collections)类,方便了Java开发人员。
缺点:
1)没有较好的灵活性。2)性能较差。
DOM4J。
优点:
1)大量使用了Java集合类,方便Java开发人员,同时提供一些提供性能的替代方法。
2)性能优异、灵活性好、功能强大和易用的特点。
缺点:
1)大量使用了接口,API较为复杂。
32, Dom4j和xpath是做什么的,有什么作用?
33, 什么是自定义标签?有什么作用?
自定义标签是用户定义的JSP语言元素。
是jsp页面整洁,没有java代码的出现
34, 传统的自定义标签和简单自定义标签哪个开发更简单?
简单自定义标签开发更简单
35, 自定义标签需要配置的配置文件叫什么?自定义标签中最重要的一个用来传递获取请求域中数据的对象是什么?
.tld
36, 什么是JSTL?
Java Server Pages 标准标签库 (JSTL) 包含的各种标签可用于 JSP 页面中。
37, JSTL都有哪些基本的标签?
通用标签(set、remove、out)、条件标签(if)、迭代标签(forEach)
c标签、
38, 什么是EL表达式?
${expression}
39, 什么是EL函数?有什么作用
就是封装的一些方法,可以通过.tld配置文件进行配置,在jsp页面上导入el函数,就可以使用。
移除掉JSP中的Java脚本(<%%>)
40, 国际化是什么意思?Java中提了哪些工具?
国际化:根据语言类型去定义好字符串模板
java.util.ResourceBoundle
NumberFormat
DateFormat
MessageFormat
41, 什么是JDBC编程?
java数据库连接
①加载驱动,
· Class.forName(“com.mysql.jdbc.Driver”); //加载MySql数据库(或者通过new)
· new com.mysql.jdbc.Driver();
②获取Connection对象,
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/db_name”,”username”,”password”);
③获取状态,
· Statement stmt = conn.createStatement();
④执行SQL语句,
stmt.execute(“”);
stmt.executeQuery(“”);//执行查询语句
stmt.executeUpdate(“”);//执行更新语句
⑤获取ResultSet结果集,
ResultSet result = stmt.executeQuery(“”);
while (result.next()) { } //循环获取
⑥关闭
result.close();
tmt.close();
conn.close();
42, 什么是sql注入?如何防止sql注入?
就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
使用prepareStatement
43, Statement与prepareStatement有哪些区别于联系?
PreparedStatement继承Statement。
PreparedStatement是预编译的,对于批量处理可以大大提高效率.PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处
Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。
44, 什么是事务?
事务是对数据库的一系列操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。
45, 事务有几大特性?请举例说明。
隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
原子性:原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
一致性:拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
持久性:持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
46, 什么是事务的隔离性?有哪些隔离级别?
事务的隔离性可以分为4种类型的隔离级别:Read Uncommitted,Read Committed, Repeatable Read和Serilization。
47, 如何实现分页?请说明思路。
1创建PageBean存放数据(总共需要8个属性pageNum、pageSize、totalRecord、totalPage、startIndex、list、start、end,)
2.在service层编写业务逻辑代码
48, 什么是数据库连接池?为什么要使用数据库连接池?
连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销
49, 有哪些常用数据库连接池?
C3P0、DBCP
50, JDBC开发如何简化代码?请说明如何简化JDBC的开发?
将JDBC封装成一个工具类
51, 如何实现文件上传?请说明步骤、所用到的工具包。
1. 给form表单中添加一个属性:enctype="multipart/form-data"
2. DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setFileSizeMax(1024*1024*5);//设置上传文件的最大范围
List<FileItem> fileItems = upload.parseRequest(request);
3. 遍历fileItems 集合,判断是否为isFormField(),若是为普通表单字段,则通过getFieldName()来获取该字段的值;若不是,则为文件域对象
所用到的工具包
52, 如何实现下载?请说明下载的原理。
前端页面通过超链接方式发起文件下载请求,把要下载的文件名传递给后台
在servlet实现文件的下载操作(设置响应类型及响应头,输出流写入文件内容)
53, 什么是过滤器?怎么添加一个过滤器?
①JavaWeb的一个重要组件,可以对发送到Servlet的请求进行拦截,并对响应也进行拦截
②Filter是实现了Filter接口的Java类
③Filter需要在web.xml文件中进行配置
创建一个Filter类,实现Filter接口
在web.xml文件中进行配置并映射到该Filter。其中,url-pattern指定该Filter可以拦截哪些资源,即可以通过哪些url访问到该Filter
<filter>
<display-name>TransactionFilter</display-name>
<filter-name>TransactionFilter</filter-name>
<filter-class>cn.jl.bookstore.filter.TransactionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TransactionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
54, 常用的过滤器有哪些?至少说出3个
权限过滤器,全站解决乱码过滤器,事务过滤器
55, 5表权限是怎么实现权限管理的?分别是哪五张表?
通过t_user_role这张表中可以找到用户拥有的角色id,通过t_role_permission这张表中可以找到每个角色可以拥有的权限,通过多表关联,就可以查到每个用户所拥有的权限了
t_user,t_role,t_permission,t_user_role,t_role_permission
56, 什么是监听器?怎么创建监听器?
监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。
57, 举例监听器的几个用途。
统计网页的访问量,统计在线人数
58, 什么是threadLocal。ThreadLocal有什么作用?请举例说明。
用来解决多线程程序的并发问题
数据库连接池
59, 使用数据库连接池有直接编码的方式、JNDI的方式。你知道JNDI方式如何使用吗?它的原理吗?
TOMCAT中数据库连接池的配置
1将数据库驱动程序的JAR文件放在Tomcat的 common/lib 中
2在server.xml中设置数据源
在<GlobalNamingResources> </GlobalNamingResources>节点中加入,
<Resource
name="jdbc/DBPool"
type="javax.sql.DataSource"
password="123456"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://127.0.0.1:3306/test"
maxActive="4"/>
3在web应用程序的web.xml中设置数据源参考
在<web-app></web-app>节点中加入,
<resource-ref>
<description>MySQL DB Connection Pool</description>
<res-ref-name>jdbc/DBPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
4在web应用程序的context.xml中设置数据源链接
在<Context></Context>节点中加入,
<ResourceLink
name="jdbc/DBPool"
type="javax.sql.DataSource"
global="jdbc/DBPool"/>
60, Tomcat根目录下有哪些子目录?它们分别有什么作用?
bin:存放可执行程序的目录
conf:存放配置文件的
lib:存放公共jar包的
logs:存放日志文件的
webapps:主要是存放 发布项目用的
61, 什么是Http协议?它与tcp协议的关系是什么?它有哪些主要内容?
http(超文本传输协议)
Http协议是建立在TCP协议基础之上
62, Xml文档的约束方式有几种?分别是什么?有什么特点?
63, 获取web项目下的资源文件有几种方式?
1.获取资源文件的数据流
ServletContext context = this.getServletContext();
InputStream is =context.getResourceAsStream("/person.properties");
Properties pt=new Properties();
pt.load(is);
System.out.println(pt.getProperty("name"));
2. 获取资源文件的绝对路劲,然后利用FileInputStream,与上面的区别在于这里可以获得要操作文件的文件名
3. 利用类加载器
URL url =PersonDao.class.getClassLoader().getResource("com/baowei/servlet/person.properties");
64, 软件的三层架构是哪三层?为什么要分层?
业务逻辑层、表现层、持久层
可以更好的对代码进行维护,代码清晰
65, 请分别说明单例模式、工厂模式、装饰模式的作用,如何实现?典型的应用场景。
单例模式:保证类在内存中只有一个对象
a:将构造方法私有化
b:在成员位置创建自己的一个对象
c:通过提供一个公共的方法来访问此对象
有懒汉式(用的时候才创建对象)和饿汉式(类一加载就创建对象)
工厂模式:客户端不需要再负责对象的创建,从而明确了每个类的职责,如果有新的对象增加,只需增加一个具体的类,和具体的工厂即可,不影响已有的代码,后期维护容易,增强了系统的扩展性。
装饰模式:自定义标签