前言

Java基础语法的坑补上了,开始学JSP啦
希望头发不会少...QWQ

Begin

JSP页面元素

  1. <%局部变量、java语句%>
  2. <%!全局变量、定义方法%>
  3. <%=输出表达式 %>

page指令

page指定的属性:

  1. language:jsp页面使用的脚本语言
  2. import:导入类
  3. pageEncoding:jsp文件自身编码
  4. contentType:浏览器解析jsp的编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

注释

  1. html注释 <!-- --> ,用户可通过浏览器查看源码查看。
  2. java注释 // /*...*/
  3. jsp注释 <%-- --%>

常见状态码

200:一切正常
300/301: 页面重定向 (跳转)
404: 资源不存在
403:权限不足 (如果访问a目录,但是a目录设置 不可见)
500:服务器内部错误(代码有误)

设置初始页面

在项目/WEB-INF/web.xml中设置 默认的 初始页面

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

虚拟路径

方法一:将web项目配置到webapps以外的目录
在conf/server.xml中配置
host标签中:
<Context docBase="D:\study\JspProject" path="/JspProject" />
docBase:实际路径
path:虚拟路径 (绝对路径、相对路径(相对于webapps))
重启

方式二:
在apacheconfCatalinalocalhost中新建“项目名.xml”中新增一行:
<Context docBase="D:\study\JspProject" path="/JspProject" />

虚拟主机

通过www.test.com访问本机
方法一:
修改 conf/server.xml

  <Engine name="Catalina" defaultHost="www.test.com">
  
      <Host appBase="D:\study\JspProject" name="www.test.com">
            <Context docBase="D:\study\JspProject"   path="/"/>
      </Host>

方法二:
在C:WindowsSystem32driversetchost增加
127.0.0.1 www.test.com

内置对象

out

输出对象,向客户端输出内容

request

请求对象;存储“客户端向服务端发送的请求信息”

  • 常见方法:
  1. String getParameter(String name) :根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)
  2. String[] getParameterValues(String name): 根据请求的字段名key ,返回多个字段值value (checkbox)
  3. void setCharacterEncoding("编码格式utf-8") :设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
  4. getRequestDispatcher("b.jsp").forward(request,response) ; :请求转发 的方式跳转页面 A - > B
  5. ServletContext getServerContext():获取项目的ServletContext对象
  • 注意:
  1. get与post请求方式的区别:

    1. get方式 在地址栏显示 请求信息 (但是地址栏能够容纳的 信息有限,4-5KB;如果请求数据存在大文件,图片等 会出现地址栏无法容纳全部的数据而出错),post不会显示
    2. 文件上传操作,必须是post
  2. 修改server.xml ,一次性的 更改tomcat默认get提交方式的编码 (utf-8)建议 使用tomcat时,首先在server.xml中统一get方式的编码 URIEncoding="UTF-8"
  3. 推荐使用post。

response:响应对象

  • 常见方法:

    1. void addCookie( Cookie cookie ); 服务端向客户端增加cookie对象
    2. void sendRedirect(String location ) throws IOException; :页面跳转的一种方式(重定向)
    3. void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)
请求转发重定向
地址栏是否改变不变改变
是否保留第一次请求数据保留不保留
请求次数12
跳转发生位置服务端客户端发出的第二次跳转

session会话

  • 存在于服务端,cookie由服务端生成,发送给客户端保存,不是内置对象,需要 new

cookie:

  1. K-V对
  2. 作用:提高访问服务端的效率,但是安全性较差。
  3. javax.servlet.http.Cookie提供
  4. public Cookie(String name,String value)
  5. String getName():获取name
  6. String getValue():获取value
  7. void setMaxAge(int);最大有效期(秒)

如何使用cookie:

  1. 服务端准备Cookie:response.addCookie(Cookie cookie)
  2. 页面跳转(转发,重定向)
  3. 客户端获取cookie: request.getCookies();
  • 服务端增加cookie通过response对象
  • 客户端获取对象通过request对象
  • 不能直接获取某一个单独对象,只能一次性将 全部的cookie拿到
  • 建议cookie只保存英文数字,否则需要进行编码、解码
        request.setCharacterEncoding("utf-8");
        Cookie[] cookies = request.getCookies();
        Cookie cookie = new Cookie();
        cookie.setMaxAge(30 * 24 * 60 * 60);
        //cookie.setPath("/");
        response.addCookie(cookie);
        for (Cookie tmp : cookies) {
            if (tmp.getName().equals(name)) {
            }
        }

session

session机制:

  • 客户端第一次请求服务端时,(jsessionid-sessionid匹配,不存在)服务端会产生一个session对象(用于保存该客户的信息)。并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
  • 服务端由会产生一个cookie,并且该cookie的name=JSESSIONID ,value=服务端sessionId的值;然后服务端会在响应客户端的同时将该cookie发送给客户端,至此客户端就有了一个cookie(JSESSIONID);
  • 因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)
  • 客户端第二/n次请求服务端时: 服务端会先用客户端cookie的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户不是第一次访问,无需登录;

session方法:

  1. String getId() :获取sessionId
  2. boolean isNew() :判断是否是新用户(第一次访问)
  3. void invalidate():使session失效(退出登录、注销)
  4. void setAttribute()
  5. Object getAttribute()
  6. void setMaxInactiveInterval(秒) :设置最大有效非活动时间
  7. int getMaxInactiveInterval():获取最大有效非活动时间

cookie和session的区别

sessioncookie
保存的位置服务端客户端
安全性较安全较不安全
保存的内容ObjectString

application

  • 全局对象
  1. String getContextPath() 获取虚拟路径
  2. String getRealPath(String name): 获取绝对路径(虚拟路径相对的绝对路径)
  3. application.setAttribute(k, v)
  4. application.getAttribute(k)

pageContext

JSP页面容器

config

配置对象(服务器配置信息)

page

当前JSP页面对象(相当于Java中的this)

exception

异常对象

四大范围对象

  • 小->大
对象作用范围
pageContext JSP页面容器(有时称为page对象)当前页面有效
request 请求对象同一次请求有效
session 会话对象同一次会话有效
appliation 全局对象全局有效(整个项目有效)
  • 以上4个对象共有的方法:
  1. Object getAttribute(String name):根据属性名,或者属性值
  2. void setAttribute(String name,Object obj) :设置属性值(新增,修改)
  3. setAttribute("a","b"):如果a对象之前不存在,则新建一个a对象。如果a之前已经存在,则将a的值改为b
  4. void removeAttribute(String name):根据属性名,删除对象
  • 范围详解
  1. pageContext 当前页面有效 (页面跳转后无效)
  2. request 同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)
  3. session 同一次会话有效 (无论怎么跳转,都有效;关闭/切换浏览器后无效 ; 从 登陆->退出 之间 全部有效)
  4. application 全局变量;整个项目运行期间 都有效 (切换浏览器 仍然有效);关闭服务、其他项目无效
  • 如果需要多个项目共享、重启后仍然有效:JNDI
  • 以上的4个范围对象,通过 setAttribute()赋值,通过 getAttribute()取值。
  • 以上范围对象,尽量使用最小的范围。因为对象的范围越大,造成的性能损耗越大。



扫一扫在手机打开当前页