JavaWeb笔记-2019

1.javaweb环境搭建

(1)安装JDK
(2)安装Web服务器-Tomcat
解压版(apache-tomcat-9.0.26.zip)
参考网址:https://blog.csdn.net/weixin_42109012/article/details/94383001
如果tomcat启动信息,出现乱码,可参考 https://blog.csdn.net/whscheetah/article/details/85056467解决。
安装版(apache-tomcat-9.0.26.exe)
(3)安装IDEA
配置jdk,tomcat

2.Servlet入门

2.1 Servlet是什么

Servlet是利用Java类编写的服务端程序。(Servlet的实质就是Java类)。
作用:负责接收客户端的请求,并给出响应。

Servlet提供以下功能:
1.对客户端发送的数据进行读取和拦截。
2.读取客户端请求的隐含数据。
3.运行结果或生成结果。
4.发送响应的数据。

对于将来要学的JSP,可以先了解JSP的实质是Servlet。

servlet的配置,有两种方式,一是在web.xml中配置,二是,在Servlet3.0之后可以通过注解配置。

package com.ambow.servlet;


import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

//@WebServlet("/myServlet")
public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init....Servlet初始化");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service...给用户提供服务的方法。可以处理客户端的请求");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy....销毁Servlet");
    }
}

(1)Web.xml配置

<!-- 配置Servlet -->
<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.ambow.servlet.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/myServlet</url-pattern>
</servlet-mapping>

(2)注解配置
在Servlet的类定义上面,添加注解@WebServlet("/myServlet")

2.2 Servlet的生命周期

init–当服务器启动,第一次访问Servlet的时候,servlet进行初始化
service–在服务器启动期间,可以不断的处理请求。
destroy–在服务器停止的时候,去销毁Servlet.

注意:虚拟路径的配置
在这里插入图片描述

Servlet的使用方式:
(1)继承Servlet接口
(2)实现HttpServlet抽象类【掌握】

2.3 Servlet处理表单数据

【案例1 登录案例】

实现效果
输入正确的账号,密码。(账号:admin,密码:123)跳转到登录成功页面。
否则,跳转到登录失败页面。

2.4 请求和响应

(1)了解HTTP协议。
参考资料:https://www.runoob.com/http/http-tutorial.html
(2)掌握通过浏览器的抓包工具,查看请求消息和响应消息。
请求消息格式:
请求行
请求头部
空行
请求数据
响应消息格式:
状态行
消息报头
空行
响应正文。

(3)request和response对象的常用方法
注册案例

–常用方法
**request:**获取请求消息数据,获取参数,请求转发,共享数据,获取ServletContext
(1)request.getParameter(“username”); – 获取除复选框以外的表单元素的值
(2)request.getParameterValues(“hobby”);–获取复选框的值
(3)request.setCharacterEncoding(“utf-8”);–修改请求对象的编码
(4)request.getRequestDispatcher(“success.html”).forward(request,response);–请求转发
(5)request.getParameterNames();–得到当前请求中的所有参数的完整列表
(6)request.getCookies( );–读取客户端的Cookie信息
-------------------------共享数据相关的方法----------------------------
(7)request.setAttribute(“loginUser”,uname);//往request作用域中,设置属性
(8)String loginUser = (String )request.getAttribute(“loginUser”);//从request作用域中,获取属性值。(注意:要进行类型强转)
-------------------------获取请求行相关的方法----------------------------
(9)String method = request.getMethod();//获取表单提交方式
(10)String contextPath = request.getContextPath();//获取虚拟路径
(11)String servletPath = request.getServletPath();//获取Servlet路径
(12)String queryString = request.getQueryString();//获取查询字符串
(13)String protocol = request.getProtocol();//获取协议名称及版本
-------------------------获取请求头相关的方法----------------------------
(14)Enumeration headerNames = request.getHeaderNames();//获取所有请求头的名称
(15)String headerValue = request.getHeader(header);//获取指定header的值
-------------------------获取请求数据相关的方法----------------------------
(1)request.getParameter(“username”); – 获取除复选框以外的表单元素的值
(2)request.getParameterValues(“hobby”);–获取复选框的值

**response:**重定向,输出字符数据,输出字节数据,验证码
(1)response.sendRedirect(“success.html”);–请求重定向
(2)response.addCookie(cookie);–发送Cookie到客户端浏览器

3.会话跟踪技术

3.1 Cookie

【案例1 记住密码】

实现效果
当勾选“记住密码”复选框时,下次访问登录页面,会自动记住账号,密码信息。

【案例2 上次访问时间】

实现效果
首次登录,显示“欢迎您,XXX”
下次登录,显示“欢迎您,XXX,您上次登录时间为 yyyy年MM月dd日 hh:mm:ss”

1. 概念: Cookie是客户端会话技术,将数据保存在客户端,以保留了各种跟踪信息。

2. 识别用户包括三个步骤:

(1)服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。
(2)浏览器将这些信息存储在本地计算机上,以备将来使用。
(3)当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。

3. 通过 Servlet 设置 Cookie 包括三个步骤:

(1) 创建一个 Cookie 对象:您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数,cookie 名称和 cookie 值都是字符串。

Cookie cookie = new Cookie("key","value");

请记住,无论是名字还是值,都不应该包含空格或以下任何字符:

[ ] ( ) = , " / ? @ : ;

(2) 设置最大生存周期:您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为 24 小时的 cookie。

cookie.setMaxAge(60*60*24); 

setMaxAge的参数有如下三种情况:

  1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
  2. 负数:默认值,当浏览器关闭后,Cookie数据被销毁
  3. 零:删除cookie信息

(3) 发送 Cookie 到 HTTP 响应头:您可以使用 response.addCookie 来添加 HTTP 响应头中的 Cookie,如下所示:

response.addCookie(cookie);

4.通过 Servlet 读取 Cookie
要读取 Cookie,您需要通过调用 HttpServletRequest 的 getCookies( ) 方法创建一个 javax.servlet.http.Cookie 对象的数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。

5.通过 Servlet 删除 Cookie
删除 Cookie 是非常简单的。如果您想删除一个 cookie,那么您只需要按照以下三个步骤进行:

(1)读取一个现有的 cookie,并把它存储在 Cookie 对象中。
(2)使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie。
(3)把这个 cookie 添加到响应头。

3.2 Session

【案例1 登录、退出系统案例】

实现效果
1.登录系统后可在各个页面可以显示登录用户名。
2.当退出系统后,访问非登录页面,显示“请登录”超链接。
(创建/获取Session,删除Session会话数据)

  1. 概念:Session是服务端会话技术,将数据保存在服务端,以保留了各种跟踪信息。
    提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。

  2. 使用步骤

  3. 常用方法
    (1)获取Session
    HttpSession session = request.getSession();
    (2)设置属性
    session.setAttribute(“key”,value);
    (3)获取属性
    Object value = session.getAttribute(“key”);–根据情况,进行类型转换
    (4)删除属性
    session.removeAttribute(“key”);
    (5)销毁session
    session.invalidate();

3.3 隐藏的表单域

3.4 URL重写

4.JSP

【案例1 查询案例】

实现效果
1.读取数据库中某张表,展示数据库中的数据到页面。

JSP的实质是Servlet.
JSP = HTML(模板数据) + JAVA(元素)
JSP的组成:(1)静态内容(2)指令(3)Java脚本
以下重点讲解,指令和java脚本。

4.1 指令

  1. page: <%@ page language=”java” import=”java.util.*” contentType=“text/html; charset=utf-8” %>
  2. include <%@ include file=”url” %>
  3. taglib <%@ taglib uri=”” prefix=”” %> 作用:是减少jsp页面中的java代码。

4.2 小脚本

  1. 声明:<%! 声明变量/方法 %> //全局变量
  2. 脚本段:<% java代码 %> //局部变量
  3. 表达式:<%= 表达式 %> //输出到页面
//jsp转换成的Servlet的部分关键代码
class scriptlets_jsp 
{	
	//声明的变量(全局)
	int count1 = 1;
	//声明的方法(全局)
	public String getTime(){
		return "";
	}

	//每次请求,都会调用的方法
	public void _jspService(request,response){
		//脚本段中声明的变量(局部)
		int count2 = 1;
		
	}
	
}

4.3 注释

  1. Java注释
    (1)// 单行注释
    (2)/* 多行注释 /
    (3)/
    * 文档注释 */
  2. Html注释
    <!—Html注释(用户可以从浏览器的源代码中查看) -->
  3. Jsp注释
    <%-- JSP特有的注释 --%>

了解:Web.xml文件配置通用的错误页面。

4.4 隐式对象

九个隐式对象:

序号 对象名 描述
1 request HttpServletRequest 接口的实例
2 response HttpServletResponse 接口的实例
3 out JspWriter类的实例,用于把结果输出至网页上
4 session HttpSession类的实例
5 application ServletContext类的实例,与应用上下文有关
6 config ServletConfig类的实例
7 pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
8 page 类似于Java类中的this关键字
9 Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

5.EL和JSTL

5.1 EL

核心作用:
减少jsp中的java代码[注意:el只能用在jsp中]
语法:${表达式}
表达式分类:
(1) 普通表达式
(2) 读取单值(基本数据类型)
(3) 读取多值(对象)
EL的隐含对象:
(1) pageContext,通过pageContext可以访问ServletContext,Request,Response,Session等
(2) pageScope
(3) requestScope
(4) sessionScope
(5) applicationScope
(6) param
(7) paramValues
(8) cookie
(9) initParam
(10) header
(11) headerValues
EL的运算符:
(1) 算术运算符
(2) 关系运算符
(3) 逻辑运算符
(4) Empty运算符
(5) 条件运算符

5.2 JSTL

使用方法:
(1) 在页面中导入taglib指令
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
(2) 使用jstl的各种标签
Jstl标签分类:
(1)c:out 在页面输出变量值
(2)c:set 定义变量或者给已有变量赋值
(3)c:remove
(4)c:if(单分支)
(5)c:choose,c:when,c:otherwise(多分支)
(6)c:forEach

6.过滤器

概述:
过滤器,顾名思义,就是在源数据和目的数据之间起过滤作用的中间组件。filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。

过滤器要实现的接口是Filter(javax.servlet包中)
过滤器的三个重要方法:
(1) Init(FilterConfig config)
(2) doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
chain.doFilter(request,response);//将请求传给下一个过滤器或目标资源。
(3) destory()

过滤器的配置:

(1)xml配置

  <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.ambow.filter.EncodingFilter</filter-class>
    <init-param>
    	<param-name>encoding</param-name>
    	<param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

(2)注解配置
在Servlet3.0之后,可以使用注解进行配置

@WebFilter( filterName = "LoginFilter",urlPatterns = { "/jsps/cart/*", "/jsps/order/*" }, servletNames = { "CartItemServlet", "OrderServlet" })
public class LoginFilter implements Filter {
	...
}

重点应用:
统一字符编码
统一权限验证

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章