JSP学习

emmm
总的来说,我python还没学会,为啥开始学java了呢
算了学吧

一、JSP和Severlet区别

参考知乎:https://www.zhihu.com/question/37962386/answer/87758781

1、不同之处在哪?

  • Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容
  • JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容

2、各自的特点

  • Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差
  • JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的

3、通过MVC双剑合璧

既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model-View-Controller)模式非常适合解决这一问题。

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):

  • Controller——负责转发请求,对请求进行处理
  • View——负责界面显示
  • Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现

在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:

<figure>

<noscript><img src="https://pic4.zhimg.com/229cf9ff5b1729eaf408fac56238eeb3_b.png" data-rawwidth="842" data-rawheight="326" class="origin_image zh-lightbox-thumb" width="842" data-original="https://pic4.zhimg.com/229cf9ff5b1729eaf408fac56238eeb3_r.jpg"></noscript>

image

</figure>

  1. Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
  2. Controller(Servlet)调用核心业务逻辑——Model部分,获得结果
  3. Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容
  4. 动态生成的HTML内容返回到浏览器显示

MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。


二、目录结构

WEB-INF目录

1、是JAVA的Web应用的安全目录,所谓安全就是指客户端无法访问,服务端可以访问
2、包含文件

  • web.xml:项目部署文件,比如设置首页
  • classes文件夹:用于存放*.class文件
  • lib文件夹:用于存放需要的jar包

如何修改Tomcat服务器默认端口

默认是8080
方法:修改conf/server.xml


三、JSP介绍

  • 简介

是Java Server Pages的缩写,实现了在Java当中使用HTML标签。
是一种动态网页技术,符合JAVAEE标准。
其根本是一个简化的Servlet设计,与Servlet一样,在服务端执行。

什么是Servlet?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层

Servlet架构

参考:http://www.runoob.com/servlet/servlet-intro.html

什么是JAVAEE?

Java EE是Java平台企业版的简称(Java Platform, Enterprise Edition),用于开发便于组装、健壮、可扩展、安全的服务器端Java应用。Java EE建立于Java SE之上,具有Web服务、组件模型、以及通信API等特性,这些为面向服务的架构(SOA)以及开发Web2.0应用提供了支持。


  • 动态网站开发技术对比

*JSP:Java平台,跨平台性好,安全性高,适合开发大型、企业级Web应用程序,特别是分布式的计算框架(hadoop),比如电子银行、网上交易所……
*Asp.net:.Net平台,简单易学,直接拖组件,但是安全性和跨平台性差
*Php:简单高效,成本低、开发周期短,适合中小型企业Web应用开发(LAMP:Linux+Apache+MySQL+PHP)


四、新建一个JSP项目

第一步

第二步

配置tomcat服务器




删除target runtime配置的方法
window->preferences->server-> runtime environments

接下来就是next--- finish----就行了

修改字符集的方法



五、JSP基础语法

JSP页面组成部分

静态内容、指令、表达式、小脚本、声明、注释组成

JSP页面组成部分

1、JSP指令

  • page指令:通常位于jsp页面顶部,同一页面可以有多个page指令
<%@page 属性1="属性值" 属性2="属性值1,属性值2" 属性n="属性值n"%>
page指令属性

还经常会出现一个pageEncoding属性,它是JSP文件本身的编码
而contentType的charset是服务器发给客户端的内容编码,contentType更常用

<%@page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%>
  • include指令:将一个外部文件嵌入到页面JSP文件中,同时解析这个页面中的JSP语句
  • taglib指令:是一个标签库,可以自定义新标签,在JSP页面中使用

2、JSP注释

  • HTML注释:在客户端可见
<!-- HTML注释 -->
  • JSP注释:在客户端不可见
<%-- JSP注释 --%>
<%
       //单行注释
      /*多行注释*/
 %>

3、JSP脚本

<% Java代码 %>

4、JSP声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。
在JSP文件中,必须先声明这些变量和方法然后才能使用它们

<% !Java代码 %>

5、JSP表达式

<% =表达式 %>

注意:表达式不以分号结束

6、JSP页面生命周期

1) jspService()方法

  • 调用此方法来处理客户端请求
  • 对每一请求,JSP引擎创建一个新的线程来处理
  • 如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程,每个客户对应一个线程。
    优点:以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。由于该Servlet始终驻于内存,所以响应非常快。
    缺点:多线程带来的同步问题,比如资源共享、资源安全。

2) 只要JSP页面经过修改发生了改变,那我们JSP引擎都要重新编译,生成最新的字节码文件。


六、JSP内置对象

1、简介

是Web容器创建的一组对象,使用时不需要new
比如out.println(xxx)的 out

2、九大内置对象

常用:out、request、response、session、application
不常用:page、pageContext、exception、config

3、Web程序的请求响应模式

用户发送请求(request)
服务器给用户响应(response)


实例
比如一个登录页面
用户输入用户名、密码,点击登录,向服务器发送请求,在请求对象中封装了用户名和密码
服务器接收用户的请求,判断用户名和密码,给客户端发送响应页面


4、out对象

理解缓冲区(Buffer)

内存中的一块区域用来保存临时数据

  • 定义
    out对象是JspWriter类的实例,是向客户端输出内容常用的对象
  • 常用方法
1、void println() //向客户端打印字符串
2、void clear() //清除缓存区的内容,如果再flush之后调用会发生异常
3、void clearBuffer() //清除缓存区的内容,如果再flush之后调用不会发生异常
4、void flush() //将缓冲区内容输出到客户端
5、int getBufferSize() //返回缓冲区以字节数的大小,如不设缓冲区则为0
6、int getRemaining() //返回缓冲区还剩多少可用
7、boolean isAutoFlush() //返回缓冲区满时,是自动清空还是抛出异常
8、void close() 关闭输出流


5、request对象

get和post提交方式的区别

<form name="" action="动作" method="get/post"></form>

  • get:
    以明文方式(数据在URL里可以看到)通过URL提交数据。数据大小不超过2KB。
    安全性低,效率高。
    适合提交数据量不大,安全性不高的数据。比如搜索、查询等功能
  • post:
    将用户提交的信息封装在HTML HEADER内。
    适合提交数据量大,安全性高的用户信息。比如注册、修改、上传等功能。


  • 定义
    客户端的请求信息被封装在request对象中,通过它了解客户需求,做出响应。
    request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

常用方法


request.setCharacterEncoding("utf-8");
解决中文乱码问题,但无法解决URL传递中文乱码问题,这种情况下只能通过修改tomcat配置文档server.xml才能解决


6、response对象

  • 定义
    该对象包含响应客户请求的有关信息,但在JSP中很少直接使用到
    具有页面作用域,即访问一个页面时,该页面内的response对象只对这次访问有效,其他页面的response对象对当前页面无效

常用方法


PrintWriter的打印总是提前于out对象,可以用out.flush()调换顺序

请求重定向与请求转发

  • 重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存地址的URL地址变了
  • 转发:服务端行为,request.getRequestDispatcher().forward(req,resp),是一次请求,转发后请求对象会被保存地址栏的URL不变


7、session对象(未学完)

  • 定义
    客户端与服务器的一次会话
    指用户从进入网站到关闭浏览器所经过的时间,也就是用户浏览网站花费的时间
    实际上是一个特定的时间概念
    保存在服务器的内存中
    用户与session一一对应
  • 生命周期
    1、创建
    2、活动
    3、销毁


8、application对象(未学完)

  • 定义
    实现用户间数据的共享,可存放全局变量
    开始于服务器的启动,终止于服务器我的关闭
    在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作


9、page对象(未学完)

  • 定义
    指向当前jsp页面本身,有点像类中的this指针


10、exception对象(未学完)

  • 定义
    是一个异常对象


七、Javabean

  • 简介

是符合某种特定的规范的Java类。
好处:解决代码重复编写,减少代码冗余,功能区分明确,提高代码维护性。

  • 设计原则


例子


  • JSP动作元素(action elements)
1、定义

动作元素为请求处理阶段提供信息;
简单来说就是一对标签,标签遵循XML元素的语法

2、五大类


  • 在JSP页面中使用JavaBeans
1、普通方式

src新建package→package新建class→在class里些方法→在jsp里import包并使用

2、通过jsp动作标签

useBeans、setProperty、getPropety

<jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
// 利用setProperty
    <jsp:setProperty property="*" name="myUsers"/>
    用户名:<%=myUsers.getUsername() %><br>
    密码: <%=myUsers.getPassword() %><br>

//利用getProperty
    用户名:<jsp:getProperty property="username" name="myUsers"/>
    密码:<jsp:getProperty property="password" name="myUsers"/>


  • Javabean的四个作用域范围(scope)


八、JSP状态管理

——http协议的无状态性

无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求。
但是当统一浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚刚那个浏览器。

——保存用户状态的两大机制:Session和Cookie

Session 会话对象 JSP的九大内置对象之一
Cookie 客户端技术

——Cookie

1、什么是Cookie
是Web服务器保存在客户端的文本信息

2、应用场景

  • 判定注册用户是否已经登录网站(记住用户名和密码)
  • “购物车”的处理

3、作用

  • 对特定对象的追踪
  • 保存用户网页浏览记录与习惯
  • 简化登录
  • (安全风险:容易泄露用户信息)

4、在JSP里创建和使用Cookie

  • 创建Cookie对象
Cookie newCookie = new Cookie(String key,Object value);
  • 写入Cookie对象
response.addCookie(newCookie);
  • 读取Cookie对象
Cookie[] cookies = request.getCookies();

5、常用方法


String:因为是文本信息

6、Session与Cookie区别

  • 共同点:都是保存用户状态的一种机制,都会过期。
  • 区别:



九、JSP指令与动作元素

——include指令与动作

1、include指令

//file是要包含的页面
<%@ include file="URL"%>

2、include动作

//page是要包含的页面
//flush是被包含的页面是否从缓冲区读取
<jsp:include page="URL" flush="true/false" />

3、include指令与动作对比(面试总问)

——forward动作

//URL是跳转的页面地址
<jsp:forward page="URL" />

等同于

request.getRequestDipatcher("/url").forward(request, response)

——param动作

常常与<jsp:forward>一起使用,作为其子标签
在跳转页面时传递参数

<jsp:param name="参数名" value="参数值"/>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容