javaEE(3)——Jsp,mvc,分页,过滤器,监听器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45044097/article/details/100878074

1 JSP

java servlet page(本质上是一个servlet)
jsp:第一次访问,把先jsp翻译成一个java文件,然后再进行编译class

1.1 JSP基本语法

指令元素;脚本元素;动作元素
在这里插入图片描述

  1. 指令:
    page
    配置jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.*"%>

contentType==> response.setContentType():设置响应体类型以及字符集;
errorPage:当前页面发生异常后,会自动跳转到指定的错误页面;
isErrorPage:标识当前也是是否是错误页面,true是,可以使用内置对象exception;false否,默认值,不可以使用内置对象exception

include
页面包含,导入页面的资源文件
< %@include file = “top.jsp” >

taglib
导入资源

  1. 脚本: < % 在service中添加内容 % >
  2. 表达式: < %= 放进service中,等同于out.print(),等同于EL表达式 % >
  3. 声明 : < %! 方法 % > 写在类中

1.2 九大内置对象

隐含对象:
request, response, session, application, config
page, pageContext, exception, out(ajax所有的响应)
在这里插入图片描述

1.3 四大作用域

四种范围对象作用域从小到大顺序如下:pageContext----request----session----application。

  1. page页面域:作用域当前页面
    近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。
  2. request请求域:作用域当前请求
    请求作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。
  3. session会话域:当前会话
    会话作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。
  4. application应用域:整个应用程序
    应用作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。

后端服务器的三个作用域对象:
在Servlet里可以用一个名字绑定一个对象
谁能看到并使用这个属性,它能存活多久
在这里插入图片描述

2 MVC模式

在这里插入图片描述
在模型1中,JSP页面嵌入大量的流程控制语句以及部分的业务逻辑代码;
可以将这部分代码提取,放置到一个单独的组件中,这个组件叫控制器,而引入了控制器的web程字架构就是Model2;
Model 2符合MVC架构模式
➢M—Model: javabean业务逻辑处理中心(service,bean,util,dao)
➢V—View: jsp.html 界面展示
➢C—Controller: Servlet 接收请求和调用JavaBean来进行相应的响应

2.1 Model 2中MVC的角色

➢Servlet作为控制器层组件:
负责接收请求
实例化JavaBean且对业务逻辑进行处理
为JSP准备承载了数据的JavaBean
将请求转发给适合的JSP页面

➢JSP作为视图层组件:
负责提交用户请求至控制器
负责页面数据的动态显示

➢JavaBean作为模型层组件:
JavaBean主要有两类:
一类用于封装业务逻辑;一类用于承载数据

2.2 Model2优缺点

优点:
➢将页面显示、业务逻辑和流程控制分离开来
➢JSP负责页面的动态显示
➢JavaBean负责承载数据和业务处理
➢Servlet 负责流程的控制
➢有利于前台页面处理人员和程序开发人员的分工

缺点:
➢加大了程序开发的复杂度

在这里插入图片描述

3 分页技术

3.1 前端分页

一次性把所有数据请求放置前端,利用js来进行分页展示
前端控件
https://datatables.net/

 <!--引用-->
	<link rel="stylesheet" type="text/css" href="css/jquery.dataTables.min.css">
	<script type="text/javascript" src="js/jquery-1.7.1.min.js" language="JavaScript"></script>
	<script type="text/javascript" src="js/jquery.dataTables.js" language="JavaScript"></script>
	<script type="text/javascript" src="js/jquery.dataTables.min.js" language="JavaScript"></script>
<!--js写法-->
<script>
  	$(function(){
  		$("表格").dataTable({
  		/*基本参数设置,以下参数设置和默认效果一致*/  
 			"iDisplayLength":5,//设置每页的行数
			"bPaginate": true, //翻页功能  
            "bLengthChange": true, //改变每页显示数据数量  
            "bFilter": true, //过滤功能  
            "bSort": true, //排序功能  
            "bInfo": true,//页脚信息  
            "bAutoWidth": true,//自动宽度  
            /*默认排序设置*/  
            "aaSorting": [[ 0, "desc" ]],//设置第5个元素为默认排序  
            /*默认翻页样式设置*/  
            "sPaginationType": "full_numbers",  
            /*是否开启主题*/  
            "bJQueryUI": true,  
            /*语言设置*/  
            "oLanguage": {  
            	"sLengthMenu": "每页显示 _MENU_条",  
                "sZeroRecords": "没有找到符合条件的数据",  
                "sInfo": "当前第 _START_ - _END_ 条 共计 _TOTAL_ 条",  
                "sInfoEmpty": "木有记录",  
                "sInfoFiltered": "(从 _MAX_ 条记录中过滤)",  
                "sSearch": "搜索:",  
                "oPaginate": {  
                	"sFirst": "首页",  
                    "sPrevious": "前一页",  
                    "sNext": "后一页",  
                    "sLast": "尾页"  
                }  
             }  
  		}
  	);	 	
  });
</script>

3.2 后端分页

每次只获得当前页的数据

4 过滤器

4.1 概述

一个中间组件,用于拦截源数据和目的数据间的消息;
过滤二者之间传递的数据;
所有的过滤器必须实现javax.servlet.Filter接口
在这里插入图片描述
Web应用上部署多个过滤器
过滤器可以组成一个过滤器链。 链中的每个过滤器负责特定的操作和任务,客户端的请求和响应在这些过滤器之间传递。
在这里插入图片描述

4.2 过滤器实现

在这里插入图片描述

  1. 实现接口Filter
  2. 实现接口方法init, doFilter, destroy
  3. 配置 web.xml
<!-- 实例化-->
<filter>
<filter-name> setEdingcodeFilter </filter-name>
<filter-class> filter.SetEncodingFilter </filter-class>
</filter>
<!--要过滤请求-->
<filter-mapping>
<filter-name> SetEdingcodeFilter</filter-name>
<url-pattern> / * <url -pattern>
/*    *.do    /SelectAll    /page/*---过滤所有Page下的请求  */
</filter-mapping>

5 监听器

监听session, request, application这三个对象里存取数据的变化;
监听器对象可以在事情发生前、发生后可以做一些必要的处理;
Servlet监听器主要目的是给Web应用增加事件处理机制,以便更好地监视和控制Web应用的状态变化。
在这里插入图片描述

5.1 监听器小案例

//过滤器,设置编码字符集
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter("/*") 
public class SetEncodingFilter implements Filter {
	private FilterConfig config;
	public SetEncodingFilter() { }
	@Override
	public void destroy() {}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("过滤器,设置编码字符集");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		//放行,进入下一个过滤器
		chain.doFilter(request, response);
	}
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		config = filterConfig;	
	}
}
//request.getSession().setAttribute("user", username);
//在LoginServlet中要先放入对象,在过滤器中判断数据是否为空
@WebFilter(urlPatterns= {"/page/*", "*.do"})  //过滤所有 page目录下的页面,后缀为.do的servlet
......
@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 判断是否存在数据,存在数据:之前登陆过,没有数据说明没有登录过
		Object object = ((HttpServletRequest) request).getSession().getAttribute("user");
		System.out.println("---------");
		if(object != null) {
			System.out.println(object);
			chain.doFilter(request, response);
		} else {
			((HttpServletRequest) request).getSession().setAttribute("msgss", "请先登录");
			// 路径上的处理     /直接把项目路径抹去  拼接成请求路径
			//((HttpServletResponse)response).sendRedirect("/webDay7/index.jsp");
			((HttpServletResponse)response).sendRedirect("/music/login.jsp");
		}
	}

猜你喜欢

转载自blog.csdn.net/weixin_45044097/article/details/100878074