javaEE(web开发)私人学习笔记

俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步!

此笔记是博主在做javaee开发的时候写的笔记,记录了一些比较容易让新手困扰的地方,笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。


1、web.xml的路径不能写成/*.action,只能/*或*.action,其中*.action也默认要求需要访问时需要加/访问,如/aaa.action才是效的。
web.xml的匹配路径*是提倡最长匹配的,即如果有路径/abc和/*,会优先使用/abc。关于/*和*.action,/*也可以匹配到.action后缀的情况,但是如果增加了后缀,则优先匹配*.action的后缀。
web.xml的最长匹配与Spring配置事务的方法名不同,它是从上到下进行匹配,即有method="*"和method="abc",如果method="*"排在前面,则会先匹配到最先的method="*"而进行事务使用。





2、Servlet的监听器(Listener)比过滤器(Filter)先执行,例如ServletRequestListener监听器,在有请求时(请求包括jsp页面请求),会先调用见监听器的requestInitialized()方法,在调用拦截器的doFilter()方法。
   Listener、Filter、Interceptor他们都是项目启动时启动,但监听器会先启动,并且它们都是单例模式。默认情况下,过滤器过滤请求相应的方式(REQUEST),如果需要过滤转发等方式,需要修改web.xml的配置。
   过滤器的执行顺序是按web.xml的 <filter-mapping>配置顺序进行执行的,特殊的,如果<filter-mapping>配置的是拦截<servlet-name>将低于<url-pattern>,即会在<url-pattern>执行后才执行<servlet-name>而不管配置的顺序。
   


3、javabean对象之所以要实现Serialable接口,是因为了可以将数据保存到硬盘中。
例:如果tomcat服务器关闭后,会把Sesison对象保存到硬盘上,如果Session域里的值javabean实现了Serialable接口则也会得到保存,
那么在tomcat重启后,Session里的域里的值将还会存在,可以避免用户再次去登录(前提是浏览器重未关闭过)。


4、对于jsp页面的请求地址,如果在地址前不加入项目名,tomcat服务器后默认加上项目名。即使用缺省地址(不加入项目名,但地址前必须不能有/开头)也可以进行访问。





5、一般来说。内网都放在WEB-INF/的目录下,因为比较安全且便于权限的设置,而外网通常都直接网站WebRoot/下,这样访问速度快且效率会更高一些,通常一个项目
两种情况都具备,具体情况具体分析。



6、对于jsp的包含include指令,静态包含是直接发布时就嵌入,动态包含是运行时才嵌入。因为包含是给服务器使用的(tomcat都运行时需要先编译jsp故是服务器使用),故不需要写项目名,又因服务端使用的
原因,故包含可以直接包含WEB-INF下的页面。只包含部分代码的叫做jsp的片段,后缀可以是jspf。注意,每一个jsp或jspf开头都必须包含一下代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

附加:一般页面的最外层不要使用百分比(%)来设置大小,因为它是相对于浏览器的,如果浏览器放大缩小将直接影响到最外层的标签,容易引起变形。
而内层的大小则应该使用百分比(%)来设置大小,它是相对于上层的,这样便于最外层修改大小。


 
7、在创建javaBean对象时,应该使用保包装类型而不是基本类型,因为当数据库返回的数据是NULL时,使用包装类对象可以接收NULL,而基本类型就做不到。
相反的,在定义参数的类型时,应该使用基本类型,尽量不要是自定义的对象或包装对象,以最低要求来获得方法的使用。




8、Servlet获取目标地址的方法分析:
request.getRequestURL();//获得整个目标网址名    :8080/myshop/user/confirm.jsp
request.getRequestURI();//获得在当前项目下的目标地址   /myshop/user/confirm.jsp
String goURL=request.getServletPath();// 用户想去的地址(即目标地址),不包括工程名  /user/confirm.jsp
String param=request.getQueryString();  // 获取URL后面的参数

//如果想获取一个带参数的URL进行重新请求,使用如下方法
if(param!=null){
goURL+="?" + param;
}


9、页面缓存分析(默认情况下是开启缓存的):
<9.1> <meta http-equiv="pragma" content="no-cache"> : 是HTTP1.0的配置,在HTTP1.1中以及不使用。
<meta http-equiv="cache-control" content="no-cache"> :是现在HTTP1.1的设置, no-cache 此参数仅仅支持IE 不支持火狐, 可以使用 no-store 两种浏览器都支持
<meta http-equiv="expires" content="0">   :指页面的缓存时间,单位为分钟,-1表示不缓存该页面(但不禁止,表示页面刷新时重新去服务端获取)。只有在没有设置no-cache参数时才有效。

<9.2> 禁止页面缓存使用才能使网页过期,能确保每个浏览器都支持
<%response.setHeader("cache-control", "no-store");
response.setHeader("cache-control", "no-store");
//虽然这是http1.0的缓存功能,但还是要补上,因为有些浏览器还是使用http1.0版本
response.setHeader("pragma", "no-cache");
response.setDateHeader("expires", -1);
%>

而使用下面的禁止页面缓存代码方式有些浏览器并不支持,故不建议使用
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">  

<9.3> 注意:Servlet的转发跟请求不同,转发时属于服务器内部使用的方式,相当与跳转,如果请求的是POST方式,那么转发到某个页面后,还是属于POST的请求,
 如果是使用GET方法,那么转发到某个页面后,该页面还是属于GET的请求方式。
 
<9.4 >浏览器默认默认的请求方式是GET,所有的重定向都是属于GET请求,包括Servletd和Seruts2的重定向都是一样。

<9.5> POST和GET的区别:
(1)、封装参数的区别:
get请求时把参数加入到请求头(即地址)中,且不能传递文件。
post请求时把参数加入到请求体中,可以传递文件。

(2)、缓存功能的区别,如果使用了禁止缓存功能:
使用get请求访问页面,在按后退的时候不会有"页面过期"提示,而是会直接到服务器端重新获取数据。
使用post请求访问页面,在按后退的时候会有"页面过期"提示,不会直接去服务端请求数据。

(3)、如果短时间内请求相同的地址:
使用get请求时,会变成自动使用缓存,而不再重新请求。
使用post请求时,每一次的请求都会都会向服务请重新进行请求。

附加:如果点击浏览地址按回车,那么将会是变成get请求,当再次请求时也将会使用缓存。


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsswf.html