接触jsp和servlet

今天无意中看到这个主题,功能强,界面又好看,好像有动力写博客了呢,就顺便把这两天的东西记一下,,,

编辑:通过七牛云配合qimage工具制作图床( https://jverson.com/2017/05/28/qiniu-image-v2/ ),保存的typora图片终于可以在别处显示啦

servlet

idea配置遇到的几个坑:

  1. 在project struct中设置class输出路径到WEB-INF
  2. 写好的Java文件要自己手动编译一下
  3. 最惨的是把 WEB-INF 打成了 WEB_INF,找了半天错fxxx

运行流程:

mYmVoR.png

服务器跳转和客户端跳转:

  • 服务器:服务器自己找到要跳转的页面然后发送给游览器
  • 客户端:服务器发送跳转后的地址给客户端,然后客户端自己再访问跳转的地址

JSP

jsp执行过程:

mYmmJx.png

页面组成元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1. 静态内容
就是html,css,javascript等内容
2. 指令
以<%@开始 %> 结尾,比如<%@page import="java.util.*"%>
3. 表达式 <%=%>
用于输出一段html
4. Scriptlet
在<%%> 之间,可以写任何java 代码
5. 声明
在<%!%> 之间可以声明字段或者方法。但是不建议这么做。
6. 动作
<jsp:include page="Filename" >,在jsp页面中包含另一个页面。
7. 注释 <%-- -- %>
不同于html的注释 <!-- --> 通过jsp的注释,浏览器也看不到相应的代码,相当于在servlet中注释掉了

包含

1
2
<jsp:include page="footer.jsp" />    //动作包含
<%@include file="footer.jsp" %> //指令包含

指令是进行插入,只生成一个文件,动作包含生成两个文件。

跳转分为客户端跳和服务器跳,和servlet类似。

  • Cookie是一种浏览器和服务器交互数据的方式。
  • Cookie是由服务器端创建,但是不会保存在服务器
  • 创建好之后,发送给浏览器。浏览器保存在用户本地
  • 下一次访问网站的时候,就会把该Cookie发送给服务器。

作用域

  • pageContext 当前页面
  • requestContext 一次请求:所以客户端跳转和服务器端跳转的情况不同
  • sessionContext 当前会话 :从一个用户打开网站的那一刻起,无论访问了多少网页,链接都属于同一个会话,直到浏览器关闭。
  • applicationContext 全局,所有用户共享

JSTL

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。JSTL库有core, i18n, fmt, sql 等等。

在页面中使用JSTL需要在jsp中 通过指令进行设置:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

  • prefix=”c” 表示后续的标签使用都会以**<c:** 开头。如:
1
2
3
<c:set var="name" value="${'gareen'}" scope="request" />   //设置name
<c:out value="${name}" /> //输出name
<c:remove var="name" scope="request" /> //在request作用域中移除name
  • JSTL通过**<c:if test=””>** 进行条件判断,但是JSTL没有<c:else,所以常用的办法是在<c:if的条件里取反 -_-
  • <c:forEach items="${heros}" var="hero" varStatus="st" >进行循环
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix='fmt' %>进行格式化

EL表达式

比JSTL简化一些:

<c:out value = "${name}"${name}是等价的

如果多个作用域中都有同一个属性,pageContext > request > session > application 的优先顺序获取。

JavaBean

根本而言,bean只是遵循了特定编码规范的Java类而已

  1. 提供无参public的构造方法(默认提供)
  2. 每个属性,都有public的getter和setter
  3. 如果属性是boolean,那么就对应is和setter方法

获取JavaBean的属性,只需要通过 . 符号操作就可以了。像这样 ${hero.name} ,就会自动调用getName方法了