Java Web总结

一、Servlet概述

1.1 动态网站技术

动态网站的特点

  • 交互性
  • 自动更新
  • 随机性

主要技术

  • PHP
  • ASP
  • JSP

1.2 Servlet基本知识

Servlet程序的基本特点

  • 高效
  • 方便
  • 功能强大
  • 良好的可移植性

第一个servlet程序

package chapter1;

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 java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "chapter1.MyServlet")
public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //相应到客户端的文本类型为HTML
        response.setContentType("text/html;charset=GBK");
        //获取输出流
        PrintWriter out = response.getWriter();
        out.println("重定向和请求转发");
    }
}

1.3 Servlet的生命周期(重要)

Servlet是运行在服务器上

Servlet生命周期是指创建Servlet实例到响应客户端的请求直至销毁的过程

Servlet生命周期的几个阶段

1、创建Servlet实例:装载Servlet,动态执行,可以在启动时装载,也可以在容器收到请求后装载

2、初始化(init()方法):调用init()方法对Servlet实例进行初始化。

注意:init()方法仅执行一次

3、服务(service()方法):在使用Http协议发送请求时,必须提供代表请求和响应的HttpServletRequest对象和HttpServletResponse对象

注意:当多个用户访问Servlet实例时,会分为多个线程访问此Servlet实例对象

4、销毁(destroy()方法):当收到一个请求或者被服务器卸载时,调用destroy()方法。

1.4 Servlet数据处理

直接上案使用Servlet处理表单数据,用户提交的数据正确时,输出”成功“,失败时提示”失败“

编写静态页面

<%--
  Created by IntelliJ IDEA.
  User: YZW
  Date: 2022/10/22
  Time: 9:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
  <head>
    <title>登录</title>
    <script language="JavaScript" type="">
     function LoginSubmit() {
       const user = document.Login.localName;
       const pass = document.Login.password.value;
       if (user == null || user == ""){
         alert("请输入用户名");
       }
       else if (pass == null || pass == ""){
         alert("请输入密码");
       }
       else document.Login.submit();
     }
    </script>
  </head>
  <body>
  <form method="post" name="Login" action="LoginServlet">
    <p align="left">
      用户名:<input type="text" name="loginName" size="20" value="">
    </p>
    <p align="left">
      密&nbsp;&nbsp;码:&nbsp;<input type="password" name="password" size="20">
    </p>
    <p align="left">
      <input type="button" value="提交" name="B1" onclick="LoginSubmit()">
      <input type="button" value="重置" name="B2">
      <input type="checkbox" value="Yes">
    </p>
  </form>
  <a href="session.jsp">跳转到Session示例</a>
  <a href="chapter3/CompareNum.jsp">跳转到CompareNum</a>
  <a href="chapter4/login.jsp">跳转到login</a>
  <a href="test/1.jsp">跳转到1.jsp</a>
  <a href="test/3.jsp">跳转到3.jsp</a>
  </body>
</html>

编写Servlet处理用户提交的数据

package chapter1;

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 java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "chapter1.LoginServlet")
public class LoginServlet extends HttpServlet {
    public  LoginServlet(){
        super();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求的编码字符为GBK(中文编码)
        request.setCharacterEncoding("GBK");
        //设置响应的文本类型为html,编码字符为GBK
        response.setContentType("text/html;charset=GBK");
        //获取输出流
        PrintWriter out = response.getWriter();
        String user = request.getParameter("loginName");
        String pass = request.getParameter("password");
        if ("admin".equals(user) && "123456".equals(pass)){
            out.println("登录成功");
        }else{
            out.println("登录失败");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

1.5 重定向和请求转发(重要)

1.5.1 重定向

定义:重定向是指页面重新定位到某个新地址,之前的request失效,进入一个新的request,且跳转后浏览器地址栏内容变为新的指定地址。

方法:sendRedirect()

注意:sendRedirect()不仅可以重定向到当前应用程序的其他资源,还可以重定向到其他应用程序中的资源。

1.5.2 请求转发

定义:请求转发是指将请求再转发到另一页面,此过程依然在Request范围内,转发后浏览器地址栏内容不变。

方法:forward()

注意:该方法只能在同一个应用程序中的资源中可以使用。

1.5.3 sendRedirect()方法和forward()方法的区别(重要)

1、forward()方法只能将请求转发到同一个应用程序下的其他组件中。sendRedirect()方法则可以重定向到其他应用程序中的资源。

2、通过sendRedirect()方法重定向后浏览器地址栏内容会变为新的指定地址。forward()方法请求转发后浏览器地址栏内容不会改变。

3、forward()方法中被调用者和调用者共享同一个request和response对象。sendRedirect()方法中被调用者和调用者各自拥有独立的request和response对象,属于两个独立的过程。

二、Servlet会话跟踪

定义:Cookie是服务器发给客户端的一小段文本,保存在浏览器所在客户端的内存或磁盘上。

Cookie的安全机制

1、cookie不会以任何形式在客户端被执行

2、浏览器会限制来自同一个网站的Cookie数目

3、单个Cookie长度是有限制的

4、浏览器限制了最多可以接收的Cookie数目

案例:使用Cookie保存用户名和密码,当用户再次登陆时,在相应的文本内容显示上次登录时输入的信息

编写用于接收用户输入的文件

package chapter2;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "Login2Servlet")
public class Login2Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String cookieName = "admin";
        String cookiePwd = "123456";
        //获取所有的cookie
        Cookie[] cookies = request.getCookies();
        String userName = "";
        String password = "";
        String isChecked = "";
        //如果cookie数组不为null,说明之前设置过用户名和密码
        //将用户名和密码取出来
        if(cookies != null && cookies.length > 0){
            //如果曾经设置过用户名和密码,那么ischecked应该是checked
            isChecked = "checked";
            for (int i = 0;i < cookies.length;i++){
                //获取用户名
                if (cookies[i].getName().equals(cookieName)){
                    userName = cookies[i].getValue();
                }
                //获取密码
                if (cookies[i].getName().equals(cookiePwd)){
                    password = cookies[i].getValue();
                }
            }
        }
        response.setContentType("text/html;charset=GBK");
        PrintWriter out = response.getWriter();
        out.println("<html>\n");
        out.println("<head><title>登录</title></head>\n");
        out.println("<body>\n");
        out.println("<center>\n");
        out.println("<form action='chapter2.CookieTest'" + "method='post'>\n");
        out.println("姓名:<input type='text'" + "name='UserName' value='" + userName + "'><br/>\n");
        out.println("密码:<input type='password'" + "name='Pwd' value='" + password + "'><br/>\n");
        out.println("保存用户名和密码<input type='checkbox'" + "name='SaveCookie' value='Yes'" + isChecked + ">\n");
        out.println("<br/>\n");
        out.println("<input type=\"submit\">\n");
        out.println("</form>\n");
        out.println("</center>\n");
        out.println("</body>\n");
        out.println("</html>\n");

    }
}

编写用于处理用户输入的信息的文件

package chapter2;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "CookieTest")
public class CookieTest extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie userCookie = new Cookie("userName",request.getParameter("UserName"));
        Cookie pwdCookie = new Cookie("password",request.getParameter("Pwd"));
        if(request.getParameter("SaveCookie") != null && request.getParameter("SaveCookie").equals("Yes")){
            userCookie.setMaxAge(7*24*60*60);
            pwdCookie.setMaxAge(7*24*60*60);
        }else {
            userCookie.setMaxAge(0);
            pwdCookie.setMaxAge(0);
        }
        //将cookie发送给客户端
        response.addCookie(userCookie);
        response.addCookie(pwdCookie);
        PrintWriter out = response.getWriter();
        out.println("Welcome," + request.getParameter("UserName"));
    }
}

2.2 Session

定义:Session用于跟踪客户端的状态。即在一段时间内单个客户端与web服务器之间的一连串交互过程称为一个会话。

2.2.1 session的创建

getSession()方法

getSession(Boolean create)方法

2.2.2 session的使用

存取数据的方法

setAttribute():保存数据

getAttribute():获取数据

返回的数据类型为Object,必要时需要进行类型转换

销毁Session

session.invalidate()

2.2.3 session的生命周期

1、客户端向服务器第一次发送请求时,request中并无sessionID

2、此时服务器端会创建一个Session对象,并分配一个sessionID。Session对象保存在服务器端,此时为新建状态调用session.isNew()返回true

3、当服务器端处理完毕后,会将sessionID通过response对象传回客户端,浏览器负责保存到当前进程中。

4、当客户端再次发送请求时,会同时将sessionID发送给服务器

5、服务器根据传递过来的sessionID将这次请求与保存在服务器端的Session对象联系起来。此时Session对象已不处于新建状态,调用session.isNew()返回false

6,循环3~5过程,直至session销毁

案例:用户在初始化界面输入一个值,点击”提交“按钮,会进入到第一个Servlet,第一个Servlet将输入的值分别保存在request和session中,在第二个session中从request和session对象中提取信息并展示

编写html页面

<%--
  Created by IntelliJ IDEA.
  User: YZW
  Date: 2022/10/25
  Time: 15:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Session示例</title>
</head>
<body>
    <form method="post" action="s1">
        <table>
            <tr>
                <td>输入数据:<input type="text" name="count"></td>
            </tr>
        </table>
        <input type="submit" value="提交">
    </form>
</body>
</html>

编写FirstServlet.java

package chapter2;

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;

@WebServlet(name = "FirstServlet")
public class FirstServlet extends HttpServlet {
    public FirstServlet(){
        super();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求的编码字符为GBK
        request.setCharacterEncoding("GBK");
        //设置响应的文本类型为html,编码字符为GBK
        response.setContentType("text/html;charset=GBK");
        PrintWriter out = response.getWriter();
        //获取表单数据
        String str = request.getParameter("count");
        request.setAttribute("request_param",str);
        HttpSession session = request.getSession();
        session.setAttribute("session_param",str);
        out.println("<a href='s2'>下一页</a>");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

编写SecondServlet.java

package chapter2;

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;

@WebServlet(name = "SecondServlet")
public class SecondServlet extends HttpServlet {
    public SecondServlet(){
        super();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取存放在request中的数据
        Object obj1 = request.getAttribute("request_param");
        String request_param = null;
        if(obj1 != null){
            request_param = obj1.toString();
        }else {
            request_param = "null";
        }
        //获取存放在session中的数据
        HttpSession session = request.getSession();
        Object obj2 = session.getAttribute("session_param");
        String session_param = null;
        if(obj2 != null){
            session_param = obj2.toString();
        }else{
            session_param = "null";
        }

        response.setContentType("text/html;charset=GBK");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h3>请求对象中的参数:" + request_param + "</h3>");
        out.println("<h3>session对象中的参数:" + session_param + "</h3></body></html>");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

2.3 ServletContext接口

同一个上下文中的所有Servlet共享存在于其中的属性和信息

2.3.1 ServletContext生命周期

1、新的Servlet容器启动的时候,服务器端会创建一个ServletContext对象

2、在容器运行期间,ServletContext对象一直存在

3、当容器停止时,ServletContext的生命周期结束

2.3.2 ServletConfig和ServletContext之间的区别(重要)

ServletConfig作用于某个特定的Servlet

ServletContext作用于整个web应用,是所有Servlet的上下文环境

2.4 补充

  • 使HttpSession失效的三种方式:1、关闭浏览器 2、调用session中invalidate()方法 3、等待session超时。

  • ServletContext的范围比session的范围更大

三、JSP基础

3.1 JSP特点

  • 简单快捷
  • 动态内容生成和显示相分离
  • 组件重用
  • 易于部署、升级和维护

3.2 JSP执行原理

1、客户端发送请求

2、容器接收到请求后检索对应的JSP页面(如果是第一次被请求,则容器将其翻译成一个Java文件,即Servlet

3、Servlet原代吗编译成字节码,即.class文件

4、最后把结果相应给客户端

JSP文件被修改后,容器能够检测到并重新翻译和编译

如果JSP页面出现错误,将不执行翻译操作

3.3 JSP基本结构

6类基本元素组成

  • JSP指令
  • JSP声明
  • JSP表达式
  • JSP脚本
  • JSP动作
  • JSP注释

四、JSP指令和动作

4.1 JSP指令

4.1.1 page指令

作用:导入包,指明输出内容类型、控制session

属性:import (import是page指令中唯一一个可以在JSP页面中多次出现的属性)

​ contentType

​ pageEncoding

4.1.2 include指令

作用:在当前JSP中包含其他文件,被包含的文件可以是JSP、HTML或文本文件

4.1.3 taglib指令

语法格式:

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

4.2 JavaBean

4.2.1 JavaBean简介

特点:1、可重用 2、升级方便 3、不依赖于平台

广义上的JavaBean要满足以下需求:

  • 是一个公有类、含有公有的无参构造方法
  • 属性私有
  • 属性具有公有的get和set方法

当JavaBean访问不存在的属性时,发生异常

4.3 JSP标准动作

其中<jsp:setProperty>

两种语法格式:

<jsp:setProperty name="id" property="属性名" value="值"/>
或
<jsp:setProperty name ="id" property="属性名" param="参数名"/>

注意:param属性不能和value属性一起使用

include指令和include标准动作的区别(重要)

1、include指令是把引用文件加入到当前JSP页面中一起编译,然后运行

​ include标准动作是引用文件和当前内容各自独立编译,然后将引用文件加入到当前页面中 运行。

2、include指令是静态引用,不会实时检查引用文件的内容变化

​ include标准动作是动态引用,会实时检查引用文件的内容的变化

五、JSP内置对象

5.1 常用的内置对象

out、request、response、session、application

无需定义,直接使用

5.2 JSP的4种作用范围(小->大)

pageContext

request

session

application

都具有getAttribute()和setAttribute()方法

5.3 补充

  • request.getAttribute()和 request.getParameter()的区别

1、request.getParameter()获取的类型是String;request.getAttribute()获取的类型是Object。

2、request.getPrameter()获取的是POST/GET传递的参数值和URL中的参数;request.getAttribute()获取的是对象容器中的数据值/对象。

3、request.setAttribute()和request.getAttribute()可以发送、接收对象;request.getParamter()只能接收字 符串,

  • 请写出常用的JSP内置对象,并简述它们的功能。

request:请求对象:代表的是来自客户端的请求

response:响应对象:代表的是对客户端的响应

session:会话对象:代表服务器与客户端所建立的会话

application:应用程序对象:负责提供应用程序在服务器中运行时的一些全局信息

out,输出对象:代表了向客户端发送数据的对象

exception:异常对象:用于处理JSP页面中的错误

config:页面的配置信息对象

page:表示JSP页面的当前实例

六、EL和JSTL

6.1 EL的基础语法

${EL表达式}

案例:在JSP页面中使用EL显示person类对象的数据

Person类

package chapter4;

public class JavaBean {
    private String name;
    private String pwd;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }



}

JSP文件

<%--
  Created by IntelliJ IDEA.
  User: YZW
  Date: 2022/10/28
  Time: 10:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head>
    <title>JSP动作</title>
</head>
<body>
    <jsp:useBean id="user" class="chapter4.JavaBean" scope="request"/>
    <jsp:setProperty name="user" property="name" param="loginName"/>
    <jsp:setProperty name="user" property="pwd" param="password"/>
    用户名:<jsp:getProperty name="user" property="name"/>
    <br/>
    密码:<jsp:getProperty name="user" property="pwd"/>
</body>
</html>

6.2 EL隐含对象

根据作用域从小到大

pageScope -> requestScope -> sessionScope -> applicationScope

6.3 JSTL提供的标签库

  • 核心标签库
  • I18N标签库
  • XML标签库
  • SQL标签库
  • EL函数库

6.4 补充

  • JSTL的全称为JavaServer Pages Standard Tag Libraray

  • EL是一种简洁的数据访问语言

  • <<c:when>>必须以<<c:choose>>作为父标签且必须在<<c:otherwise>>之前

  • <<c:otherwise>>必须在<<c:choose>>中

原文地址:http://www.cnblogs.com/hackerGhost/p/16870156.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性