JSP/Servlet

1.Servlet

​Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

1.Servlet的生命周期(什么时候有,什么时候没)

构造函数:当用户第一次访问时调用
init:初始化的方法,当用户第一次访问时调用
service:实现用户需求的方法,当用户访问时被调用,调用多次
destroy:销毁的方法,服务器关闭的时候被调用

当服务器启动的时候,Servlet没有被创建,当用户第一次访问时,创建并初始化Servlet,调用Servlet的service方法。完成用户的功能,之后每一次访问,都只调用service方法,当服务器关闭时,Servlet调用销毁方法

2.服务器启动时加载Servlet

在web.xml里面需配置
1

3.ServletContext对象

当服务器启动时,他会为每一个web应用创建一个唯一的ServletContext对象代表你的web应用

4.HttpServlet

就是一个Servlet,但是他针对http请求方式的不同,做不同的处理

  • get方式参数显示在地址栏,post方式参数在请求体
  • get携带的参数小,post携带的参数大
1.HttpServletRequest 请求的对象
  1. 中文乱码问题
    当用户是get请求时,通过地址栏传输数据,地址栏的编码格式是由tomcat决定的,tomcat默认地址栏的编码格式是utf-8。
    当用户是post请求时,参数在请求体内传递,请求体内的编码格式是iso-8859-1
    此时就会出现乱码,解决方式

req.setCharacterEncoding("utf-8");

  1. 参数相关方法
    获得参数:getParameter
    获得一个name对应的多个参数:getParameterValues
2.请求转发与请求重定向
  1. 页面跳转方式之一:请求转发
    request.getRequestDispatcher().forward();
    是一种服务器的行为
  • 发生在服务器内部的请求转发,又称为服务器跳转
  • 地址栏不发生任何变化
  • 不能跳转至外部页面
  • 可以访问WEB-INF里面的页面
  • 请求转发的request是同一个request
  1. 跳转方式二之请求重定向
    response.sendRedirect();
    是一种客户端行为,从本质上讲等同于两次请求
  2. 使用
    前后两个页面有数据传递用请求转发,没有则用重定向。
3.Cookie
  1. 作用
    Http协议没有状态,tomcat想判断用户的状态
  2. 存活时间
    默认是浏览器关闭的时候
    cookie.setMaxAge(200); //秒
4.Session
  1. 为什么要有Session?
    用来补充Cookie的不足(Cookie只能保存字符串,且保存在客户端不安全)
  2. Session原理
    创建Session的时候,服务器将生成一个唯一的sessionid然后用它生成一个关闭浏览器就会失效的cookie。
    然后再将一个与这个sessionid关联的数据项加入散列表。
    当浏览器端提交到服务器时,会通过sessionid去散列表中寻找属于该用户的Session信息。
  3. Session的存活时间
    30分钟
  4. 路径总结
    加/ 则直接在根目录下找页面
    不加/ 则直接从当前目录下找
    ../ 跳到上一级目录
  5. 指定错误显示的页面


  
  404
  
  /err_404.html


  
  javax.servlet.ServletException
  /err_404.html

2.JSP(Java Server Page)

Java服务页面,其根本是一个简化的Servlet设计,
实现了HTML语法中的Java扩展,JSP是一种动态页面技术,
主要目的是将表示逻辑从Servlet中分离出来。

1.JSP和Servlet的区别

  • JSP经编译后就变成了Servlet
  • JSP更擅长表现于页面显示,Servlet更擅长于逻辑控制
  • 创建方式不同
  • 流行的MVC模式,用Servlet控制业务流程,及Control层,JSP实现View层

2.JSP出现编译异常还会被编译吗?

JSP可以--> xx.java 不可以-->xx.class

3.JSP内容

1.编码
2.代码块 <%  %> 在代码块内部可以写java代码
3.表达式<%=  %> 可以将表达式中的内容显示在浏览器上
4.注释 <%--  --%> jsp注释
5.指令
<%@ page 
language="java"//目前这么多年过去了,还是只有java
contentType="text/html; charset=utf-8"  //设置页面格式+页面编码格式
pageEncoding="UTF-8" //设置编码格式
import="java.util.Date"   //导包
<%@include %>   //包含其他页面    先将代码包含  在处理整个页面
<%@taglib  %>   //导入标签(jstl)
6.动作(action)
标签
  //先处理 在包含   
     //实现请求转发的跳转
7.九大内置对象
out(JspWriter):输出流  将信息输出页面
page(Object):this 当前这个页面  没有任何用处
request(HttpServletRequest):当前页面的请求对象
response(HttpServletResponse):当前页面的响应对象
session(HttpSession):session
config(ServletConfig):
application(ServletContext):
Exception:异常
pageContext(PageContext):
         pageContext.getOut();
         pageContext.getPage();
         pageContext.getRequest();
         pageContext.getResponse();
         pageContext.getException();
         pageContext.getSession();
         pageContext.getServletConfig();
         pageContext.getServletContext();
         pageContext.setAttribute("scope","xxx",PageContext.APPLICATION_SCOPE);
  1. 四个范围:
  • page :当前页面
  • request :同一个请求
  • session :同一个session
  • application :服务器内
  1. 常用的方法:
  • setAttribute
  • getAttribute
  • removeAttribute

3.EL和JSTL

1.EL(Expression Language)

  1. EL是一种表达式语言,主要用于查找作用域中的数据,然后对它们执行一些简单的操作,用于对jsp标签的属性赋值。它不是编程语言。
  2. EL表达式的基本格式由$与{}组成,例如:${user.name} 即其意思就是查询得到user对象中的name属性的值。
  3. 如果仅使用EL表达式的话则不需要导包,但需要在作用域中去取值。该作用域可以是 其范围由小到大依次是 page(页面上下文对象) request(一次请求对象) session(会话期间对象) application(程序应用对象) ,当没有指定作用域,则默认取值依次从小到大来取
    指定搜索方式:${requestScope.hello}
  4. EL表达式如果获取到null值,会 自动把null值转换为空字符串输出。

2.JSTL( JSP Standard Tag Library)

  1. JSTL是JSP标准 标签库,由apache实现,因为在jsp中出现大量Java代码不利于维护,sun公司就制定了一个类似于html标签一下的jsp标签技术,也有开始于结束标记。我们可以引用标签来调用标签库中的Java代码片段来实现一下操作。使用jsp标准标签库有利于程序的可读性,提高了代码的复用性与编程效率。其目的就是为了jsp中不出现Java代码片段。
  2. 如何使用jstl ?
  • 第一步:引入jstl.jar以及 standard.jar两个架包注:在javaEE5.0以上的版本不需要引入这两个架包,因为在javaEE5.0以上的版本已经包含了这两个架包。
    将jstl.jar和standard.jar两个包考到现有工程 WebRoot / WEB-INF / lib 目录下
  • 第二步: 使用taglib指令导入要使用的JSP标签
<%@taglib uri="" prefix="" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

uri:JSP标签的命名空间
prefix:命名空间的前缀(简称)
  • 第三步: 使用常见的标签
    • if标签
    • choose标签
    • foreach标签
    • 自定义标签

你可能感兴趣的:(JSP/Servlet)