Web期末复习 —— Servlet 和 JSP(1)

void service(ServletRequest request, ServletResponse response)

void destroy()

ServletConfig getServletConfig()

String getServletInfo()

Servlet中的抽象类


  • javax.servlet.GenericServlet抽象类

它实现了Servlet接口和ServletConfig接口。

可以继承GenericServlet类并实现service()方法来创建任何类型的Servlet。

  • HttpServlet

HttpServlet抽象类继承了GenericServlet类,

它用来实现针对HTTP协议的Servlet,

在HttpServlet类中增加了一个新的service()方法。

  • 在HttpServlet中针对不同的HTTP请求方法定义了不同的处理方法。

get方法:

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

}

当然还有post方法:

处理Http请求


  • 在HttpServlet中对每种HTTP方法定义了相应的方法

在这里插入图片描述

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException;

  • 检索请求参数

请求参数是随请求一起发送到服务器的数据,它以“名/值”对的形式发送。

  • POST请求,参数在数据区;

  • GET请求,参数附加在URI后面。

  • 客户端传递参数方式

从客户端向服务器端传递请求参数有下面两种方法。

  • 通过表单指定请求参数,每个表单域可以传递一个请求参数,这种方法适用于GET请求和POST请求。

  • 通过URL中的查询串指定请求参数,将参数名和值附加在请求URI后面,这种方法只适用于GET请求

问号后面内容称为查询串(query string),为请求参数名和参数值对。

若有多个参数,中间用“&”符号分隔,参数名和参数值之间用等号(=)分隔。

如:http://localhost:8080/chapter02/user- login?username=admin&password=admin

  • 使用请求对象存储数据

可使用请求对象HttpServletRequest存储数据。

请求对象是一个作用域对象,可以在其上存储属性实现数据共享。

  • 属性(attribute)包括属性名和属性值。

属性名是一个字符串,

属性值是一个对象。

有关属性存储的方法有4个,定义在HttpServletRequest接口中。

格式如下。

public void setAttribute(String name,Object obj)

public Object getAttribute(String name)

要类型转换

public void removeAttribute(String name)

public Enumeration getAttributeNames()

处理表单


  • 文本、单选按钮,使用String data = request.getParameter(String name)

  • 复选框、多选框,使用String[] data = request.getParameterValues(name)

请求转发与响应重定向


  • 请求转发

request.getRequestDispatcher().forward(request,response)

不能转向到本web应用之外的页面和网站,所以转向的速度要快。

  • 响应重定向

通过响应对象response的sendRedirect()实现,public void sendRedirect(String location)

注:URL可以是绝对URL(如https://www.baidu.com),也可以是相对URL。

  • 一个猜数字的小栗子

package com.jsy.learn;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

import java.io.PrintWriter;

// URL为:http://localhost:8080/learnServletAndJSP_war_exploded/GuessNumberServlet 执行

@WebServlet(“/GuessNumberServlet”)

public class GuessNumberServlet extends HttpServlet {

@Override

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{

int magic = (int)(Math.random()*101);

HttpSession session = request.getSession();

// 浏览器第一次访问,服务器就产生一个 session 会话,产生一个随机数存在session里。

session.setAttribute(“num”,new Integer(magic));

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

PrintWriter out = response.getWriter();

// 输出 表单

out.println(“”);

out.println(“guess a number between 0 and 100”);

out.println(“”);

out.println(“”);

out.println(“”);

out.println(“”);

out.println(“”);

}

@Override

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{

// 表单通过 post函数传来值

int guess = Integer.parseInt(request.getParameter(“guess”));

// 这里通过 request 获得的session 就是 一开始上面存在服务器的session

HttpSession session = request.getSession();

// 获取一开始设定的值

int magic = (Integer)session.getAttribute(“num”);

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

PrintWriter out = response.getWriter();

out.println(“”);

// 写判断逻辑

if(guess==magic){

// 会话失效,当然之前一开始设置的值也就失效了

session.invalidate();

out.println(“ok!”);

out.println(“again?.”);

}

else if(guess>magic){

out.println(“It’s too big!”);

}

else{

out.println(“It’s too small!”);

}

out.println(“”);

out.println(“”);

out.println(“”);

out.println(“”);

out.println(“”);

}

}

JSP

===================================================================

概念


  • JSP(JavaServer Pages)是一种在HTML页面中嵌入JSP元素的动态Web页面 ,它的主要用来实现表示逻辑。

在JSP页面中可以包含多种JSP元素,当JSP页面被访问时,Web容器将JSP页面转换成Servlet类执行后将结果发送给客户。

  • JSP文件会被转换和编译成Servlet程序。

与其他的Web页面一样,JSP页面也有一个唯一的URL,客户可以通过它访问该页面。

语法


在JSP页面中可以使用三种脚本元素:

  • JSP声明、

  • JSP小脚本、

  • JSP表达式。

  • 变量(类的成员变量、)、方法(类的成员方法)的声明

<%! %>

  • 表达式,插值

<%= %>

  • 指令

<%@ %>

如:

<%-- 导包 --%>

<%@ page import=“java.time.LocalDate” %>

<%@ include attribute-list %>

在JSP 编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,

  • 脚本(service的中的方法代码段)

<% %>

生命周期


当JSP页面第一次被访问时,Web容器解析JSP文件并将其转换成相应的Java文件,该文件声明了一个Servlet类,该类称为页面实现类。

在这里插入图片描述

客户首次访问页面时,Web容器执行该JSP页面要经过6个阶段。

  • 前三个阶段将JSP页面转换成一个Servlet类并装载和创建该类实例;

  • 后三个阶段是初始化、提供服务和销毁阶段。

各种小例子


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

<%-- 导包 --%>

<%@ page import=“java.time.LocalDate” %>

<%! LocalDate curDate = null;%>

当前日期

<% curDate = LocalDate.now(); %>

今天的日期是:<%= curDate.toString() %>

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

<%-- 变量声明的顺序无关紧要,因为都会转换为实现类的成员变量和成员方法 --%>

<%!

double r;

double getArea(double r) {

return Math.PI * r * r;

}

%>

圆的面积

<%

out.println(“欢迎”);

%>

<%

String s = request.getParameter(“radius”);

if (s == null) s = “0”;

r = Double.parseDouble(s);

%>

半径为<%= r %>的圆的面积为:<%= getArea®%>

  • JSP的循环

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

计算平方根

<%

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

<%

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-rjqTmKeZ-1715714586830)]

[外链图片转存中…(img-12F6tYfX-1715714586831)]

[外链图片转存中…(img-B01s0Evo-1715714586831)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值