Servlet笔记
1.Servlet定义方式:
继承HttpServlet, 使用的是javax.servlet.*;API
2.Servlet配置:
a.xml配置方式
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.wdzl.servlet.LoginServlet</servlet-class>
<init-param>
<param-name>count</param-name>
<param-value>1000</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
b.注解方式:
@WebServlet(value="/login") : 注意:不能少斜杠,默认赋值方式,等价于value="/login"
@WebServlet(value={"/login","/userlogin"},
loadOnStartup = 0,
initParams = {@WebInitParam(name=“count”,value=“1000”)})
注意:需要了解注解中详细的属性,查看源码。
loadOnStartup=0 注意:默认-1,不随服务器启动,第一次被访问时加载。 配置>=0,则随服务器启动时,加载和实例化,初始化
3.Servlet生命周期
a.Servlet整个生命周期是由容器(Tomcat)来控制。
b.阶段:加载实例化->-初始化->-服务–>--销毁
构造方法–>--init()–>--service()–>--destroy()(Servlet被卸载时,容器停止时)
1次---------1次---------多次-------1次
c.init()和init(ServletConfig config) :默认先调用有参的init方法,然后再调用无参init,其实无参init被有参的调用的。
d.config: 对应jsp中的内置对象config。用来获取Servlet配置的初始化参数:config.getInitParameter(“name”)
4.service()和doGet()及doPost()关系
请求服务先调用service()方法,在service方法中,获取请求的方法Method,判断后调用对应的doGet和doPost()
5.servlet中获取内置对象
request,response由容器注入进来的。
config: 使用servlet中的方法:getServletConfig();
application: 使用servlet中的方法:getServletContext();
session: 使用的是HttpServletRequest的方法 ,request.getSession();
out: 使用的是HttpServletResponse的方法:response.getWriter();
6.session的两种方式
request.getSession(true)和request.getSession(false)
默认的request.getSession()等价于request.getSession(true)
true: 先获取session,如果获得到,则返回。如果获取不到,则创建新的session并返回
false:获取session ,获取到则返回,获取不到,则返回null。
7.JSP的本质是Servlet
JSP执行过程问题:
jsp先转译->-.java–编译–.class–>--加载和运行
查看:tomcat目录下的work目录中查看。如果是idea,发布的项目不在tomcat安装目录,每次创建临时的tomcat
8.会话跟踪技术
(http协议是一种无状态协议)
常见协议:http,ftp,smtp,pop,tcp,udp
a.session b.cookie c.URL重写 d.隐藏域
9.session和cookie :
a. session的实现基于cookie,cookie保存jsessionid。
b. 存储位置 cookie存在客户端,session的数据存储在服务器端
c. 数据: cookie存字符串 session存对象,各种类型
d. 安全性: cookie在客户端容易获取查看到的,session的数据在服务器,不容易获取到。
10.session失效问题
- 超时,超出最大非活动间隔时间; session.setMaxInactiveInterval(1000); //最大非活动间隔时间
\2. session.invalidate()
\3. 关闭浏览器(本质是超时)
11.乱码总结
请求乱码 响应乱码 数据库乱码
请求乱码:get请求和post请求 两种乱码
post乱码: request.setCharacterEncoding(“utf-8”);
注意:提交请求的页面的编码必须和处理的的编码一致,否则不起作用。
get乱码:a. s = new String(s.getBytes(“iso-8859-1”),“utf-8”);
b. 修改tomcat配置 server.xml:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URLEncoding="utf-8"
redirectPort="8443" />
响应乱码:response.setContentType(“text/html;charset=utf-8”);
数据库乱码: 入库前,一定要先排除请求获取的参数乱码。保证入库时,传入sql的是中文。
如果中文入库后,查出来乱码了,说明数据库问题。
查询数据库的编码 show variables like’char%’,然后改正数据库编码
12.JSP内置对象
page request out response session application config exception pageContext
13.作用域对象
pageContext,request,session,appliaction
14.包含
动作包含:jsp:include
指令包含:<%@includ file="">
区别:
指令包含执行过程是先把包含页面和被包含页面转译合成一个java文件,再编译,执行。共享pageContext对象的。
动作包含执行过程是先把包含页面和被包含页面分别转译和编译成多个文件,再执行时,调用被包含页面。不共享pageContext对象
15.JSP元素
注释、html、表达式、小脚本、声明、指令、动作
注意:表达式<%=%> 不能带分号
小脚本每句话都要带分号,小脚本中不能声明方法。
声明<%! %> ,用来声明属性和方法的,但是不能写表达式语句
16.转发和重定向区别
-
转发和重定向
- 转发
- 重定向
-
请求次数
- 重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求
- 转发是服务器收到请求后为了完成响应跳转到一个新的地址
- 重定向至少请求两次,转发请求一次;
-
地址栏不同
- 重定向地址栏会发生变化
- 转发地址栏不会发生变化
-
是否共享数据
- 重定向两次请求不共享数据
- 转发一次请求共享数据
- 在request级别使用信息共享时,使用重定向一定会出错出错
-
跳转限制
- 重定向可以跳转到任意URL
- 转发只能跳转本站点资源
-
发生行为不同
- 重定向是客户端行为
- 转发是服务器端行为
17.get 和 post 区别
- Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
- Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
- Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
- Get执行效率却比Post方法好。Get是form提交的默认方法。
18. B/S和C/S区别
-
建立基础不同
- C/S是建立在局域网的基础上的,通过专门服务器服务
- 而B/S是建立在广域网的基础上的,不必有专门的网络硬件环境
-
硬件环境不同
- C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务
- B/S 建立在广域网之上的,不必有专门的网络硬件环境,例与电话上网,租用设备,信息自己管理。有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
-
对安全要求不同
- C/S 一般面向相对固定的用户群,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息.
- B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群,对安全的控制能力相对弱
-
对程序架构不同
- C/S 程序更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑。
- B/S对安全以及访问速度的多重考虑, 建立在需要更加优化的基础之上。
-
软件重用不同
- C/S 程序不可避免的考虑整体性, 构件的重用性不如在B/S要求下的构件的重用性好。
- B/S对的多重结构,要求构件相对独立的功能, 能够相对较好的重用。
-
系统维护不同
- C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级。 升级难, 可能是再做一个全新的系统
- B/S 构件组成,方面构件个别的更换,实现系统的无缝升级。 系统维护开销减到最小;用户从网上自己下载安装就可以实现升级。
-
处理问题不同
- C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关。 应该都是相同的系统
- B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的;与操作系统平台关系最小。
-
用户接口不同
- C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
- B/S 建立在浏览器上, 通过WEB服务或其他公共可识别描述语言可跨平台,使用更灵活。不仅可应用在Window平台上,还可应用于unix/Linux等平台。
-
信息流不同
- C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低
- B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更象交易中心。
19. 解释MVC
-
多层架构的设计模式
- M:model–模型—处理业务和数据
- V:View–视图------收集和展示数据
- C:Controller–控制器—接受请求,调用业务,根据业务状态跳转
-
优点:
- 分工明确,有利于分工,各司其职
- 有利于维护和拓展
- 代码可重用
-
缺点:
- MVC搭建相对繁琐,适用于大型项目
19. 解释MVC
-
多层架构的设计模式
- M:model–模型—处理业务和数据
- V:View–视图------收集和展示数据
- C:Controller–控制器—接受请求,调用业务,根据业务状态跳转
-
优点:
- 分工明确,有利于分工,各司其职
- 有利于维护和拓展
- 代码可重用
-
缺点:
- MVC搭建相对繁琐,适用于大型项目
- 小型项目,modeli,快速构建项目