1.第一次访问jsp流程图
第二次访问jsp文件直接调用service()方法。
2.sendRedirect与forward的区别
1).request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。
2).RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。
3).运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何 URL。
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,
同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute(“name”,name)来传至下一个页面.
重定向后浏览器地址栏URL不变.
只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用 forward方法前必须先清空缓冲区。
4).表单的action跳转页面的方式是重定向,所以储存的Attribute值会丢失。
2.指令include 和 request.Dispatcher 的 include的
区别
3.中文传参乱码问题
在jsp中会出现两种编码错误。一种是页面编码错误,一种是数据编码错误。
1)、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。
2)、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。
3)、request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求进行重新编码的编码。
4)、response.setCharacterEncoding(“UTF-8”)的作用是指定对服务器响应进行重新编码的编码。
response.setCharacterEncoding(“UTF-8”)的作用是指定对服务器响应进行重新编码的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。所以在无论你在JSP中设置response.setCharacterEncoding (“UTF-8”)或者response.setCharacterEncoding(“GBK”),浏览器均能正确显示中文(前提是你发送到浏览器的数据编码是正确的,比如正确设置了pageEncoding参数等)。
5).对于表单中提交的数据,只要在接收数据的JSP中正确request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。
6.)对于URL提交的数据,在接收数据的JSP中request.setCharacterEncoding参数是不行的,因为在Tomcat5.0中,默认情况下使用ISO- 8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码),而不使用该参数对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码)。要解决该问题,可以修改tomcat配置、手动对链接进行编码(或者直接用标签,标签自带自动节码功能)
7).Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,在http解析时做了严格限制。
RFC3986文档规定,请求的Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。
如果要使用这些特殊字符,并不是绝对不可以。
本段总结摘抄博文,详情请访问
https://blog.csdn.net/aic1999/article/details/80462626
https://www.sogou.com/link?url=hedJjaC291OV7dVab-QfvHtdr0qpeLU_CSp7GIEOglWQU5NK2Z-LBQ…
4.在使用 c3P0连接池时 出现
查了一下说是数据库驱动包编码与页面不匹配,在uri后面加上
useUnicode=true&characterEncoding=utf8 参数发现还是不行 报了另一个错
说是数据库创建不了连接 很奇怪 最后查了很久 可能因为数据库和数据库驱动版本不同导致(数据库是Mysql 8 数据库驱动5),去官网下了一个数据库驱动8的,将驱动改为com.mysql.cj.jdbc.Driver,然后接着会出现时区错误,需要将连接URL加上&serverTimezone=UTC 最后终于不报错了
总结:平时在使用数据库驱动时,虽然和数据库版本不一样,但是也同样可以获得连接,但是在测试连接池时出现这种情况,可能是连接池需要比较高的要求???
- target=showname 就是这个链接是提交给框架(frameset)name=showname
在页面之间加入(XHTML:),就会使该页面所有链接均为新开窗口打开。
是一个链接基准标记,用以改变页面中所有链接标记的参数默认值。引申应用:
网易那么不管这个页面放置在任何域下面,该链接都会指向http://www.163.com/
6.如果表单传递方式为post ,但还需要传递其他参数,可以使用 input 标签 value设置 ,然后将input type属性设置为hidden即可。
7.超链接中不可随意加空格,EL表达式也一样,加空格可能会报错