- execute,executeQuery,executeUpdate的区别是什么?
execute:可以处理的所有的SQL语句,DDL、DML、DCL、DQL,如果可以检索到ResultSet对象,则返回一个布尔值true; 否则返回false。
executeQuery:主要执行查询语句DQL,返回一个ResultSet对象。
executeUpdate:主要处理增删改语句,以及DDL语句,返回受SQL语句执行影响的行数。使用此方法执行预期会影响多个行的SQL语句。 - JDBC的PreparedStatement是什么?与Statement的区别?
遵从Statement接口,用于创建对象将SQL语句提交到数据库,定义了能够发送SQL命令并从数据库接收数据的方法和属性,计划多次使用SQL语句时使用,PreparedStatement接口在运行时接受输入参数。
接口 | 使用 |
---|---|
Statement | 用于对数据库进行通用访问。在运行时使用静态SQL语句时很有用。Statement接口不能接受参数,会发生SQL注入问题 |
PreparedStatement(推荐使用) | 当您计划多次使用SQL语句时使用。PreparedStatement接口在运行时接受输入参数,可以避免SQL注入问题,提高安全性 |
- 什么是JDBC,在什么时候会用到它?
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
当需要与数据库建立连接、发送 操作数据库的语句并处理结果的时候使用。 - MySQL中约束有哪些?
not null / primarykey / unique / default / 外键约束foreign key - JDBC中常用接口和类有哪些?
(1)Connection接口
(2)Statement接口
(3)PreparedStatement
(4)ResultSet接口
(5)DriverManager类 - Tomcat中如何发布一个web程序?
(1)直接将web项目文件复制到【TomCat安装目录下的webapps目录下】,然后启动【bin目录下的startup.bat】,启动服务器,在浏览器中输入【http://localhost:8080/web项目文件名称】进行访问。
(2)在IDEA或者eclipse开发工具中,可以直接启动项目,然后在地址栏补充输入对应的静态页面文件名称。
(3)可以通过IDEA和eclipse开发工具,将项目导出war包,直接复制到【TomCat安装目录下的webapps目录下】,同(1)操作方式
(4)不必将web项目拷贝到webapps下,而是更改【Tomcat目录下的conf文件夹下的server.xml文件】,在<host>标签内添加<Context>标签
<!--
1.将所在目录写到docBase中
2.reloadabl为false,在发布阶段可以提高访问速度,在开发阶段可以方便开发,改为true
3.path为访问路径,这样可以通过【localhost:8080/0831web】路径访问
-->
<context docBase="F:/0831web" reloadable="false" path="/0831web" />
(5)在【Tomcat安装目录下的conf\Catalina\localhost】中添加一个xml文件,如0831web.xml,添加如下内容:
<!--没有path,服务器会使用.xml文件的名字作为路径-->
<Context docBase="F:/PetWeb" reloadable="false" />
-
简述浏览器访问服务器页面的流程?
(1)建立TCP连接
(2)浏览器向web服务器发送一条HTTP请求报文报文包含
请求行:用来说明客户端想要做什么
请求头:通过客户端把请求的相关信息发给服务器,包括媒体类型、语言类型、支持压缩、客户端类型、主机等信息
空行:告诉服务器空行以下内容不属于请求头部信息
请求报文主体:用来说明客户端具体想要做的事情(3)web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。
报文包含
状态行:用来说明服务端响应客户端的状态,200ok
响应头:通过服务端把响应的相关信息给客户端
空行:告诉客户端空行以下内容不属于响应头部信息
请求报文主体:用来装载着要返回给客户端的数据(4)web服务器关闭HTTP连接,关闭TCP连接,web服务器显示访问的网站内容到屏幕上
-
request.getAttribute()和request.getParameter()的区别?
getAttribute()作为一个集合使用,必须先放入数据,才能获取数据。
getParameter()直接获取值,进行处理。 -
有一个Html页面,有四个图片,访问页面,浏览器一共向服务器请求几次?
5次,一次请求一个资源,第一次请求是网址/xxx.html,头请求,然后四次是每次都请求一个资源,获取图片。 -
cookie和session原理?
详细原理参考《Web的状态管理——Cookie和session技术的使用》
Cookie:客户端状态管理,保存一小段信息,第一次访问时服务器,服务器cookie响应给浏览器,下次再访问服务器时,把cookie回传给服务器,服务器收到cookie。
session:服务器端状态管理,是一个map集合,session使用sessionid区别,服务器会把SessionId作为cookie的值发送给浏览器,浏览器再次访问服务器时,服务器读取到cookie(sessionid)。 -
为什么说session 比cookie更安全?
session的ID比较难以破解,此外除了id以外的数据不需要在网络中进行传输,这样由于数据量少,不易被拦截,即使被拦截了,由于是无序串,也不易处理和伪造。
sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。
sessionID是在服务器端生成的,会话结束也就销毁了,而cookie却存留在用户硬盘中,显然前者更安全。 -
Jsp和Servlet的区别
- Servlet:运行在服务器上的java小程序。适合编写java代码,写网页困难,适合业务处理
- Servlet三个用途:(1) 接受浏览器发送的数据 (2)负责调用业务层 (3)转发重定向
- JSP:适合编写动态内容,不适合写java代码,主要用于显示页面
- 与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句
-
Jsp的执行原理
(1)JSP引擎先把该JSP文件转换成一个Java源文件(Servlet),在转换时如果发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息。
(2)如果转换成功,JSP引擎用javac把该Java源文件编译成相应的class文件。
(3)创建一个该Servlet(JSP页面的转换结果)的实例,该Servlet的jspInit()方法被执行,jspInit()方法在Servlet的生命周期中只被执行一次。
(4)jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但不过也应该注意多线程的编程限制,由于该Servlet始终驻于内存,所以响应是非常快的。
(5)如果.jsp文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则将编译结果取代内存中的Servlet,并继续上述处理过程。
(6)虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延 迟。此外,在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将Servlet从内存中移去。当这种情况发生时jspDestroy()方法首先被调用。
(7)然后Servlet实例便被标记加入“垃圾收集”处理。可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源。
- 说说Jsp的内置对象有哪些?方法有哪些?
对象名 | 类型 | 说明 | 方法 |
---|---|---|---|
request | javax.servlet.http.HttpServletRequest | 请求对象 | 请求方式:request.getMethod() 请求的资源:request.getRequestURI() 请求用的协议:request.getProtocol() 请求的文件名:request.getServletPath() 请求的服务器的IP:request.getServerName() 请求服务器的端口:request.getServerPort() 客户端IP地址:request.getRemoteAddr() 客户端主机名:request.getRemoteHost() |
response | javax.servlet.http.HttpServletResponse | 响应对象 | 重定向客户端请求 response.sendRedirect(index.jsp) |
session | javax.servlet.http.HttpSession | 会话对象 | 获取Session对象编号 session.getId() 添加obj到Session对象 session.setAttribute(String key,Object obj) 获取Session值 session.getAttribute(String key) |
application | javax.servlet.ServletContext | 全局对象 | 添加obj到Application对象 application.setAttribute(String key,Object obj) 获取Application对象中的值 application.getAttribute(String key) |
config | javax.servlet.ServletConfig | 配置对象 | getServletConfig() 方法可以获取一个config对象 获取参数名config.getServletName() |
exception | java.lang.Throwable | 异常对象 | exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用 |
out | javax.servlet.jsp.JspWriter | 输出对象 | 输出各种类型数据 out.print() 输出一个换行符 out.newLine() 关闭流 out.close() out.write() |
pageContext | javax.servlet.jsp.PageContext | 页面上下文对象 | pageContext.getAttribute() 通过它可以获取 JSP页面的out、request、reponse、session、application 等对象 |
page | java.lang.Object当前对象this | 当前servlet实例 ,当前页面对象 | 当前页面page.getClass() |
- 说说Jsp的隐藏对象有哪些?
共11个:
(1)pageContext:页面上下文,可以获取jsp中其他八个内置对象
(2)pageScope、requestScope、sessionScope、applicationScope表示四个域对象中集合
(3)param 表示【request.getParameter(“username”); 或 ${param.username} 】
(4)paramvalues 表示【request.getPrameterValues(“hobby”) 或 ${paramValues.hobby}】
(5)header 表示【request.getHeader(“accept”); 或 ${header.accept};】 request.getHeader(“accept”); 或 ${header.accept}
(6)headerValues 表示 【request.getHeaderValues(“accept-encoding”); 或 ${headerValues[“accept-encoding”][0]}】
(7)cookie 表示【request.getCookies(); 或 ${cookie.JSESSIONID}】
(8)initParam 表示 ServletContext(application)初始化参数 - JSP的四个域对象有哪些?
jsp中共包含四个域对象分别是request、session、application、pageContext:
(1)request域的使用场景:本次请求之后,数据就不再使用了,根据学号查询学生,根据新闻id查询新闻。
(2)session域的使用场景:同一个会话中共享的数据,使用session,用户登录信息
(3)application域的使用场景:所有用户共享的数据。整个程序的配置信息
(4)pageContext域的使用场景:当前页面。