Java Web的小零碎知识点

在这里插入图片描述
1.session个cookie的区别?
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录
每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。
2.forward和redirect的区别?
forward是转发的意思,redirect是重定向的意思。
1. 从地址栏显示来说:

1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。

2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。

2。 从数据共享来说:

1)由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据

2)redirect不能共享

  1. 从运用的地方来说

1)forword 一般用于用户登录的时候,根据角色转发到相应的模块

2) redirect一般用于用户注销登录时返回主页面或者跳转到其他网站

4.从效率来说:

1)forword效率高,而redirect效率低

  1. 从本质来说:

forword转发是服务器上的行为,而redirect重定向是客户端的行为

3.如何防止from表单提交
1 点击一次之后,按钮失效(不推荐,用户刷新页面仍能重复提交)

  通过js代码,当用户点击提交按钮后,屏蔽提交按钮(使按钮无发点击提交或点击无效disabled),从而实现防止表单重复提交。

2 用redirect来解决重复提交问题

简而言之,表单提交后重定向到提交成功的一个页面。

3在数据库里添加约束

在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。简单粗暴的方法。

4 在session中存放一个特殊标志(推荐)。

 类似于“令牌”机制。当表单页面第一次被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,若标志串相同则处理表单提交并立即从session中删除它。若不一致就是重复提交了则忽略这次提交。如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

(解决struts2重复提交,可以结合s:token标签解决重复提交问题)
5 使用AOP自定义切入实现
4.简述web容器的listener和filter和servlet执行顺序和生命周期?

启动的顺序为listener->Filter->servlet.

简单记为:理(Listener)发(Filter)师(servlet).

Listener生命周期:一直从程序启动到程序停止运行。
Filter生命周期:程序启动调用Filter的init()方法(永远只调用一次,具体看启动日志),程序停止调用Filter的destroy()方法(永远只调用一次,具体看关闭日志),doFilter()方法每次的访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init()方法以后调用,不管第几次,都在调用doGet(),doPost()方法之前)。
Filter生命周期:程序启动调用Filter的init()方法(永远只调用一次,具体看启动日志),程序停止调用Filter的destroy()方法(永远只调用一次,具体看关闭日志),doFilter()方法每次的访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init()方法以后调用,不管第几次,都在调用doGet(),doPost()方法之前)。

5.JSP9大隐视对象中四个作用域的大小与作用范围

作用域大小:

四个作用域从大到小:appliaction>session>request>page

作用范围:

application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。

session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。

request:请求作用域,就是客户端的一次请求。

page:一个JSP页面。

以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:

一个request可以包含多个page页(include,forward)。

6.过滤器(Filter)和拦截器(Interceptor)的区别
创建一个Filter只需两个步骤

创建Filter处理类
web.xml文件中配置Filter

void init(FilterConfig config):用于完成Filter的初始化。 void
destory():用于Filter销毁前,完成某些资源的回收。 void doFilter(ServletRequest
request,ServletResponse response,FilterChain
chain):实现过滤功能,该方法就是对每个请求及响应增加的额外处理。该方法可以实现对用户请求进行预处理(ServletRequest
request),也可实现对服务器响应进行后处理(ServletResponse
response)—它们的分界线为是否调用了chain.doFilter(),执行该方法之前,即对用户请求进行预处理;执行该方法之后,即对服务器响应进行后处理。

Filter和Interceptor的区别
Filter是基于函数回调的,而Interceptor则是基于Java反射的。
Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
7.web.xml的作用
一般的web工程中都会用到web.xml,web.xml主要用来配置,可以方便的开发web工程。web.xml主要用来配置Filter、Listener、Servlet等。但是web.xml并不是必须的,一个web工程可以没有web.xml文件。
web.xml工作过程
web.xml的执行流程
1 启动一个web项目时,容器(如tomcat)会去读web.xml,读取监听器和两个结点

2 然后容器创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文

3 容器将转换为键值对,并交给servletContext

4 容器创建中的类实例,创建监听器

5 在监听器中有contextInitialized(ServletContextEventargs)初始化方法,在这个方法中获得ServletContext=ServletContextEvent.getServletContext();context-param的值=ServletContext.getInitParameter(“context-param的键”)

6 得到这个context-param的值后,就可以做一些操作了,注意,这个时候web项目还没有完全启动成功,换句话说,这个时候对中的键值得操作,将在web项目完全启动以前被执行

举例:可以在项目启动之前就打开数据库,那么就可以在中设置数据库的连接方式,在监听类中初始化数据库的连接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值