Web总复习

web:
软件架构:
b/s; B/S结构即浏览器/服务器(Browser/Server)? 优点:只需要编写服务器端程序; 缺点:安全性较差
c/s C/S结构即客户端/服务器(Client/Server) 优点:安全性比较好 缺点:软件更新时需要同时更新客户端和服务器端两端,比较麻烦
web资源:
动态: 页面中出现了很多的变量,需要交互使用
静态: 主要用于展示信息
tomcat:
目录:
bin 该目录下存放的是二进制可执行文件
conf 目录下有四个最为重要的文件?
server.xml 配置整个服务器信息
tomcatusers.xml 保存的是tomcat的用户名及密码,以及用户的角色信息
web.xml 部署描述符文件
context.xml 对所有应用的统一配置
lib :Tomcat的类库,里面是一大堆jar文件
logs:这个目录中都是日志文件
temp:存放Tomcat的临时文件
webapps:存放web项目的目录,其中每个文件夹都是一个项目
work:运行时生成的文件,最终运行的文件都在这里

配置端口号: 打开conf\server.xml文件 例子:

http://localhost:8080/项目名称/资源路径(url-pattern中配置的路径或页面路径)

http协议:
即超文本传输协议 这个协议详细规定了浏览器和万维网服务器之间互相通信的规则

1请求协议:    客户端发送给服务器的格式               	
	请求首行:
	请求头: Referer请求头是比较有用的一个请求头,它可以用来做统计工作,也可以用来做防盗链。
	空行

请求体:

请求方法:
get:没有请求体
post:有请求体

2响应协议:    服务器发送给客户端的格式
	响应首行:
	响应头:
	空行
	响应体:

	响应状态码:

200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求
304:
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:请求资源找到了,但服务器内部出现了错误

servlet:
服务器端的小程序
接受请求,处理请求,完成响应
servlet是单例的,线程不安全;

完成的3种方式:

实现:Servlet(接口)3个生命周期方法:init()、service()、destory()
继承:GenericServlet(抽象类)一个方法:重写service()
继承HttpServlet(抽象类)没有方法

servlet在web.xml中的配置:
<servlet>
	<servlet-name>任意起的一个名称,一般会使用servlet的类名</servlet-name>-----3
	<servlet-class>servlet的全名  就是包名.类名.</servlet-class>------4
</servlet>
要与上面的servlet-name的值一样------2 /名称 ------1
配置文件的加载流程:1-2-3-4

url-pattern中的配置:

完全匹配:/aaa
通配符:/* /aaa/* *.jsp
继承tomcat总配置中web.xml中的配置 / 表示没有任何的servlet可以匹配时,报出404

servlet的生命周期:

1.请求第一次访问时servlet被创建 (init()方法执行,初始化),只执行一次
2.每次处理请求service()就会被执行一次
3.销毁方法destory()在销毁Servlet之前执行;只执行一次;

ServletConfig:
作用是:1.可以获取Servlet的名称 2.可以获取初始化参数 3.可以获取ServletContext对象
ServletContext:application
如何获取:3种方式:
1 this.getServletConfig().getServletContext();
2 ServletContext context=this.getServletContext();
3 通过过滤器中init方法里的参数获取ServletContext
例子:private ServletContext context;
public void init(FilterConfig fConfig){
context = fConfig.getServletContext();
}

作用是:
1.他是一个域对象,可以向域中设置参数,3个方法:

	setAttribute(String name,Object value)
	getAttribute(String name);
	removeAttribute(String name);

	2.获取全局初始化参数
			getInitParameter(String name);
			getInitParameterNames();		

	
	3.可以获取web工程下的任意的资源的绝对路径:
		getRealPath(String path); 它返回的是一个String
		例如:context.getRealPath("/"); 获取的是当前web应用在磁盘上的绝对路径.
servlet的3大域对象:

request session ServletContext

response:
表示响应
有可以完成向页面发出响应的方法:
设置状态码:? setStatus(int)
设置状态码并附加错误信息:
设置响应头:
setHeader():适用于单值的响应头
addHeader():适用于多值的响应头
setDateHeader();适用于毫秒值的响应头
setIntHeader();适用于单值的int型的响应头

	完成重定向:  response.sendRedirect(url);
	操作正文: response.getWriter()  response.getOutputStream();
	解决响应的中文乱码问题:response.setContentType("text/html;charset=utf-8");
	设置定时刷新:response.setHeader("refresh", "3;url=/web_03/index.html");

request:
表示请求:
获取提交方式:request.getMethod() ///GET POSt
获取项目名称:getContextPath();
获取url-pattern中的名称:request.getRequestURI()
获取地址栏中的参数列表:request.getQueryString();
获取客户机的ip地址:request.getRemoteAddr();
获取请求头信息:request.getQueryString()
完成内部转发:request.getRequestDispatcher().forward();
设置post请求乱码:request.setCharacterEncoding(“utf-8”);
设置get请求的乱码:new String(msg.getBytes(“iso8859-1”),“utf-8”)

	最主要的是:
	获取表单中单个的参数值:String getParameter(String name)
	获取表单中多个的参数值的数组:String[] getParameterValues(String name)
	获取表单中所有的name:.Enumeration getParameterNames();
	获取表单中所有name和value的map集合:Map<String,String[]> getParameterMap()
	
	他是一个域对象:
	有3个使用的公共方法:
	void setAttribute(String name, Object value)

Object getAttribut时e(String name)
void removeAttribute(String name);

请求转发与重定向的区别?
1.请求转发是服务器内部跳转,所有地址栏上的路径不会改变.
重定向是浏览器在次发送请求,地址栏上的路径会发生改变.

					2.请求转发只发送一次请求。
                      			重定向会发送两次请求.						
					
					3.请求转发只能在当前应用内部跳转.
					  重定向可以在内部跳转也可以跳出当前应用.
					  
					4.请求转发时,因为是内部跳转。它的路径写 /资源路径	                                                              
					 重定向,它的路径需要写   /工程名/资源路径.				 

			 		5.请求转发,可以共享request。
              			        重定向不可能,因为每一次都是一个新的request。						

6.请求转发是通过reqeust发起 request.getRequestDispatcher().forward();
重定向 response发起 response.sendRedirect();

jsp:
jsp是完成动态转换的servlet
在jsp中自带的jsp动态标签,可以使用java脚本,可以使用el表达式,可以使用jstl标签库
9大内置对象
out
config
page
pageContext
application
exception
requestc
session
response

java脚本:
	<%%>
	<%=%>
	<%!%>
3大指令:
<@ page > 
<@ include file="">
<@ taglib >

<jsp:XXX> 动态标签:
	转发:<jsp:forward>
	包含:<jsp:include>
	参数:(转发或包含的子标签,在转发或包含中使用)<jsp:param>
	
el表达式:
	格式:${}
	11个内置对象:
		requestScope
		sessionScope
		pageScope
		applicationScope
		
	可以获取域中的数据;
	
	${pageContext.request.contextPath}是获取任何项目的名称
	
	el函数库:
		?	String toUpperCase(String input):把参数转换成大写
		?	String toLowerCase(String input):把参数转换成小写
		?	int indexOf(String input, String substring):从大串,输出小串的位置!
		?	boolean contains(String input, String substring):查看大串中是否包含小串
		?	boolean containsIgnoreCase(String input, String substring):忽略大小写的,是否包含
		?	boolean startsWith(String input, String substring):是否以小串为前缀
		?	boolean endsWith(String input, String substring):是否以小串为后缀
		?	String substring(String input, int beginIndex, int endIndex):截取子串
		?	String substringAfter(String input, String substring):获取大串中,小串所在位置后面的字符串
		?	substringBefore(String input, String substring):获取大串中,小串所在位置前面的字符串
		?	String escapeXml(String input):把input中“<”、">"、"&"、"'"、""",进行转义
		?	String trim(String input):去除前后空格
		?	String replace(String input, String substringBefore, String substringAfter):替换
		?	String[] split(String input, String delimiters):分割字符串,得到字符串数组
		?	int length(Object obj):可以获取字符串、数组、各种集合的长度!
		?	String join(String array[], String separator):合并字符串数组!

	jstl标签库;
		使用步骤:
			1.倒入jar包
			2.在页面导入标签库
		核心标签库:core
			set
			out
			if
			forEach
			choose
								
		格式化标签库:fmt
			时间格式化:
			<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
			......
			<%
				Date date = new Date();
				pageContext.setAttribute("d", date);
			%>
			<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>

			数值格式化:
			<%
				double d1 = 3.5;
				double d2 = 4.4; 
				pageContext.setAttribute("d1", d1);
				pageContext.setAttribute("d2", d2);
			%>
			<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
			<fmt:formatNumber value="${d2 }" pattern="#.##"/>		

cookie:
浏览器端的会话技术:
Cookie c=new Cookie("","");
response.addCookie©;

Cookie[] cs=request.getCookies();

setMaxAge()设置过期时间

session:
服务器端的会话技术;
request.getSession();
session是一个域对象:有3个公共的操作域的方法:
Session和Cookie的主要区别:
? Cookie是把用户的数据写给用户的浏览器。
? Session技术把用户的数据写到用户独占的session中(服务器端)。

Listener:
监听器:
主要作用:
监听servlet的3大域对象:

共8种监听器:

3种生命周期监听:需要在web.xml中注册
1.ServletContextListener: contextInitialized
contextDestroyed
2.HttpSessionListener:
sessionCreated
sessionDestroyed
3.ServletRequestListener:
requestInitiallized
requestDestroyed
3种域属性的监听:需要在web.xml中注册
4.ServletCo ntextAttributeListener:
5.HttpSessionAttributeListener:
6.ServletRequestAttributeListener:
4.5.6.方法相同:
attributeAdded
attributeRemoved
attributeReplaced
两种感知监听(跟session相关,无需在web.xml中注册)
7.HttpSessionBindingListener:
valueBound
valueUnbound
8.HttpSessionActivationListener:
sessionWillPassivate
sessionDidActivate

Filter:
过滤器:
主要作用:
过滤和拦截资源

使用步骤:

实现Filter接口,在web.xml中配置
配置中的url-pattern中的路径是需要过滤的路径;一般使用 /*

生命周期:   init() 		服务器启动时  会创建Filter  调用init()方法用于初始化  只执行一次
                       doFilter()	在用户每次访问时如果需要放行 就会调用doFilter()
		   destory() 	在销毁Filter之前 服务器会调用一次
Filter链:
	一个资源同时可能被多个过滤器拦截,

chain.doFilter(request,response);方法是跳到下一个过滤器或放行,
放行完成后,会继续执行过滤器中的其他代码;

如果想更换过滤器的执行先后顺序,只需要更换<filter-mapping>的位置即可

4种拦截方式:
REQUEST(默认)
FORWORD
CLUDE
ERROR

servlet+jsp的分页步骤:
1.封装前台能看到的数据信息
被遍历的数据的集合(List<实体类>)select * from 表名 limit (当前页码-1)每页条数,每页条数
当前第几页(page)
总页数的页码(zongye)
拿到总条数,去数据库查询到的结果 select count(
) from 表名 ;
拿到每页条数(自己定义的)

2.封装实体类:
  int page;	//当前页
  int tiao;	//每页几条
  int zongtiao; //总条数
  List<T> date;//后台查询到的数据
  getZongye();//方法是通过  int zongye=zongtiao/tiao; 如果有余数,zongye+1; 
  
  
3.在servlet中创建service层的对象,调用返回值为PageBean<Goods>的对象;
	把分页需要的两个参数通过调用方法传到service层;
	如果对象不为null;就添加到request域中,转发到展示页面;(把封装好的JavaBean数据送到页面)
	
4.创建PageBean对象,依次对属性封装
	page 是从servlet传过来的,直接封装
	tiao 从servlet定义完成之后传过来的,直接封装
	zongtiao 调用dao层的方法,从数据库中查询到的,封装
	date 调用dao层的方法,从数据库中查询到的,封装
	
5.dao层
	要完成分页,两个方法
	count();方法,不需要参数,select count(*) from 表名 ;查询到一个int的结果,返回到service层
	findAll(page,tiao);方法,
		limit后面需要使用两个参数,
		第一个参数是从第几条开始(当前页码-1)*每页条数
		第二个参数是需要每页展示多少条,直接把从service中传来的每页条数设置进去就可以了
		查询到一个结果集,创建集合,把结果集中的数据封装进集合,在把集合返回到service层

猜你喜欢

转载自blog.csdn.net/Angzush/article/details/89044605
今日推荐