1、form表单提交事件和表单按钮点击事件的区别
基础知识:在form表单中,只要点击<input type="submit" value="提交">按钮就会天然的触发表单的提交,但是<input type="button" value="提交">没有这个功能,只有给button绑定点击事件,事件内容是表单提交,表单才会被提交
需求描述1:当表单提交时,触发代码块1的运行,
<form id="form">
<input type="submit" id="btn">
</form>
给buttn按钮绑定表单提交事件:
$("#form").submit(function(){
代码块1
});
注意事项:只有表单被提交时,才可以触发这个事件,只与表单提交有关,与其他无关
需求描述2:给按钮btn绑定点击事件,事件内容是:先提交表单,然后在表单提交时运行代码块2
<form id="form">
<input type="button" id="btn">
</form>
给buttn按钮绑定表单提交事件:
$("#btn").click(function(){
$("#form").submit(function (){
代码块1;
});
});
需求描述3:给按钮btn绑定点击事件,在事件内:发送异步请求,在异步请求函数体中执行代码块3:
<form id="form">
<input type="button" id="btn">
</form>
给buttn按钮绑定表单提交事件:
$("#btn").click(function(){
$.get(url,{参数},function(){
代码块3;
});
});
2、html和jsp前端页面使用注意事项:
区别1——接受和发送来自Servlet的数据:
html不支持EL和JSTL,也就没法直接接收来自Servlet中通过request和session等共享域分享的数据,要想接收来自servlet的数据,可以通过异步ajax请求的方法通过Servlet的响应json对象获取,也就是对于页面非写死数据,html的页面显示来自Servlet的数据,只能在<script></script>标签中通过javascript(JQuery)中的方法,比如html(), val()等方法对标签对象进行操作;
JSP支持EL表达式和JSTL,可以接受来自Servlet中通过request和session等共享域分享的数据,比较方便;
eg:设置地址栏的href属性,JSP中可以直接使用location.href="${pageContext.request.contextPath}/idex.html",而在html中,location.href="http:localhost:8080/day00/idex.html"
$.get(url,{},function (data){
});
3、javascript的BOM常用BOM对象及其属性和方法
① location——地址栏对象:
location.href=url; //表示设置当前地址栏地址为url; 此处的url是完全url
location.reload();//刷新当前页面;
② Window——窗口对象:
window.alert() 显示带有一段消息和一个确认按钮的警告框。
window.confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
* 如果用户点击确定按钮,则方法返回true
* 如果用户点击取消按钮,则方法返回false
***常用于删除的确认框
window.
setTimeout() 在指定的毫秒数后调用函数或计算表达式。
* 参数:
1. js代码或者方法对象
2. 毫秒值
* 返回值:唯一标识,用于取消定时器
window.clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
window.setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
window.clearInterval() 取消由 setInterval() 设置的 timeout。
4、与maven中pom.xml配置文件相关
①在pom.xml中配置jstl后,还需要在JSP页面配置 <%@ taglib prefix="c" uri="
http://java.sun.com/jsp/jstl/core" %>可以直接使用<c:foreach>等标签;
②在maven中先导入servlet依赖,后创建的过滤器filter,出现java.lang.ClassCastException:
解决方案:先将servlet在pom.xml中的依赖导入注释,再创建filter顾虑器,再将pom.xml中的servlet的依赖引入
5、大作业需求逻辑路线
6、过滤器相关
过滤器步骤:
①将req和resq进行类型强转:
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) resp;
②获取URI;
③过滤(放行)登录页面;
④获取登录的对象User,判断登录状态,如果User ==null ,则跳转到登录页面,如果User!=null,则说明已经处于登录状态, 直接放行 ;
7、在Servlet中request和session共享数据与请求转发和重定向:
Request和Session都可以共享数据,但是作用域不一样,Request的作用域是一次请求,Session是一次回话(可以是一次或者多次请求);
-
request共享数据特点:
1. 作用范围:在一次会话的一次请求中,如果请求发生变化,比如重定向后,共享会失效;
2. 应用场景:request.setAttribute("msg",user); //保存数据
request.getRequestDispacher("/index.jsp").forward(request,response); //请求转发
3. 服务器开销:
-
session共享数据:
1、作用范围:一次会话的1次或多次请求之间;
2、应用场景:request.getSession().setAttribute("msg",user); //保存数据
request.getRequestDispacher("/index.jsp").forward(request,response); //请求转发
response.sendRedirect(requset.getContextPath+"/index.jsp"); //请求重定向
3、系统开销:一方面session数据保存在服务器端,另一方面是多次请求,系统开销相比request会更大
* 总结:在既可以使用request也可以使用session共享数据,优先使用request,但是为了防止出现混乱,可以选择作用域更大的Session
-
请求转发特点:
1、一次请求,在服务器内部进行请求转发,同时可以携带request共享的数据;
2、URL地址:不会发生变化
3、系统开销:比较小
8、在Dao层,JdbcTemplate 的对象 template的方法选择:
①查询,由返回值类型决定:
***
返回值类型为对象,比如Book,选择queryForObject()
String sql="select * from books where id = ?";
Book book = template.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
***
返回值
类型
为List集合,选择query()
String sql= "select * from books limit ?,?";
List<Book> list = template.query(sql, new BeanPropertyRowMapper<Book>(Book.class), start, pageSize);
***
返回值
类型
为int,选择query()
String sql="select count(*) from books";
Integer integer = template.queryForObject(sql, Integer.class);
②修改,选择update()
String sql= "update books set name =? ,price=?, pnum=?,category=? where id=?";
template.update(sql,book.getName(),book.getPrice(),book.getPnum(),book.getCategory(),book.getId());
③插入,选择update()
String sql="insert into tab_favorite values(?,?,?)";
template.update(sql,rid,new Date(),uid);
④删除,选择update()
String sql="delete from books where id= ?";
template.update(sql,id);
9、异步和同步请求方式的选择
特点:
***异步是网页局部和Servlet进行数据通信,不刷新整个网页,网址不会发生变化,用户感受不到网页的变化;
***同步会刷新整个网页
应用场景:
***异步请求:
①表单提交
②搜索
***同步请求:
①表单提交;
②搜索;
③超链接;
④location.href=""
10、request和response中文乱码的问题
get请求:
编解码过程:浏览器utf-8码表第一次编码,再经过http协议ISO-8859-1码表第二次编码,在服务器端处理后,HTTP协议使用ISO-8859-1码表第一次解码,响应到服务器后,再进过utf-8第二次解码,如果中间环节,即HTTP协议已经乱码,后续的解码将不能正确解码;
处理方式:new String(name.getByte("ISO-8859-1"),"utf-8");
post请求:
编解码过程:post请求方式的参数是在请求体中,相对于get请求简单很多,没有经过http协议这一步的编码过程,所以只需要在服务器端,设置服务器解码的码表跟浏览器编码的码表是一样的就行了,在这里浏览器使用 的是UTF-8码表编码,那么服务器端就设置解码所用码表也为UTF-8就OK了,
处理方式: request.setCharacterEncoding("UTF-8");