栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JSP&MVC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSP&MVC

jsp是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写
jsp只对网页中的要动态产生的内容采用Java来编写,对固定不变的静态内容采用HTML页面的方式编写

jsp运行流程
客户端发出请求
web容器将jsp转化为servlet代码(.java)
web容器将转化为servlet代码编译(.class)
web容器加载编译后的代码并执行
将执行结果响应给客户端
.java文件和.class文件存储的位置:C:UsersAdministrator.IntelliJIdea2019.1systemtomcat_JavaEEworkCatalinalocalhostDay_08orgapachejsp
WEB容器:

Servlet 是基于 Java 语言的,运行 Servlet 必然少不了 JRE 的支持,它负责解析和执行字节码文件(.class文件)。然而 JRE 只包含了 Java 虚拟机(JVM)、Java 核心类库和一些辅助性性文件,它并不支持 Servlet 规范。要想运行 Servlet 代码,还需要一种额外的部件,该部件必须支持 Servlet 规范,实现了 Servlet 接口和一些基础类,这种部件就是 Servlet 容器。

Servlet 容器就是 Servlet 代码的运行环境(运行时),它除了实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持,还需要管理由用户编写的 Servlet 类,比如实例化类(创建对象)、调用方法、销毁类等。

Servlet 容器在整个 HTTP 请求流程中的位置:

Web 服务器是整个动态网站的“大门”,用户的 HTTP 请求首先到达 Web 服务器,Web 服务器判断该请求是静态资源还是动态资源:如果是静态资源就直接返回,此时相当于用户下载了一个服务器上的文件;如果是动态资源将无法处理,必须将该请求转发给 Servlet 容器。

Servlet 容器接收到请求以后,会根据配置文件(web.xml)找到对应的 Servlet 类,将它加载并实例化,然后调用其中的方法来处理用户请求;处理结束后,Servlet 容器将处理结果再转交给 Web 服务器,由 Web 服务器将处理结果进行封装,以 HTTP 响应的形式发送给最终的用户。

常用的 Web 容器有 Tomcat、Jboss、Jetty、WebLogic 等,为了简化部署流程,Web 容器往往也会自带 Web 服务器模块,提供基本的 HTTP 服务

总结
Servlet 容器就是 Servlet 程序的运行环境,它主要包含以下几个功能:
实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持;
管理用户编写的 Servlet 类,以及实例化以后的对象;
提供 HTTP 服务,相当于一个简化的服务器。
语法 注释
   
    html格式的注释,只能注释jsp中的静态内容,它会最终出现在浏览器的源代码中
<%-- 开发思路 --%> 	
    jsp格式的注释,可以注释掉jsp中的任何内容,它不会出现在浏览器的源代码中
脚本
脚本就是JSP中用来书写java代码的部分,主要有三种写法:
脚本片段
      语法: <%  Java代码  %> 
      作用:编写逻辑Java代码,这里面编写的代码, 编译之后会直接出现在servlet的service()方法中
脚本声明
      语法: <%! java代码  %>  
      作用:声明全局变量和方法,这里面编写的代码,编译之后会出现在servlet的成员变量位置
      ps:貌似不能定义void类型的方法
脚本表达式
       语法:<%= java代码  %>  
       作用: 向页面输出字符,这里面编写的代码, 编译之后会直接出现在servlet的service()方法中的out.print("")内
  

  <%--脚本片段--%>
  <%
    Date date = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
    String format = simpleDateFormat.format(date);
    System.out.println(format);
  %>

  <%--脚本声明--%>
  <%!
    String name = "杨晨";
    public String birthday(){
      return "你的生日是";
    }
  %>

  <%--脚本表达式--%>
  <%=name%>,<%=birthday()%><%=format%>
  

内置对象
jsp本质上是一个servlet
它们存取数据的范围从小到大依次是:pageContext < request < session < application
pageContext的作用有3个: 
    1) 当前页面共享数据;      
    2) 获取其它八个内置对象  
    3)可以操作4个域对象的数据
内置域对象作用
pageContext代表本页面域,可以在本页面写代码时,往本页面域放数据
request一次请求中共享数据
session一次会话中请求数据
application整个web应用共享数据(相当于context)
内置对象作用
response响应对象
page当前页面对象
out输出对象
configservlet配置对象
exception异常对象(默认关闭)
El表达式
EL(expression Language)表达式语言
语法:${ 表达式 } 
作用:主要用来简化jsp中对java代码的操作。它可以从jsp的域对象中获取数据,还可以执行一些简单的计算。
获取数据
EL只能从域中获取数据
EL从不同域中取值
${pageScope.键名}              从PageContext域中获取
${requestScope.键名}          从HttpServletRequest域中获取
${sessionScope.键名}          从HttpSession域中获取
${applicationScope.键名}   	 从ServletContext域中获取

简化写法  ${键名}   
    依次从四个域(page--->request---->session--->application)中进行查找
    如果从某一个域中找到了,立即返回;如果四个域中都没有,则返回空

获取不同类型的数据
	简单类型:${键名}
	对象类型:${键名.属性名}
	单列集合类型:${键名[索引]}
	双列集合类型:${键名["key"]}
运算
算数运算:  +  -  *  /  % 
比较运算:>  <  >=  <=  ==  != 
逻辑运算:&&(and)  ||(or)   !(not)
三元运算:条件表达式? 真 : 假
空运算: {empty 对象}   {not empty 对象}
  注意: 对于字符串、集合、数组类型,它除了判断对象本身,还会判断长度
其他功能
获取项目虚拟目录:${pageContext.request.contextPath}
忽略EL表达式
  忽略所有EL表达式:<@page isELIgnored="true">	
  忽略单个EL表达式:   ${表达式}


<%
    
    pageContext.setAttribute("name","杨晨");
    request.setAttribute("age",23);
    session.setAttribute("sex","男");
    List hobby = new ArrayList<>();
    Collections.addAll(hobby
            ,"悲惨世界"
            ,"歌剧魅影"
            ,"太阳王"
            ,"莫扎特");
    application.setAttribute("hobby",hobby);
    
    Person person1 = new Person("杨晨", 23, "男", hobby);
    Person person2 = new Person("猫爬", 23, "男", hobby);
    Person person3 = new Person("鸽鸽", 23, "男", hobby);
    Person person4 = new Person("鸭梨", 23, "男", hobby);
    session.setAttribute("me",person1);
    
    Map map = new HashMap<>();
    map.put("杨晨",person1);
    map.put("猫爬",person2);
    map.put("鸽鸽",person3);
    map.put("鸭梨",person4);
    session.setAttribute("map",map);
%>
${name}
${age}
${sex}
${hobby}
${me.hobby}
${me.hobby[0]}
${me.hobby[1]}
${me.hobby[2]}
${me.hobby[3]}
${map["鸽鸽"]}
${me.age-1>23&&me.name.equals("杨晨")?1:2}
${empty me}
${empty you}

JSTL表达式
JSTL:   Jsp标准标签库,是一套由Apache组织开源的jsp标签库,用来替换和简化jsp页面中java代码。
if标签: if标签用于单分支条件判断,相当于Java中的`if(条件){}`的用法,它的常见用法如下:
    
	条件成立的逻辑
    
forEach标签:forEach用于循环遍历,常见属性如下:
	begin:		循环的开始
	end:   	循环的结束
	var:    	循环过程中的临时变量
	step: 		设置步长 
	items:		指定要循环的对象(被遍历的集合)
	varStatus:	保存了当前循环过程中的信息
		current:当前对象相当于var记录的对象
		first:判断当前元素是否为第一个
		last:判断当前元素是否为最后一个
		index:当前索引(从0开始)
		count:当前第几个(从1开始)
	
	forEach标签的主要用法有下面两种:
    1. 普通for循环
    	
			${x}
    	
	2. 增强for循环
        
            ${x}
        
MVC 开发模式演变
纯Servlet开发 
    全部代码都采用Servlet开发,包括静态页面部分
    缺陷:使用Servlet输出页面,是非常麻烦的
纯JSP开发 
    全部代码都采用JSP开发,在JSP页面中使用脚本输出java代码
    缺陷:如果Java代码的逻辑十分复杂,就会出现大量的Java业务逻辑代码,开发体验比较差
Model1模式
    采用 Jsp + JavaBean开发;JavaBean负责业务逻辑;Jsp负责参数接收、请求调度、页面渲染
    缺陷:Jsp的职能过多,耦合性太高
MVC模式
	MVC是Model-View-Controller(模型-视图-控制器)的简称,其主要作用是将视图展示和业务控制代码分离开来。
	Model(模型): 指的就是数据或者数据的来源(dao+service+domain)
	View (视图)  : 指的就是可视化界面(jsp)
	Controller(控制器): 控制器作用于模型和视图上,负责请求的调度,它使视图与模型分离开来 (servlet)
三层架构
为了实现代码的解耦合,通常会将一个应用划分成三层架构:表示层、业务层、数据层。
    表示层(web层):与浏览器进行数据交互
    业务层(service层): 专门用于处理业务逻辑 
    持久层(dao层): 与数据库进行数据交换
三层架构是对mvc模式的一种细化,它将Model进一步分为service层和dao层
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293293.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号