javaee背景

  • 克服传统Client/Server架构的弊端

  • 迎合Browser/Serexer架构的潮流

  • 应用领域为中大型企业软件 中大型网站

    B/S

    • 部署企业应用或者网站 (联网)

Web服务器之Tomcat

WEB服务器简单的来说就是网站服务器 它的作用就是向浏览器等Web客户端提供文档 放置网站文件 让访问网络的用户都可以进行访问 也可以放置文档让用户下载

主流服务器

  • IIS ,Nginx,Tomcat

web项目概况

一个wed项目由serlet jsp页面及

  1. JSP(全称JavaServer Pages)是由Sun公司倡导研发的一种,动态生成HTML页面的一种网页技术。
  2. 简单来说,JSP是JAVA与HTML的结合体
  3. 可以运行在任何系统之上,无需改动代码
  4. 在web开发过程中担任显示层的角色
  • . JSP中的语法成份:
  • HTML
  • 注释
  • 声明
  • 脚本
  • 表达式·
  • 指令
  • 动作
  1. 1、使用HTML注释
  • 格式:

  • 右击页面-》查看源代

  • .在客户端能看到注释内容码

  1. . 使用JSP注释

    • 格式:<%--注释语句--%>
    • 在客户端看不到注释内容

    嵌入JAVA代码

    使用声明方式在HTML页面中嵌入JAVA代码

    1)用于定义方法、成员变量

    2)格式: <%! JAVA代码 %>

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/3/31
  Time: 15:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% %>局部变量
<%--         <%=%>输出变量的值       --%>
<%String name="陈叔钰";
    System.out.println(name);

%>
<%=name%>
</body>
</html>

JSP的page指令

·1、作用: page指令用于设定JSP页面的属性与功能·2、语法:<%@page设置属性%>
. 3、属性:
. 1) language="java"
指定嵌入的语言
. 2) import= "iava.util.*"
导包
. 3) contentType="text/html ;charset=UTF-8"设置编码

jsp的java方法

使用声明方式在HTML页面中嵌入JAVA代码. 1)用于定义方法、成员变量
格式:<%!JAVA代码%>→

<%!
public String str = "声明元素";
声明:
public void show(){
定义成员变量
System.out.println(str);
声明方法
%>

<%@ page import="fhc.Xues" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="hello-servlet">Hello Servlet</a>
<%
   Xues xues = new Xues();
   Xues xues1 = new Xues();
   Xues xues2 = new Xues();
    xues.setAge(12);
    xues.setName("学1生");
    xues1.setAge(122);
    xues1.setName("学2生");
    xues2.setAge(123);
    xues2.setName("学3生");
    ArrayList<Xues> S = new ArrayList<>();
    S.add(xues);
    S.add(xues1);
    S.add(xues2);
%>
 <table>
     <tr><td>姓名</td>
         <td>年龄</td></tr>
     <%
         for (Xues xues3:S){
     %>
     <td><%=xues3.getName()%></td>
     <td><%=xues3.getAge()%></td>


     <%}%>
 </table>
</body>
</html>

Servlet概述

  1. Servlet是一种服务器端的Java应用程序
  2. Servlet接收浏览器发送的请求,然后将处理生成的结果应答给空户湍(处理客户端请求)
  3. 在web开发过程中一般担任控制层的角色

init.方法:初始化方法,只执行一次

service方法,每次发送请求,都被调用

destroy方法:销毁方法,只执行1次

Servlet的执行原理:执行原理:
1.当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
http://localhost:8080/demo0425 servlet war exploded/Servlet01
2分析路径,根据路径找到 servlet的类,从而找到servlet类的字节码文件3. tomcat会将字节码文件加载进内存,并且创建其对象
4.调用其方法

servlet这个对象是Tomca创建的

​ 默认情况下,第一次被访问时, servlet被创建可以配置执行servlet的创建时机。
​ *在标签下配置
​ 1.第一次被访问时,创建
​ 本<load -on-startup>的值为负数,默认2.在服务器启动时,创建

  • 的值为0或正整数(在web.xml中配置文件)老.cLIahconi.1o+i 一1.

设置servlet的路径:有2种方法:

1〕通过注解配置
2)通过web.xml文件

Servlet中的生命周期方法:
1.被创建:执行init方法,只执行一次
Servlet什么时候被创建?
默认情况下,第一次被访问时,servlet被创建*

​ 可以配置执行Servlet的创建时机。
​ 在标签下配置
​ 1.第一次被访问时,创建

的值为负数,默认

​ 2.在服务器启动时,创建

的值为求或正整数(在web.xm1中配置文件)或者:@webservlet(value=" / Servletei",loadonstartup =
*解决:尽量不要在servlet中定义成员变量。即使定义了成员变量,也不要对修改值

servlet的init方法,只执行一次,说明一个servlet在内存中只存在一个对象,servlet是单例的

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
     <servlet-name>Servlet1</servlet-name><!--   servlet的类名-->
    <servlet-class>cn.sdxh.web.servelt.Servlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet1</servlet-name>
        <url-pattern>/ss.d</url-pattern><!--   servlet的路径-->
    </servlet-mapping>
    
</web-app>

servlet类1

package cn.sdxh.web.servelt;

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

@WebServlet(name = "Servlet1", value = "/Servlet1")
public class Servlet1 extends HttpServlet {
    @Override//处理get
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("asda");//网页
        System.out.println("1231");//控制台
    }

    @Override//处理Post
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

servlet类2

package cn.sdxh.web.servelt;

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

@WebServlet("/Servlet02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("a1sda");//网页
        System.out.println("12131");//控制台
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

网页代码

<%@ page import="fhc.Xues" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="hello-servlet">Hello Servlet</a>
<%
   Xues xues = new Xues();
   Xues xues1 = new Xues();
   Xues xues2 = new Xues();
    xues.setAge(12);
    xues.setName("学1生");
    xues1.setAge(122);
    xues1.setName("学2生");
    xues2.setAge(123);
    xues2.setName("学3生");
    ArrayList<Xues> S = new ArrayList<>();
    S.add(xues);
    S.add(xues1);
    S.add(xues2);
%>
 <table>
     <tr><td>姓名</td>
         <td>年龄</td></tr>
     <%
         for (Xues xues3:S){
     %>
     <td><%=xues3.getName()%></td>
     <td><%=xues3.getAge()%></td>


     <%}%>
 </table>
</body>
</html>

网址localhost:8080/demo2_war_exploded/ss.d

网页显示 asda 控制台显示 1231

HttpServletResponse概述

服务器向客户端浏览器返回的应答信息被封装成为一个HttpServletResponse对象

常用方法

返回值方法名参数 说明
void setCharacterEncoding(String env) 将编码设置为env指定的格式
void setContentType(String type) 设置返回类型
PrintWriter getWriter() 获取向浏览器输出数据的流
void sendRedirect(String location) 跳转到location指定的位置
String encodeURL(String url) 对URL进行重新编码

中文编码问题

servlet类

先设置完编码,再输出

package cn.sdxh.web.servelt;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/Servlet02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8"
        );//第一行 设置编码
        response.getWriter().write("a1sda");//网页
        System.out.println("12131");//控制台

        PrintWriter getWriter =  response.getWriter();
        getWriter.write("陈淑钰超级无敌帅 天下第一帅 吴彦祖");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
网址localhost:8080/demo2_war_exploded/Servlet02

Jsp和Servle

相同性:

  1. 都必须运行在服务器中
  2. 都可以通过Java+HTML动态生成html页面

JSP原理

  1. 每个JSP 页面在第一次被访问时,会被翻译成一个Servlet源程序(java文件),接着再把这个Servlet源程序编译成相应的class类文件
  2. WEB容器会像调用普通Servlet程序一样,来装载和解释执行这个由JSP页面翻译成的Servlet程序

不同性:

  1. jsp中更容易编写HTML代码,不易于编写相关JAVA代码。4
  2. servlet更侧重于java代码的编写,不易于编写HTML代码

结论

结论:

为了保证代码的整洁性和可维护性,根据他们各自的优势做了以下区分:

  1. JSP负责页面展示
  2. Servlet负责数据业务处理

jsp超链接调用servlet类

相对路径

<%--相对路径 Servlet1--%>
<a href="Servlet1">Hel</a>

绝对路径

<a href="/demo4_war_exploded/Servlet1">Hel</a>

img

在Jsp中编写表单

客户端浏览器发出的请求被封装成为一个HttpServletRequest对象

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="Servlet1">Hel</a>、
<form action="Servlet1" method="get">
    用户<input type="text" name="1"/><br>
    密码<input type="password" name="2"/><br>
    <input type="submit" value="登录">
</form>
</body>
</html>

servlet类1

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

@WebServlet(name = "Servlet1", value = "/Servlet1")
public class Servlet1 extends HttpServlet {
    @Override//处理get
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("asda");//网页
        System.out.println("1231");//控制台
        String NAME=request.getParameter("1");
        String MIMA=request.getParameter("2");
        System.out.println("用户名"+NAME);
        System.out.println("密码"+MIMA);
    }

    @Override//处理Post
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

常用方法的使用

获得web应用程序在浏览器中发布的目录名

servlet类

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

@WebServlet(name = "Servlet1", value = "/Servlet1")
public class Servlet1 extends HttpServlet {
    @Override//处理get
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("asda");//网页
        System.out.println("1231");//控制台

        String pa=request.getContextPath();//发布的目录名字
        System.out.println(pa);//发布的目录名字
    }
    @Override//处理Post
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

处理中文乱码

response.setContentType( "text/html; charset=UTF-8"");//处理响应中的中文乱码

request.setcharacterEncoding("UTF-8");//处理请求中的中文乱码

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

@WebServlet(name = "Servlet1", value = "/Servlet1")
public class Servlet1 extends HttpServlet {
    @Override//处理get
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setContentType("text/html; charset=UTF-8");//处理响应中中文
        request.setCharacterEncoding("utf-8");//处理请求中的代码
    }

    @Override//处理Post
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

处理Post月Get中文乱码

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    String username = request.getParameter("username");
    String password = request.getParameter(" password ");

}

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String username = request.getParameter(" username ");
    System.out.prinlnt(username);
    // 乱码
    // 处理乱码
    username = new String(username.getBytes("ISO8859-1"),"UTF-8") 

}

/requet:请求对象'

/response:响应对象

修改其他人的项目服务器

image-20220406153624081

image-20220406153637261

image-20220406153700304

+:添加
-:移除

Get与Post

表单和超级链接请求均默认为Get

表单可以设置提交方式为Post

Get

  • Get是向服务器提交数据的一种方式
  • Get方式提交会请求到servlet中doGet方法
  • Get请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,如:servlet/LoginServlet?username=“admin”&password=“123”
  • Get显式提交 不安全
  • Get方式提交的数据最多只能是1024字节

Post

  • Post提交方式会请求到servlet中doPost中

  • Post提交:把提交的数据放置在是HTTP包的包体中。

  • Post隐式提交 安全

  • 数据大小理论上POST没有限制,可传较大量的数据

  • Post安全

后台传递到前台(Servlet向jsp传递数据)

  1. 将要传递的数据放入request对象中
  2. 使用请求转发将数据传递到指定的页面上
  3. 页面接收request传递过来的数据并展示

HttpServletRequest方法

返回值/方法名/参数 说明
void setCharacterEncoding(String env) 将编码设置为env指定的格式
String getParameter(String name) 获取请求中的由name指定的参数值
void setAttribute(String name, Object o) 在这个请求中存储属性。
void removeAttribute(String name) 删除name指定的属性值
Object getAttribute(String name) 返回name指定的属性值
String getContextPath() 项目的相对路径

void setAttribute(String name, Object o) 在request中保存对象的值

Object getAttribute(String name) 从request对象中取值,根据键来取值

返回值方法名参数 说明
RequestDispatcher getRequestDispatcher(String path) 获取指定path路径的转发对象
HttpSession getSession() 返回与这个请求关联的当前的有效的session会话
String getRequestURI() 返回的是请求的全部,包括Http协议,端口号,servlet名字和映射路径

RequestDispatcher getRequestDispatcher(String path) 获得转发器

网页的登录

输入用户名和密码,验证用户名和密码是否正确,如果合法,则跳转到欢迎页面,并显示欢迎你,XXX

html

登录

难点 三目运算符 判断后台传输的数据是不是空 是空 就打印空的字符串 不是空 就打印出得到的字符

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<%--相对路径 Servlet1--%>
<a href="Servlet1">Hel</a>
<%--绝对路径 <form action="/demo4_war_exploded/Servlet1" method="get">
--%>
<%--equest.getContextPath()项目的根目录--%>
<form action="<%=request.getContextPath()%>/Servlet1" method="get">
    用户<input type="text" name="a"/><br>
    密码<input type="password" name="b"/><br>
    <input type="submit" value="登录">

</form>
<div style="outline-width: thin">
    <%=
    request.getAttribute("msg")==null?"":request.getAttribute("msg")
    %>>

</div>
</body>
</html>

欢迎

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/6
  Time: 16:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
欢迎
<h3>你的名字<%= request.getAttribute("se")%></h3>
<h3>你的密码<%= request.getAttribute("s")%></h3>


</body>
</html>

Servlet1

if判断前台 输入的账户密码是否合法 合法把账户密码就输出到欢迎

不合法就输出把"用户名密码不合法"到 登录页面

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

@WebServlet(name = "Servlet1", value = "/Servlet1")
public class Servlet1 extends HttpServlet {
    @Override//处理get
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");//处理响应中中文
        request.setCharacterEncoding("utf-8");//处理请求中的代码
/*        response.getWriter().write("asda");//网页
        System.out.println("1231");//控制台*/
        String NAME=request.getParameter("a");
        String MIMA=request.getParameter("b");
        System.out.println("用户名"+NAME);
        System.out.println("密码"+MIMA);
        request.setAttribute("se",NAME);
        request.setAttribute("s",MIMA);


if (NAME.equals("123")&&MIMA.equals(123)){
    request.getRequestDispatcher("欢迎.jsp").forward(request,response);
}else {
    request.setAttribute("msg" ,"用户名密码不合法");
   request.getRequestDispatcher("index.jsp").forward(request,response);
}
    }
    @Override//处理Post
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

输出对象与列表

输出对象

html

<%@ page import="网站.xs" %><%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/7
  Time: 16:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="<%=request.getContextPath()%>/Servlet02">cg</a>
<%
xs a=(xs)request.getAttribute("d");
%>
<h1>显示对象</h1>
<%=a.getId()%></br>
    <%=a.getName()%>
</br><%=a.get年龄()%></br>
${d.name}
${d.年龄}
${d.id}


</body>

</html>

Servletall

import 网站.xs;

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

@WebServlet(name = "Servlet02", value = "/Servlet02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");//处理响应中中文
        request.setCharacterEncoding("utf-8");//处理请求中的代码
        xs 学生 = new xs();
        学生.setId(1);
        学生.setName("陈淑钰");
        学生.set年龄(17);
        request.setAttribute("d",学生);
        request.getRequestDispatcher("对象.jsp").forward(request,response);
    }

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

对象

package 网站;

public class xs {
    private String name;
    private int 年龄;
    private int id;

    public String getName() {
        return name;
    }

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

    public int get年龄() {
        return 年龄;
    }

    public void set年龄(int 年龄) {
        this.年龄 = 年龄;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

输出列表

html

<%@ page import="网站.Account" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/8
  Time: 15:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //根据request域中键名来取值
    List<Account> accountList= (List<Account>) request.getAttribute("list");
%>
<h1>显示集合</h1>
<table width="500" border="1">
    <tr>
        <td>编号</td><td>姓名</td><td>存款</td>
    </tr>
        <%
      for(Account ac:accountList) {
    %>
    <tr>
        <td><%=ac.getId()%></td><td><%=ac.getName()%></td><td><%=ac.getMoney()%></td>
    </tr>

        <%
      }
    %>
</body>
</html>

Servletall

import 网站.Account;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(name = "accountAllServletall", value = "/accountAl1lServletall")
public class accountAllServletall extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        request.setCharacterEncoding("utf-8");
        //2.模拟从数据库中查询所有账户
        Account account1=new Account();
        account1.setId(1);
        account1.setName("苏子然");
        account1.setMoney(10000);

        Account account2=new Account();
        account2.setId(2);
        account2.setName("陈淑玉");
        account2.setMoney(10000000);

        Account account3=new Account();
        account3.setId(2);
        account3.setName("徐文焕");
        account3.setMoney(20000);

        List<Account> accountList=new ArrayList<Account>(); //创建一个集合
        accountList.add(account1);
        accountList.add(account2);
        accountList.add(account3);
        //在request对象中保存一个集合
        request.setAttribute("list",accountList);
        //转发到另外一个页面
        request.getRequestDispatcher("account.jsp").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

对象

package 网站;

public class xs {
    private String name;
    private int 年龄;
    private int id;

    public String getName() {
        return name;
    }

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

    public int get年龄() {
        return 年龄;
    }

    public void set年龄(int 年龄) {
        this.年龄 = 年龄;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

总页面

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/8
  Time: 15:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<a href="<%=request.getContextPath()%>/Servlet02">查询账户</a><br/>
<a href="<%=request.getContextPath()%>/accountAl1lServletall">查询账户1</a><br/>
</body>
</html>

el.和 jstl.表达式

EL:

简化 ip页面中java代码语法:${表达式}
${键名}:取request对象中存放的值
使用﹒访问对象的属性

对象

    private int id;

    public String getName() {
        return name;
    }

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

    public int get年龄() {
        return 年龄;
    }

    public void set年龄(int 年龄) {
        this.年龄 = 年龄;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

Servletall

import 网站.xs;

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

@WebServlet(name = "Servlet02", value = "/Servlet02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");//处理响应中中文
        request.setCharacterEncoding("utf-8");//处理请求中的代码
        xs 学生 = new xs();
        学生.setId(1);
        学生.setName("陈淑钰");
        学生.set年龄(17);
        request.setAttribute("d",学生);
        request.getRequestDispatcher("对象.jsp").forward(request,response);
    }

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

html

<%@ page import="网站.xs" %><%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/7
  Time: 16:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="<%=request.getContextPath()%>/Servlet02">cg</a>
<%
xs a=(xs)request.getAttribute("d");
%>
<h1>显示对象</h1>
${d.name}
${d.年龄}
${d.id}
</body>
</html>

JSTL:标签库

代替java中if语句代替java中 for语句

. 1、<c:if>标签用于实现if到断的功能
. 2、标签格式:

条件为真时执行的代码
</c:if>
相当于if(){
}

  1. 相当于java中if elseif else结构
    <c:cho9se>
    <c:when test=""></c:when><c:otherwise.>kc:otherwise>
<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/13
  Time: 9:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    pageContext.setAttribute("i",11);
%>
<c:if test="${i%2==0}">
    ${i}我是傻逼
</c:if><c:if test="${i%2!=0}">
    ${i}我是智障
</c:if>

</body>
</html>

JSP的taglib指令

  1. 作用: taglib指令向JSP页面中导入新的标签
  2. .语法:<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
  3. 、属性:
    1. uri =http://java.sun.com/jsp/jstl/core指定要导入标签库的位置
    2. prefix= “c"用于区分导入的标签库

Jstl标签库如何来用,

  1. 导包WEB-INFVib

  2. 引入标签库<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    )使用

  3. <c;forEach>相当于for循环<c:forEach var=“变量” items="要遍历的集合/数组" varStatus,=“状态变”${(变量}</ c:forEach>

<%@ page import="网站.Account" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/8
  Time: 15:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--<%--%>
<%--    //根据request域中键名来取值--%>
<%--    List<Account> accountList= (List<Account>) request.getAttribute("list");--%>
<%--%>--%>
<h1>显示集合</h1>
<table width="500" border="1">
    <tr>
        <td>编号</td><td>姓名</td><td>存款</td>
    </tr>

    <c:forEach items="${list}" var="ad">

 <tr>   <td>${ad.id}</td><td>${ad.name}</td><td>${ad.money}</td></tr>
    </c:forEach>



<c:forEach items="${list}" var="a">
    <li>${a.id}&nbsp;&nbsp;&nbsp;${a.money}</li>

    </c:forEach>
</body>
</html>

jsp.的九大内置对象

对象类型 对象名称
javax.servlet.ServletContext application
javax.servlet.http.HttpServletRequest request
javax.servlet.http.HttpSession session
javax.servlet.jsp.PageContext pageContext
javax.servlet.http.HttpServletResponse response
javax.servlet.jsp.JspWriter out
java.lang.Object page
java.lang.Throwable exception
javax.servlet.ServletConfig config

request: 请求对象,用于jsp向servlet,或者servlet向jsp传递数据。

response: 响应对象,用于跳转页面,设置servlet返回数据类型等。

out输出对象,在java代码中通过这个对象输出信息到页面

session: 浏览器会话对象,服务器会为每一个用户创建一个session对象 适用于保存用户登录信息,用户与浏览器对话。

application: 服务器对象,所有用户共用一个服务器对象,服务器关闭后失效 适合用于存储公共数据,禁止乱用!非常占据服务器内存;

pageContext: 可以通过它获得上面所有对象。

config: 对象的主要作用是取得服务器的配置信息。

page: 对象代表JSP本身,页面级对象。

exception: 捕获页面异常对象。

一、request请求对象:

  1. 1.作用:请求对象,获取客户端浏览器向服务器发送的请求用于jsp向servlet传值或者servlet向jsp,传值
  2. 常用方法:
  3. reguest.getParamter“参数名"):获取参数的值
  4. reguest.setcharacterEncoding(“编码”):设置请求的编码
  5. reguest-getDispatcher(“页面的路径"):获取转发器
  6. reguest.ietAttribute(“键”,值):保存键值对
  7. reguest.getAttribute(“键”):根据键获取值,相当于$"键名”

二.response:响应对象

,用于跳转页面,设置servlet返回数据类型等。

  1. 常用方法:

response.setContentlvpe("text/html:charset=UTF-8"):设置响应的编码
response.getWriter()😕 /获取输出流

response. sendRedirect(“路径”)😕/设置重定向的路径

三.out:输出对象

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/11
  Time: 11:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    int a=1;
out.println(a);
%>
</body>
</html>

四.page:对象

代表JSP本身,页面级对象。

  1. exception:异常对象
    在一般isp.文件中不能使用exception这个对象。把这个页面标记为错误页面,才能用这个对象

    <page sontentTxpe="text/html;shacset=UTF-8" language="java"isEccorRage="true”%>

    image-20220411104204954

    错误页面:如果其它页面发生错误,要跳转的页面。

    image-20220411103657584

    <%--
      Created by IntelliJ IDEA.
      User: g15
      Date: 2022/4/11
      Time: 9:53
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8"  errorPage="错误.jsp" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%--<%response.sendRedirect("http://c.biancheng.net/view/4015.html");%>--%>
    <%=3/0 %>
    </body>
    </html>
    
    <%--
      Created by IntelliJ IDEA.
      User: g15
      Date: 2022/4/11
      Time: 10:43
      To change this template use File | Settings | File Templates.
    --%>
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" isErrorPage="true"%>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    出错
    
    </body>
    </html>
    

五.pageContext:上下文对象

可以通过它获得其它8大对象

提问:获取当前应用程序的发布的根目录?? ?0eaue.st.getcontextRath()

${Ragecontext.squest.sontexteath}

相当于rcequestgetcontextPath()

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/8
  Time: 15:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>


<a href="${pageContext.request.getContextPath()}/Servlet0411">切换</a><br/>
</body>
</html>
package 网站;

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

@WebServlet(name = "Servlet0411", value = "/Servlet0411")
public class Servlet0411 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("http://c.biancheng.net/view/4015.html");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

六.Session对象session对象:

会话对象,作用会话管理。

概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession

会话:从访问服务器开始,到离开服务器,之间做的所有的请求与响应就是一次会话。

当客户端用户向服务器提出请求打开网页后,石该网贝中包含了为用户建立session的程序代码,则便会产生session对象。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。记住你的身份。
从搜索,添加到购物车,下单,记住你的身份。
比如:判断用户是否登录,没有登录就进入下单页面,这是不可能的
在网站上登录银行账户,如果你10分钟内没有做任何操作,然后回来再操作时,提示你重新登录,会话已过期。系统不知道站在电脑面前的是哪位?
-session在服务器端使用HttpSession,的对象来表示
·在servlet中,通过 request 的 getSession,方法,来获取
HttpSession,对象
常用的方法;(request对象也有这些方法)
void s.etAttibute(“键”,”值”);l/向session对象中保存
object getAttribute(“键”);//从session获取值
voidremoxeAttcibute(“键”);/I从session对象中移除

常用的功能:
1.记住你身份,判断你有没有登录2.购物车功能

Session:会话对象,记录用户的身份

练习1:使用Session常用方法输出名字

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/12
  Time: 9:52
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

姓名;${NAME}

</body>
</html>
package com.example.demo0412;

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

@WebServlet(name = "Servlet01", value = "/Servlet01")
public class Servlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
      session.setAttribute("NAME" ,"陈淑钰");
      response.sendRedirect("session.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

练习1:用户输入用户名和密码,进入欢迎页面,显示欢迎你,xXx。如果用户没有登录,显示“请登录”

登录

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/4/12
  Time: 11:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/Servlet02">
    姓名:<input type="text" name="name" value=${s}>
    密码:<input type="text" name="pas" value=${d}>
    <input type="submit" value="登录">

</form>
<div>${mypas01}</div>

</body>
</html>

判断登录

<%--
  Created by IntelliJ IDEA.
  User: HP
  Date: 2022/4/12
  Time: 9:36
  To change this template use File | Settings | File Templates.
--%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--<%--%>
<%--    String pata=request.getContextPath();//获取根目录--%>

<%--    //如果客户直接访问wel.jsp页面,没有登录--%>
<%--    String msg="";//定义一个变量,存放提示信息--%>

<%--    String name=(String) session.getAttribute("myname");//取出session中的值--%>
<%--    //判断name是否为空,如果为空,则没有登录(说明你不是从登录也买你访问的这个页面    )--%>
<%--    if (name==null){--%>
<%--        msg="您没登陆"+"<a href=dl.jsp>请登录</a>";--%>
<%--    }--%>
<%--    else {//显示欢迎你,XXX--%>
<%--        msg="欢迎你"+name+"<a href='"+pata+"/Servletxs'>退出</a>";--%>
<%--    }--%>
<%--    pageContext.setAttribute("mymsg",msg);--%>
<%--%>--%>
<c:if test="${myname==null}">
    您没登陆"+"<a href=dl.jsp>请登录</a>
</c:if><c:if test="${myname!=null}">
    <a href="${request.getContextPath()}/Servletxs">退出</a>
</c:if>
${mymsg}<%--显示提示信息--%>
<h1>欢迎访问软件2101的网站</h1>

</body>
</html>

后台

package com.example.demo0412;

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

@WebServlet(name = "Servlet02", value = "/Servlet02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String NAME =request.getParameter("name");
String pas =request.getParameter("pas");
request.setAttribute("s",NAME);
request.setAttribute("d",pas);
if (NAME.equals("2060")&&pas.equals("123")){
    request.getSession().setAttribute("myname",NAME);
    request.getSession().setAttribute("mypas",pas);
    response.sendRedirect("ifdl01.jsp");
}else {
    request.getSession().setAttribute("mypas01","密码错误");
    response.sendRedirect("ifdl01.jsp");

}

注销

package com.example.demo0412;

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

@WebServlet(name = "Servletxs", value = "/Servletxs")
public class Servletxs extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

        HttpSession session=request.getSession();//获取session
        session.invalidate();//设置session失效
        response.getWriter().write("正常退出");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

当客户端关闭后,服务器不关闭。两次获取session是否为同一个?
默认情况下。不是。
+如果需要相同,则可以创建cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。jsessionid只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了
cookie c = new cookie("3SESSIONID" , session.getId( ));
c.setMaxAge(6o60);
response.addCookie(c);
2.客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
半不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
esession的钝化:
在服务器正常关闭之前,将session对象系列化到硬盘上
session的活化:
*在服务器启动后,将session文件转化为内存中的session对象即可。

  1. session什么时候被销毁?
    1.服务器关闭

2.session对象调用invalidate() 。 //session.invalidate()是将session设置为失效,一般在退出
使用

3.session默认失效时间 30分钟
选择性配置修改web.xml文件中设置
38</ session-timeout>< / session-config>

  1. session的特点

    1.session用于存储一次会话的多次请求的数据,存在服务器端

    1. session可以存储任意类型,任意大小的数据、

七.cookie:

1.概念:客户端会话技术,将数据保存到客户端
2.快速入门:
使用步骤:
1.创建cookie对象,绑定数据
new Cookie(String name,string value(cookie中不能存中文,不能存空格 存中文和空格需要编码)

)2.发送Cookie对象
response.addCookie( cookie cookie

)3。获取cookie,拿到数据

  • cookie[]request.getcookies()
    3.实现原理
    ¥基于响应头set-cookie和请求头cookie实现

创建cookie对象,绑定数据 new Cookie(string name,string value)

发送cookie对象 response.addcookie(cookie cookie)

获取cookie,拿到数据 cookie[ ]request.getcookies()

Cookie对象的常用方法:getName () :获取cookie名

getvalue( ):获取cookie值

Cookie的使用步骤:

  1. 创建一个Cookie
  2. 设置Cookie的有效期
  3. 发送Cookie
  4. 获取Cookie
  5. 查找Cookie

创建cookie

package com.example.demo0412;

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

@WebServlet(name = "ServletaddCookie", value = "/ServletaddCookie")
public class ServletaddCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//创建cookie
        Cookie cookie = new Cookie("name","yuyu钰");
        //设置时间 秒单位
        cookie.setMaxAge(60*60);
        //发送Cookos
        response.addCookie(cookie);
        response.getWriter().write("创建cookie成功");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

接收

package com.example.demo0412;

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

@WebServlet(name = "ServletCookie", value = "/ServletCookie")
public class ServletCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        for (Cookie c:cookies
             ) {
            if (c.getName().equals("name")){
                String value = c.getValue();
                response.getWriter().write(value);
            }

        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

cookie中不能存中文,不能存空格 存中文和空格需要编码

怎么编码:
uRLEncoder.encode(变量,"utf-8"");
怎么解码:
URLDecoder.decode(变量 "utf-8")

获取上一次访问服务器时间

ackage com.example.demo0412;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet(name = "ServletTime", value = "/ServletTime")
public class ServletTime extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        Cookie[] cookies = request.getCookies();
        Cookie res = null;
        //查找cookies数值中有没有叫time的
        if (cookies != null && cookies.length != 0) {
            for (Cookie c : cookies) {
                if (c.getName().equals("time")) {
                    res = c;
                    break;
                }
            }
        }
        if (res == null) {
            response.getWriter().write("您好,欢迎您首次访问");

        } else {
            String s = res.getValue();
            s = URLDecoder.decode(s, "utf-8");
            response.getWriter().write("您好,欢迎您再次光临,您上次的时间" + s);
        }        //把本次访问这个网站的时间保存到Cookie中

        //获取当前时间
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
        String strDate=simpleDateFormat.format(date);
//        创建cookis对象
        Cookie time = new Cookie("time", strDate);
        time.setMaxAge(60*60*24*30);//设置cookie的有效期是1个月
//        发送Cookie
        response.addCookie(time);


    }  @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

.application

所有用户间共享数据
经常使用场合:记录在线人数
setAttribute(String name, Object object):保存值
getAttribute(String name):获取值

MV三层架构

作用域

作用域从小到大为:PageContext(jsp页面),ServletRequest(一次请求(Request)),HttpSession(一次会话),ServletContext(整个web应用(application))。

一个jsp页面在搜寻数据时,这四个域中有数据同名的话从作用域小的地方到作用域大的地方搜寻。

${域名称.键名}:从指定域中获取指定键的值

对象 域

pageContext pageScope 当前页面中共享数据
request requestScope 一次请求中共享数据
session sessionScope 一次会话的多个请求中共享数据
applicationa pplicationScope 所有的用户共享数据

三层架构

搭建三层
1.导包
WEB-INF\ib目录:
1)mysal.驱动类的包
2)dbcp.连接池的包
3)ist.标签的库包
4)dbutis.包
⒉搭建三层
右击java-》.新建如下包
cn.sdxh.domain:实体包,存放实体类
cn.sdxh.controller:控制层的包,存放servlet
cn.sdxh.dag:数据访问层的包,存放:表名+Dao类
cn.sdxh.serxice:业务层的包,存放:表名+Service类
cn.sdxh.utils;存放工具类

3.创建账户表的实体类、数据访问层接口和业务逻辑层的接口实体类:Account

数据访问层接口: AccountDao

I业务逻辑层的接口:AccountSerxice.

4.补充代码

实体类:Account

​ 类名和表名相同,首字母大写

​ 成员变量名和列名相同,首字母小写

AccountDao :

重定向与转发

一个资源收到客户端请求后,他会通知客户端去访问另外一个web资源,这个过程叫重定向

重定向过程: 客户端浏发送http请求 → web服务器接收后发送30X状态码]响应及对应新的location给客户浏览器 → 客户浏览器发现是30X响应,则自动再发送一个新的http请求,请求ur是新的location地址
→ 服务器根据此请求寻找资源并发送给客户。

转发和重定向对比:

转发重定向
跳转方式服务器端转发客户端转发
客户端发送请求次数1次2次
客户端地址栏是否改变不变
是否共享request域共享不共享(request域中的数据丢失),必须使用session传递属性
是否共享response域共享不共享
范围网站内可以跨站点
JSPURL不可带参数URL可带参数
是否隐藏路径隐藏不隐藏

Filter:过滤器

Filter:过滤器,用来过滤网站的数据;·处理中文乱马

image-20220427095828425

  1. 以指定资源匹配。例如"/index.jsp"

  2. 以目录匹配。例如"/servlet/*"

  3. 以后缀名匹配,例如"*.jsp"

  4. 通配符,拦截所有web资源。"/*"

    配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>Servlet</servlet-name>
        <servlet-class>Filter01.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet</servlet-name>
        <url-pattern>/SE</url-pattern>
        <!--    多个地址-->
    </servlet-mapping>  <servlet-mapping>
        <servlet-name>Servlet</servlet-name>
        <url-pattern>/servlet/SE</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>Filter01</filter-name>
        <filter-class>Filter01.Filter01</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Filter01</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

servlet

package Filter01;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

//@WebServlet(name = "Servlet1", value = "/Servlet2")
public class Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        response.setContentType("text/html;charset=utf-8");
//        response.setCharacterEncoding("utf-8");
        response.getWriter().write("陈叔淑钰");

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

过滤器

package Filter01;

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

//@WebFilter(filterName = "Filter",
//        urlPatterns = "/*"/*通配符(*)表示对所有的web资源进行拦截*/)
public class Filter01 implements Filter {
    @Override//初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化");
//        Filter.super.init(filterConfig);
    }

    @Override//filterChain链
//    1.过滤中的所有代码,在过滤特定请求的时候都会执行2.必须要让过滤器继续同行    filterChain.doFilter(servletRequest,servletResponse)
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletResponse.setContentType("text/html;charset=utf-8");
//        servletRequest.setCharacterEncoding("utf-8");
        System.out.println("Filter过滤器执行前");
        filterChain.doFilter(servletRequest,servletResponse);//
        System.out.println("Filter过滤器执行后");
    }

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

权限分离

用户登录之后才能进入主页!用户注销后就不能进入主页了!

1.用户登录之后,向Sesison中放入用户的数据
2.进入主页的时候要判断用户是否已经登录;

过滤器

ackage 过滤器;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@WebFilter(filterName = "Filterdl")
public class Filterdl implements Filter {
    public void init(FilterConfig config) throws ServletException {

    }

    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        chain.doFilter(request, response);
        HttpServletRequest request1=(HttpServletRequest)request;
        HttpServletResponse response1=(HttpServletResponse)response;
        Object use = request1.getSession().getAttribute("USE");
if (use==null){
    response1.sendRedirect("lo.jsp");
}

    }
}

servle

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

@WebServlet(name = "LoServlet", value = "/LoServlet")
public class LoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String password = request.getParameter("username");
      if (password.equals("abc")){
          request.getSession().setAttribute("USE",request.getSession().getId());

          response.sendRedirect("dl.jsp");
      }else {//登陆失败
          response.sendRedirect("yc.jsp");
      }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import javax.xml.transform.Result;
import java.io.IOException;

@WebServlet(name = "ZhuxServlet", value = "/ZhuxServlet")
public class ZhuxServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object use = request.getSession().getAttribute("USE");
        if (use!=null){
            request.getSession().removeAttribute("USE");
            response.sendRedirect("lo.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

jsp

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/5/9
  Time: 10:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/LoServlet">
    姓名:<input type="text" name="username" value=${s}>
    <input type="submit" value="登录">

</form>

</body>
</html>

监听器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>Servlet</servlet-name>
        <servlet-class>Filter01.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet</servlet-name>
        <url-pattern>/SE</url-pattern>
        <!--    多个地址-->
    </servlet-mapping>  <servlet-mapping>
    <servlet-name>Servlet</servlet-name>
    <url-pattern>/servlet/SE</url-pattern>
</servlet-mapping>
    <filter>
        <filter-name>Filter01</filter-name>
        <filter-class>Filter01.Filter01</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Filter01</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


<!--        注册监听器-->
    <listener>
        <listener-class>监听.Listener</listener-class>
    </listener>

</web-app>

JSP

<%--
  Created by IntelliJ IDEA.
  User: g15
  Date: 2022/5/4
  Time: 9:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>


<%=this.getServletConfig().getServletContext().getAttribute("rs")%>人在线
</body>
</html>

配置文件

<listener>
    <listener-class>监听.Listener</listener-class>
</listener>
 posted on 2022-11-23 18:22  03的工程师  阅读(24)  评论(0编辑  收藏  举报