JDBC---JSP笔记
JDBC的事务管理:
事务的管理的对象:Connection conn
事务管理的核心的思想:
逻辑上的一组操作使用的是同一个Connection对象
事务管理的核心步骤:
开启事务:conn.setAutoCommit(false)
业务逻辑的操作
所有的业务逻辑操作都成功后提交事务:conn.commit()
一旦有异常回滚事务:conn.rollback()
连接池
druid/c3p0
1.导包
2.配置文件:在classpath下默认有个一个文件叫 c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///web_test4</property>
<property name="user">root</property>
<property name="password">tsmysql</property>
<property name="initialPoolSize">5</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
</c3p0-config>
DBUTILS(web阶段使用)
增删改
QueryRunner qr = new QueryRunner(DataSource dataSource)
qr.update(String sql,Object ... obj)
查询
QueryRunner qr = new QueryRunner(DataSource dataSource)
qr.query(String sql,各种Handler,Object...obj)
结果集类型:
BeanHandler
BeanListHandler
MapHandler
MapListHandler
ScalarHandler:Long
XML
解析:DOM4j+Xpath
SAXReader sr = new SAXReader()
Document document = sr.read("代表这个xml文档的流");
List<Node> list = document.selectNodes(String xpathExpression)
Node node = document.selectSignalNode(String xpathExpression)
xpathExpression:
元素名称
元素名称[@属性名称]
元素名称[@属性名称='属性值']
tomcat
部署
1.如果要用虚拟路径:
tomcat\conf\Catalina\localhost:新建一个xxx.xml ,写 <Context docBase=""/> 访问路径:xxx
2.将项目导出成war包,直接扔到webapps下协议
请求:行 头 体
1.get/post的区别:
get提交的参数显示到地址栏,在请求行中地址后面;post提交的参数在请求体中
get有大小的限制,post没有
get没有请求体,post有
2.常见的请求头:
User-agent:浏览器的类型
Referer:防盗链
响应:行 头 体
1.常见的状态码:
302:重定向(结合Location响应头使用)
304:查找本地缓存
404:路径错误,资源真的不存在
500:代码写错了
2.常见的响应头:
Location:结合302做重定向
Content-Disposition:文件下载的时候用
Refresh:定时刷新
Servlet
访问规则:
如果要访问一个servlet,这个地址串跟web.xml中配置的url-pattern有关系
生命周期:
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.
任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.
在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).
当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.
程序优化的思想:
一次性的资源的加载(耗时的操作)放到服务器启动的时候
url-pattern的配置方式
1.完全路径匹配:以/开头 /aaa 例如:http://ip:port/projectName/aaa
2.目录匹配:以/开头 以*结尾 /aa/ 例如:http://ip:port/projectName/aa/fadsfadfda
3.扩展名匹配:不能以/开头 以*开头 *.do *.action 例如:http://ip:port/projectName/afdafdadfadsfadf.do
优先级关系:根本的原因,一次请求只有一次响应
完全路径匹配 > 目录匹配 > 扩展名匹配
ServetContext
如何获得:
在有servlet的环境下:this.getServletContext();
范围:整个web应用的范围
域对象存取数据
setAttribute(String name,Object value);
Object getAttribute(String name);
removeAttribute(String name)
读取web项目下的文件
1.有servlet的环境下:
InpuptStream getResourceAsStream(String path);
String getRealPath(String path);
2.如果没有servlet的环境:
用类加载器去读取文件:
InpuptStream is = 当前类的类名.class.getClassLoader().getResourceAsStream(String name);
文件下载:
把一个文件从服务器读取,写到客户端
文件下载的核心思想:io 读/写的操作
InpuptStream is = new FileInputStream("服务器上的路径");
OutputStream os = response.getOutputStream();
模板代码:
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b))!= -1){
os.write(b, 0, len);
}
is.close();
Content-Type: getServletContext().getMimiType(String filename);
Content-Disposition:"attachment;filename="+filename;
响应乱码
response.getOutputStream():文件下载
下列方式:
response.getWriter().print("");这种乱码问题如何解决:response.setContentType("text/html;charset=UTF-8");
Request
获取客户端信息
1.请求方式:request.getMethod();
2.请求ip:request.getRemoteAddr();
3.获取工程名:request.getContextPath();
获取表单参数
String request.getParameter(String name);
String [] request.getParameterValues(String name);
Map<String,String[]> request.getParameterMap();
请求乱码
get:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")
post:
request.setCharacterEncoding("UTF-8")
转发和重定向:
转发:
request.getRequestDispatcher("不带工程名的路径").forward(request,response)
重定向:
response.sendRedirect("带工程名称的路径")
区别:
1.地址栏:转发地址栏不变,重定向会变
2.请求响应的次数:转发一次请求一次响应,重定向是两次请求和响应
如果给request域中存放了数据:转发能够获得到数据,重定向不能获得到数据
3.路径的编写:转发不带工程名,重定向带工程名
4.跳转的范围:转发只能在当前工程下跳转,重定向可以跳转至任意网页
Cookie
如何获得:Cookie[] cookies = request.getCookies();
如何向客户端写cookie:response.addCookie(Coookie cookie)
如何创建cookie:Cookie cookie = new Cookie(String name,String value);
获得名字:cookie.getName()
获得值:cookie.getValue();
设置路径:cookie.setPath(String path);
设置有效期:cookie.setMaxAge(int age) 单位是:秒
作用范围:默认是一次会话,关闭浏览器就销毁
关于cookie存储中文的问题:
往回写cookie:
String value = URLEncoder.encode("老谭", "UTF-8");//"老谭"--fadsf%%33
Cookie cookie = new Cookie("aa",value);
response.addCookie(cookie);
获得:
Cookie [] cookies = request.getCookies();
Cookie aa= CookieUtils.findCookie(cookies, "aa");
if(aa!=null){
String value = aa.getValue();//fadsf%%33--"老谭"
String a = URLDecoder.decode(value, "utf-8");
}
Session
如何获得:HttpSession session = request.getSession();
作为域对象存取数据
session.setAttribute(String name,Object value);
Object vlaue = session.getAttribute(String name);
removeAttribute(String name);
范围:一次会话(根本原因:存SesssionID的cookie默认是会话级别的)
配置sessionion过期时间:web.xml
<session-config>
<session-timeout>5</session-timeout> <!--单位是分钟-->
</session-config>
JSP
三大指令:
1.page:
全局错误友好页面的配置
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
2.include: <%@ include file="" %> 静态包含
3.taglib:导包用
九大内置对象:
request HttpServetRequest
response HttpServetResponse
session HttpSession
application ServletContext
page Object
out JspWriter
pageContext PageContext
config ServletConfig
exception Throwable
动作标签:
<jsp:forward page=""> /jsp:forward
<jsp:include page="">/jsp:include :动态包含
静态包含和动态包含的区别:
静态包含:相当于源代码的拷贝,只会翻译成一个Java类,有一个执行结果
动态包含:各自分别去翻译,各自执行,最终包含的是执行的结果
EL与JSTL
EL获取数据:
以什么名字存到域中,就以什么名字取出来,存进去是什么类型的,取出来就是什么类型
数组,List,[] ----遍历
map,java对象:. .属性
EL执行运算
empty:判断是否为空
not empty:判断是否不为空
EL操作常用的web对象
${cookie.名字.value}
${pageContext.request.contextPath}
JSTL的中判断
<c:if test="${}">
test:如果test返回true,标签内的内容就会被输出
</c:if>
if标签没有else,如果想表达else的情况,从条件着手
JSTL中的遍历:
<c:forEach var="" items="" varStatus="status">
status.index
status.count
</c:forEach>
<c:forEach var="" begin="" end="" step="" varStatus="status">
</c:forEach>
|
|