Servlet总结

Class HttpServlet中两个service()如何互选调用

在这里插入图片描述
在这里插入图片描述

解决arg0

没有源码无法识别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为甚HttpServlet不用service()

在这里插入图片描述

中文乱码问题

原则:从编写到显示的整个过程都采用同一种编码格式
1.eclipse默认编码改为utf-8
2.传输过程中的乱码

  1. 1.request请求乱码 request.setCharacterEncoding(“utf-8”);

  2. 2.response响应乱码 response.setCharacterEncoding(“utf-8”);response.setContentType(“text/html;charset=utf-8”);I上面还会出现乱码的解决方案
    在配置文件server.xml中配置 URIEncodin=“UTF-8”

  3. 3.浏览器显示问题

  4. 4.数据库存储乱码

  5. 5./在web的前台代表的是tomcat的路径http://ip:端口号
    /在web的后台是web应用路径http://ip:端口号/项目名
    在这里插入图片描述

跳转问题

在这里插入图片描述
1.服务器内部跳转,请求分发跳转

	 特点:
	 	1.同一个请求
		2.能够获取请求的数据
		3.浏览器地址不会发生变化
		用法:
		1.获取转发器RequestDispatcherr
			1.通过request获取转发器
			2.通过ServletContext上下文获取转发器 
		2.进行跳转
			1.通过forward跳转:会清空前一个response输出流的信息
			2.通过include跳转:不会清空前一个response输出流的信息,
			    而且还会保存起来到跳转页面输出.
	 ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;
	 而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路.
	 因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。 

2.重定向跳转 ,服务器外部跳转
通过response.sendRedireact(path);
path用绝对还是相对路径?

 特点:
 	1.不是同一个请求,而是发送了多次请求
 	2.不能获取请求的数据
 	3.流浪器地址发生改变
 	4.能够访问其他的外部资源
 用法:(就一种方式↓)
 	response.sendRedireact(path);
 重定向中/不是代表资源路径

两者的注意点:

req.setAttribute("name", "张三");这个方法只对内部跳转有效果
使用request.setAttribute时不能使redirect而是forward。
即是将请求转发而不是重定向.

连接池

连接池访问数据库,当服务器启动的时候就会连接数据库
在这里插入图片描述
在这里插入图片描述

路劲问题

根本:都是相对tomcat下的路劲
在Servlet中使用绝对路径进行转发和重定向,他们的路径起算点是不相同的,转发时以项目名称作为起算点,重定向时以端口号作为起算点。而如果使用相对路径进行重定向或转发,他们都是以当前所在路径作为起算点。

持久化

会话跟踪技术:cookie,session
为什么要用cookie或者session?
http协议:无状态协议(不会保存前一个请求信息)
cookie:

主要保存在客户端,以文件的形式保存,在服务器端也有对应形式,但是方式不同.
1.原理:
	cookie以文件形式保存于客户端,但是cookie由服务器端产生.
	通过response响应给客户端.由客户端保存起来.
	每次客户端发送请求时,会将cookie数据发送给服务器端.
	所有服务器可以操作数据.
2.使用:自动登录功能
3.创建:cookie就是对象!
	使用new 来创建 new cookie();
4.给客户端发送cookie;通过response发送
	response.addCookie();//该发送吧cookie添加到响应
5.获取cookie
	通过request.getCookies();
6.实践总结:
	不同浏览器之间cookie不共享
	关闭浏览器再次打开之后cookie就消失了.
7.设置cookie保存时间
	cookie的有效期(存活期)单位:秒
	默认就是浏览器开启不关闭期间,一旦关闭浏览器随之cookie消失
	cookie对象提供了setMaxAge(int)来设置cookie有效时间 
8.如果浏览器端禁用了cookie则无法保存cookie
9.在浏览器端保存的cookie只能是字符串文本形式.

session

是保存在服务器端的一个对象.客户端没有session	
1.原理:
	session由服务器端创建,保存在服务器端,由服务器端维护
	以对象的形式保存.
	每一个session对象都会创建一个对应的id,根据id来确定唯一的session
2.创建HttpSession
3.往session存储数据,任何数据类型都可以底层是个object
4.获取session数据
5.总结
	1.JSESSIONID:cookie中的JSESSIONID和当前session的id保持一致
	2.getSession(boolean) 可以传true或者false,
		true是默认的如果是false不会创建新的session
6.session失效
	1.关闭浏览器
	2.手动使session失效,.通过invalidate()方法会让session失效
	3.当session的不活动时间超过session最大存活期则失效
		不活动时间:就是发呆时间,不累计
		可以修改最大存活期
			1.修改源码(不使用).源码中单位是秒
				session.setMaxInactiveInterval();(不使用)
			2.在配置文件中去配置web,xml(单位是分钟)
				<session-config>
					<session-timeout>20</session-timeout>
				</session-config>

域对象

ServletContext是JavaWeb四大域对象之一:

  1. PageContext;在一个jsp页面有效
  2. ServletRequest;在内部跳转有效 使用:提示错误信息
  3. HttpSession;不关浏览器都有效
  4. ServletContext;不关服务器都有效\

httpServletRequest提供的方法

在这里插入图片描述
url是一个确定的地址,uri是给一个网络资源起名

ServletContext提供的方法

获取ServletContext对象
ServletContext context = getServletContext();
在这里插入图片描述

前端路径中base标签

在这里插入图片描述
实际使用情况如下:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

servlet生命周期

第一阶段:类加载和实例化对象,主要工作就是调用构造器创建对象
servlet是单例模式
第二阶段:对象的初始化阶段,主要通过调用init方法给属性赋值
对象创建之后初始化操作也只会走一次
第三阶段:服务阶段,主要调用ervice来处理请求和响应
会多次调用
第四阶段:对象的销毁阶段,主要调用destory销毁对象,释放内存
tomcat正常关闭或重启会执行销毁对象释放内存

加载方式:

1.延迟加载(默认方式)

预先加载

在这里插入图片描述

在这里插入图片描述

<load-on-startup>num</load-on-startup>

num>=0都是预加载,但是num越小,优先级越高,num默认是-1

通过配置文件给init初始化值

1.给固定的servlet类配置初始化.

<servlet>
	.
	.
	.
	<servlet-class>...</servlet-class>
	<init-param>
		<param-name> name</param-name>
		<param-vlaue>value </param-value>	
	</init-param>
	....//可以有多个init-param
	<load-on-startup></load-on-startup>

</servlet>

<servlet-mapping>.......<servlet-mapping>
public void init(ServletConfig paramservletConfig) throw Exception {
	String name = paramservletConfig,getInitParameter("name");
	System.out.println(name);
}

2.配置全局变量

<context-param>
		<param-name>name </param-name>
		<param-vlaue>value </param-value>	
</context-param>

<servlet>
	.
	.
	.
</servlet>
public void init(ServletConfig paramservletConfig) throw Exception {
	String name = paramservletConfig,getSerlvetContext().getInitParameter("name");
	System.out.println(name);
}

线程问题

synchronized(this) {

}
如图
在这里插入图片描述

拦截器

三个位置
在客户端和访问资源中间位置
在请求访问资源之前拦截
在响应客户端之前拦截

作用:
可以修改response和request中的数据
可以做日志输出
可以控制字符乱码
可以控制用户访问权限

三个方法

1.init方法:这个过滤器类被服务器创建的时候调用
2.destory方法:过滤器对象被销毁会调用
3.doFilter方法:当过滤器拦截到请求的时候,会调用
只有直接访问对应拦截的请求路径才会触发拦截器doFilter(),但是请求转发不会
<filter>
	<filter-name></filter-name>
	<filter-class></filter-class>
</filter>

<filter-mapping>
	<filter-name></filter-name>
	<url-parttern><url-parttern>
<./filter-mapping>

filter的执行顺序就是web.xml的配置顺刷
拦截范围一定是由小到大

第一种精准匹配
<url-pattern>/SessionServlet</url-pattern>
第二种扩展匹配
<url-pattern>*.html</url-pattern>
第三种路径匹配
<url-pattern>/form/*</url-pattern>
第四种匹配任意URL
<url-pattern>/*/url-pattern>

假如使用同一个拦截器拦截多个地址
一个filter对应多个filter-mapping

<filter>
	<filter-name>TestFilter</filter-name>
	<filter-class>com.briup.filter.TestFilter</filter-class>
</filter>

<filter-mapping>
	<filter-name>TestFilter</filter-name>
	<url-pattern>/form/success.html</url-pattern>
</filter-mapping>

<filter-mapping>
	<filter-name>TestFilter</filter-name>
	<url-pattern>/form/login.html</url-pattern>
</filter-mapping>

注意:路径和扩展匹配不能同时使用
//error
<url-pattern>/test/*.html</url-pattern>
<url-pattern>/*.html</url-pattern>

监听器

作用:监听web中的一些事件的发生,一旦监听到,触发监听器内容操作,时刻监听

1.监听request相关接口
ServletRequestLinstenener接口针对request的创建与销毁
ServletRequestAttributeListener接口针对请求数据的添加,删除,替换

2.监听Session相关接口	
HttpSessionListener接口针对session的创建与销毁
HttpSessiohAttributeLinstener接口针对session数据的添加,删除,替换

3.监听application相关接口
ServletContextListener接口
针对application的创建与销毁
ServletContextAttributeListener
针对application数据的添加,删除,替换
<listener>
	<listener-class></listener-class>
</listener>

文件上传

表单处注意: method 必须是post
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值