jsp+servelet

本文深入探讨Servlet的工作周期、子类、服务器端口、HTTP请求与响应格式,以及JSP的基本概念、脚本、指令与行为。同时,涵盖request、response、session、cookie等核心技术,解析EL表达式、JSTL标签、MVC与三层架构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念——————

周期

init->serve(执行多次)->destroy

子类

GenericServlet(抽象子类)

HttpServlet(抽象孙子类)

服务器端口

web(HTTP):Tomcat:8080

SQL:MySQL:3306

http:get/post

request数据格式

web浏览器向服务器

请求行

请求方式 请求URL 请求协议/版本

get /log.html http/1.1(复制性)

请求方式:

  1. get:请求参数在请求行中,URL之后,长度有限

    将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔

  2. post:请求参数在请求体中,URL长度没有限制

    提交数据是不可见的,隐式的

请求头

(客户端告诉浏览器的一些信息)

格式:

  • 请求名称:请求头值(name:you)

请求头:

请求空行(空行)

请求体(正文):

封账post请求消息请求参数(体)

相应请求数据格式

响应行

  • 组成:协议/版本 响应状态码 响应码描述http/1.1 404 ok
  • 状态码:
    1. 1**:服务器接收客户端信息,但接受没有完成需要等待一段时间
    2. 2**:成功200
    3. 3**:重定向:302,访问缓存:304
    4. 4**:客户端错误(路径错误404,没有对应的dopost方法405)
    5. 5**:服务器错误。代码错误505

响应头

  • 格式:头名称:值Content-type:text/html;charset=UTF-8

  • 头名称:Content-type响应体数据格式及编码格式

    ​ Content-disposition打开响应体的格式(in-line默认:用浏览器打开,attachment;filename=;以附件打开(文件下载))

r.setHeader(String name,String value);

响应空行

响应体

传输的数据

request

与response是由浏览器创建,程序员使用的

  1. 获取请求行数据
getParameterNames():取得客户端所发出的请求参数名称.
getParameter():可以让您指定请求参数名称,以取得对应的设定值.
getServerName():请求的服务器.
getProtocol():使用协议.
getMethod():请求方法.
getServerPort():请求端口号.
getContextPath():Context路径. context理解为上下文比较好(也就是一个项目)
getServletPath(): Servlet路径.
getRequestURI():URI路径.
getQueryString():查询字符串.
getRemoteAddr():使用者主机IP.
getRemotePort():使用者使用端口号.

例子:
  http://localhost:8080/myjsp/requestdemo.jsp?name=john&nick=johncn
  对应的信息为:
  请求的服务器: localhost
  使用协议: HTTP/1.1
  请求方法: GET
  请求的端口号: 8080
  Context路径: /myjsp
  Servlet路径: /requestdemo.jsp
  URI路径: /myjsp/requestdemo.jsp
  查询字符串: name=john&nick=johncn
  使用者主机IP: 127.0.0.1
  使用者使用端口号: 1060

  1. 获取请求头数据
  String getHeader()//通过请求头获取请求值
  Enumeration<String> getHeaderNames();//获取所有请求头名称
  1. 获取请求体数据

response

方法

setHeader():是一个通用的标头设定方法,您可以用它来设定任何「名称/值」的标头.
setIntHeader():是专门用来设定整数值标头的版本.
setDateHeader():setHeader()的Date设定版本,第二个参数是设定Date的Long数值,0表示GMT 1970/1/1 00:00。
  (Note:以上3个函数用来设置HTTP协议的表头,必须对HTTP协议有些了解才能正确使用,我现在也不清楚).
setStatus():是用来设定回应的状态码,例如404 Not Found,HttpServletResponse类中提供了一些助忆常数设定,例		如SC_NOT_FOUND就是表示404状态码(可以在Servlet API文件中查询相关的助忆常数).
sendError():会根据服务器的预设错误网页回报方式显示错误讯息.
sendRedirect():设置重定向页面.
getWriter():取得PrintWriter对象,由它来写出响应至服务器的本体信息.

重定向

forward重定位和direct转发区别:

  • 前者地址栏发生变化
  • 访问其他站点
  • 两次请求

路径写法:

  • 相对路径
  • 绝对路径(规则:判断路径是谁给的)
    • 浏览器使用的,需要加虚拟路径
    • 服务器使用,不需要加虚拟路径

数据输出:

中文乱码:

response.setContentType("text/html;charset=utf-8");

servletContext

功能

获取mime类型

  • 定义:互联网通信过程中定义的一种文件数据类型标准

  • 格式:大文件/小文件 text/html

  • 获取方式:

    context.getMimeType("a.jpg")

域对象(共享数据)

  • context.setAttribute("a","b");
    context.getAttribute("b");
    removeAttribute("b");
    

获取文件的(服务器)真实路径

System.out.println(context.getRealPath("/b.text"));

获取方式

request.getServletContext();//通过request对象获取
this.getServletContext();//通过HttpServlet获取

回话技术

一次会话(包含多次请求和响应)中共享数据

区别:

客户端回话技术:cookie;服务器端:session

session没有数据大小限制

session数据安全

cookie

实现逻辑:

new Cookie(String name,String value);//创建cookie对象,绑定数据
response.addCookie(Cookie c);//发送cookie对象
Cookie[] request.getCookies()//获取cookie,拿到数据

cookie细节:

cookie保存时长:

  • 浏览器关闭后销毁(默认)

  • 持久化存储

    setMaxAge(int seconds);//second>0,指定存活时间,《0默认值,=0删除cookie信息
    

cookie共享:

setDomain(".baidu.com");//设置一级域名,则其下多个服务器间可共享
setPath("/");//设置cookie获取范围,默认为当前虚拟目录(不能共享),设置/则可以共享

特点

cookie存在客户端浏览器(安全)

浏览器对单个cookie大小有限制,对同一域名下cookie数量有限制

作用

cookie存少量不敏感数据

不登录情况下,服务器对客户端身份识别,及相应设置

session

服务器端会话技术,将数据存在服务器端对象中

使用

//获取HttpSession对象:
HttpSession request.getSession();
//使用HttpSession对象:
Object getAttribute(String name);
void setAttribute(String name,Object value);
void removeAttribute(String name);

原理

依赖于cookie的(cookie:JSessionId:153434554;)

细节

  • 客户端关闭,服务器不关闭,两次获得的session不是同一个,如果需要相同可以:

    Cookie c=new Cookie("JSESSIONID",session.getId());
    c.setMaxAge(60*60);//设置最长存活时间
    response.addCookie(c);
    
  • 客户端不关闭,服务器关闭,两~同一个吗?

    不是,但要保证数据不丢失,Tomcat自动完成以下工作:

    • session的钝化:服务器正常关闭前,将session对象系统化到硬盘上
    • session的活化:启动后,将硬盘上内容文件转化为session对象即可
  • session销毁情况

    • 服务器关闭

    • session.invalidate();

    • session默认失效30分钟

      <session-config><session-timeout>30
      

MVC

M:JavaBean完成具体的业务操作(查询数据库、封装对象)

V:JSP展示数据(少量Java代码用el表达式、jstl标签替代)

C: Servlet获取用户输入、调用模型、将数据交给视图层进行展示

优点:重用性高、方便维护、耦合性低、易于分配工作

缺点:项目架构变得复杂、对开发人员要求更高

三层架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kuwWgqzW-1577074485899)(F:\TyporaWorkplace\文件\图片\you.JPG)]

EL表达式(表达语言)

作用:替换和简化jsp页面中的java代码的编写

注意

<%@page isELIgnored="false";%@>//是否忽略所有es表达式(false),则显示为字符串,而非表达式
\${3>4}//忽略单个表达式(用\)

运算符:

算数:+ - * /(div) %(mod)

比较:> < = <= !=

逻辑:&&(and) ||(or) !(not)

空:empty判断字符串、集合、数组对象是否为null并且长度为0

${empty list}//判断是否为空,返回boolean值
${not empty list}//判断是否不为空,返回boolean值

获取值:

${域名称.键名}//从域中获取键名

<%request.setAttribute("name","张三");%>

${requestScope.name}//输出,写在HTML内

张三

隐式对象

el有11个隐式对象,pageContext可以获取其他八个内置对象

${pageContext.request.contextPath}//获取文件虚拟路径

JSTL标签

Javaserver page tag library jsp标准标签库

作用:用于简化或替换jsp页面上的java代码

使用步骤:导入jstl相关jar包——引入标签库:taglib指令——

常用标签:if/choose(相当于switch)/foreach(for)

jsp————————

java服务器端页面,一个特殊的页面,本质是一个servlet文件

脚本

<% out.println("输出")%>//定义的java代码,在service方法里
<%!int i=0;%>//定义的Java代码,以局部变量呈现
<%= i%>//定义的java代码,在service方法里的输出语句里

正常显示中文

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

jsp指令

<%@ page … %>配置jsp页面,定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %>包含其他文件(导入页面的资源文件)
<%@ taglib … %>引入标签库的定义(导入资源)
<%@ page attribute="value" %>
=
<jsp:directive.page attribute="value" />//xml格式

page

  • contentType:等同于response.setContentType();
    • 设置响应体的mime类型(text/html)及字符集
    • 设置当天页面编码(低级工具则用:pageEncoding="UTF-8"或gbk)
  • language=“java"
  • import导包
  • errorPage:当页面发生异常后,会自动跳转到指定的错误页面
  • isErrorPage:标识当前页面是否为错误页面。(若为否,则不可使用内置对象Exception)

include

插入一个页面(

例:将1.jsp内容通过2.jsp插入

<%@include file="1.jsp"%>

taglib

导入资源,prefix:前缀,自定义的

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

jsp行为

用xml语法写的

所有

jsp:include用于在当前页面中包含静态或动态资源(向下插入jsp内容)
jsp:useBean寻找和初始化一个JavaBean组件
jsp:setProperty设置 JavaBean组件的值
jsp:getProperty将 JavaBean组件的值插入到 output中
jsp:forward从一个JSP文件向另一个文件传递一个包含用户请求的request对象(覆盖jsp内容)
jsp:plugin用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element动态创建一个XML元素
jsp:attribute定义动态创建的XML元素的属性
jsp:body定义动态创建的XML元素的主体
jsp:text用于封装模板数据

其共有的属性:

  • id:动作元素的唯一标识
  • scope:动作元素的生命周期(a) page, (b)request, ©session, 和 (d) application

include

<jsp:include page="date.jsp" flush="true" />//page包含在页面中的相对URL地址

jsp隐含对象

可以直接拿来用,不用定义的对象

requestHttpServletRequest类的实例,一次请求的多个资源转发
responseHttpServletResponse类的实例
outPrintWriter类的实例,用于把结果输出至网页上
sessionHttpSession类的实例
applicationServletContext类的实例,与应用上下文有关
configServletConfig类的实例
pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问,当前页面共享数据,可以获得其他八个内置对象
page类似于Java类中=this(servlet对象)
ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象

response.getWriter()与out.write的区别:

response比out限制性

服务器请求request

当浏览器请求一个网页时,HTTP信息头的数据

Enumeration headerNames = request.getHeaderNames();//返回所有HTTP头的名称集合:host、cookie

服务器响应

  • Response响应对象主要将JSP容器处理后的结果传回到客户端,可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。
  • response对象定义了处理创建HTTP信息头的接口
response.setIntHeader("Refresh", 5);//添加指定名称的响应头和int值
// 设置每隔5秒自动刷新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值