jsp写web的一些基本操作


相关代码链接

验证登录

登录页面

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/23
  Time: 16:16
  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>
<center>
    <h3>登录系统</h3>
    <form action="loginHeader.jsp">
        <a>用户名:<input type="text" name="name" class="form-control"/></a><br>
        <a>密码:<input type="password" name="password" class="form-control"/></a><br>
        <a>校验码:<input type="text" name="code" size="6"/>
            <img src="imgmk.jsp" width="70px" height="26px"/>
        </a>
        <br>
        <input type="submit" value="登录"/>
        <input type="reset" value="重置"/>
    </form>
</center>
</body>
</html>

登录验证的实现

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/23
  Time: 16:18
  To change this template use File | Settings | File Templates.
--%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    //判断校验码
    String code=request.getParameter("code");
    //判断验证码是否一致
    String imgcode=(String)session.getAttribute("code");

    if (imgcode==null||!code.equals(imgcode)){
        out.print("校验码错误,2秒返回登录页面");
        response.setHeader("refresh","2;login.jsp");
        return;
    }

    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/test";
    String USER = "root";
    String PASS = "password";

    String name=request.getParameter("name");
    String password=request.getParameter("password");

    String sql="SELECT * FROM login WHERE name=? and password=?";
    try {
        // 数据库连接
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);

        PreparedStatement psmt = conn.prepareStatement(sql);
        psmt.setString(1,name);
        psmt.setString(2,password);

        ResultSet rs=psmt.executeQuery();

        if (rs.next()){
            //验证令牌
            session.setAttribute("passcard","ok3");
            //转到成功页面
            response.sendRedirect("3.jsp");

        }else {
            //转到失败页面
            response.sendRedirect("fail.jsp");
        }

    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
%>


登录失败页面

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/23
  Time: 16:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>fail</title>
</head>
<body>
<h3>登录失败,请重新<a href="login.jsp">登录</a>三秒后自动跳转</h3>
</body>
</html>
<%
    response.setHeader("refresh","3;login.jsp");
%>

图片验证码的实现

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/23
  Time: 17:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
//导入四个包
<%@ page import="javax.imageio.*,java.awt.*,java.awt.image.*,java.io.*" pageEncoding="GBK" %>
<%
    //浏览器缓存
    response.addHeader("expires","0");
    response.addHeader("cache-control","no-cache");
    response.addHeader("Pragram","no-cache");

    //清除服务器输出对象
    out.clear();
    pageContext.pushBody();
    //生成一张图片
    BufferedImage bimg=new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
    //画笔
    Graphics g=bimg.getGraphics();
    //设置颜色
    g.setColor(Color.black);
    g.fillRect(0,0,80,20);
    g.setColor(Color.yellow);

    String str=""+(1000+(int)(9000*Math.random()));
    session.setAttribute("code",str);
    g.drawString(str,20,15);
    //图片转化为二进制数组
    ByteArrayOutputStream bout=new ByteArrayOutputStream();
    ImageIO.write(bimg,"jpeg",bout);
    byte[] bb=bout.toByteArray();

    //获得二进制数据流
    OutputStream outx = response.getOutputStream();

    //设置浏览器接收数据类型与处置类型
    response.setContentType("image/jpeg");
    response.addHeader("content-disposition","inline;file=xx.jpg");

    //将数据发送出去
    outx.write(bb,0,bb.length);
    outx.close();

%>

根据jsp写的一个增删查改

主页面

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/23
  Time: 16:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!
    int totalpages = 0;      //总页数
    int pageSize = 20;       //每一页展示的数据行数
    int totalRecords = 0;    //总的数据条数
    int xpage = 1;           //当前页
%>
<%
    //验证
    String passcard=(String)session.getAttribute("passcard");

    if (passcard==null||!passcard.equals("ok3")){
        out.print("尚未登录,2秒返回登录页面");
        response.setHeader("refresh","2;login.jsp");
        return;
    }
    // 权限分级,分类
    if (passcard.equals("ok1")){

    }
%>
<%
    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/test";
    String USER = "root";
    String PASS = "password";

    try {
        // 数据库连接
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
        String sql = "SELECT count(*) FROM web_class";
        PreparedStatement psmt = conn.prepareStatement(sql);
        ResultSet rs = psmt.executeQuery();

        rs.next();
        totalRecords = rs.getInt(1);      //获取所有的数据条数
        String aa = request.getParameter("page");  //获取当前页
        if (aa == null || xpage < 1) {
            xpage = 1;
        } else {
            try {
                xpage = Integer.parseInt(aa);
            } catch (NumberFormatException e) {
                xpage = 1;
            }
        }

        if (totalRecords % pageSize == 0) {
            totalpages = totalRecords / pageSize;
        } else {
            totalpages = totalRecords / pageSize + 1;
        }
        totalpages = (totalRecords + pageSize - 1) / pageSize;

        //显示当前数据
        sql = "SELECT * FROM web_class";
        psmt = conn.prepareStatement(sql);
        rs = psmt.executeQuery();

        if (xpage >= totalpages) {
            for (int i = 1; i <= (totalpages - 1) * pageSize; i++) {
                rs.next();
            }
        } else {
            for (int i = 1; i <= (xpage - 1) * pageSize; i++) {
                rs.next();
            }
        }
%>
<html>
<head>
    <title>Trump成绩查询</title>
</head>
<body>

<center>
    <h3>学生成绩</h3>
    <hr width="80%">
    <a href="add.jsp">添加学生信息</a>
    <table border="1" width="80%" align="center">
        <tr align="center">
            <th style="width: 20%"><b>学号</b></th>
            <th style="width: 20%"><b>姓名</b></th>
            <th style="width: 20%"><b>科目</b></th>
            <th style="width: 20%"><b>成绩</b></th>
            <th style="width: 20%"><b>操作</b></th>
            <th style="width: 20%"><b>操作</b></th>
        </tr>
        <% //数据库调取数据
            for (int i = 1; i <= pageSize; i++) {
                if (!rs.next()) {
                    break;
                }
                int a = rs.getInt(1);
                String b = rs.getString(2);
                String c = rs.getString(3);
                int d = rs.getInt(4);
        %>
        <%--     数据展示    --%>
        <form action="update.jsp">
            <tr align="center">
                <td style="width: 20%"><input  name="id" value="<%=a%>" />
                </td>
                <td style="width: 20%"><input type="text" name="name" value="<%=b%>" />
                </td>
                <td style="width: 20%"><input type="text" name="course" value="<%=c%>" />
                </td>
                <td style="width: 20%"><input type="text" name="score" value="<%=d%>" />
                </td>
                <td style="width: 20%"><input type="button" value="删除" οnclick="del(<%=a%>)"></td>
                <td style="width: 20%"><input type="submit" value="更新" ></td>
            </tr>
        </form>
        <%
            }
        %>
    </table>
    <hr>
    <form name="myform" action="3.jsp">
        <a>共<%=totalpages%>页
            &nbsp&nbsp
            第<%=xpage%>页
            &nbsp&nbsp
            共<%=totalpages%>
            &nbsp&nbsp
            跳转到
        </a>
        <select οnchange="go(this.value)">
            <%
                for (int i = 1; i <= totalpages; i++) {
                    if (i == xpage) {
                        out.print("<option selected>" + i + "</option>");
                    } else {
                        out.print("<option>" + i + "</option>");
                    }
                }
            %>
        </select>
        <a>页</a>
        <input type="text" name="page" size=1">
        &nbsp&nbsp
        <input type="button" value="首  页" <%=(xpage == 1) ? "disabled" : ""%> οnclick="gn(<%=1%>)"/>
        &nbsp&nbsp
        <input type="button" value="上一页" <%=(xpage == 1) ? "disabled" : ""%> οnclick="gn(<%=xpage-1%>)"/>
        &nbsp&nbsp
        <input type="button" value="下一页" <%=(xpage == totalpages) ? "disabled" : ""%> οnclick="gn(<%=xpage+1%>)"/>
        &nbsp&nbsp
        <input type="button" value="尾  页" <%=(xpage == totalpages) ? "disabled" : ""%> οnclick="gn(<%=totalpages%>)"/>
    </form>
</center>
<%
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
%>
<script>
    function go(x) {
        window.location.href = "3.jsp?page=" + x;
    }

    function gn(x) {
        window.location.href = "3.jsp?page=" + x;
    }

    function del(x) {
        window.location.href = "del.jsp?id=" + x;
    }
</script>
</body>
</html>


删除

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/21
  Time: 13:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page pageEncoding="UTF-8" language="java" %>

<%
    // 获得id
    String id = request.getParameter("id");

    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/test";
    String USER = "root";
    String PASS = "password";

    try {
        // 数据库连接
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
        String sql = "DELETE FROM web_class where id=?";

        PreparedStatement psmt = conn.prepareStatement(sql);
        psmt.setInt(1,Integer.parseInt(id));

        psmt.executeUpdate();
        conn.close();

        response.sendRedirect("test_03.jsp");
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
%>

更新

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/21
  Time: 15:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
    //获得参数
    String id = request.getParameter("id");
    String name = request.getParameter("name");
    String course = request.getParameter("course");
    String score = request.getParameter("score");


    System.out.println("***********");
    System.out.println("course:"+course);

    //访问数据库
    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/test";
    String USER = "root";
    String PASS = "password";

    String sql = "UPDATE web_class SET name=?,course=?,score=? WHERE id=?";

    try {
        // 数据库连接
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
        PreparedStatement psmt = conn.prepareStatement(sql);

        psmt.setString(1,name);
        psmt.setString(2,course);
        psmt.setInt(3,Integer.parseInt(score));
        psmt.setInt(4,Integer.parseInt(id));

        psmt.executeUpdate();
        conn.close();
        response.sendRedirect("test_03.jsp");

    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
%>

增加

  • 增加页面

    <%--
      Created by IntelliJ IDEA.
      User: 11637
      Date: 2020/4/21
      Time: 13:37
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page import="java.sql.*" %>
    <%@ page import="java.util.*" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        String DB_URL = "jdbc:mysql://localhost:3306/test";
        String USER = "root";
        String PASS = "password";
    
        String sql = "SELECT max(id) FROM web_class ";
    
        try {
            // 数据库连接
            Class.forName(JDBC_DRIVER);
            Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
            PreparedStatement psmt = conn.prepareStatement(sql);
    
            ResultSet rs = psmt.executeQuery();
            rs.next();
            int id=rs.getInt(1)+1;
            conn.close();
    
    %>
    <html>
    <head>
        <title>添加信息</title>
    </head>
    <body>
    <center>
    <a>学生信息添加</a>
    <hr>
    <form action="addHeader.jsp">
        <a>学号:<input name="id" type="text" value="<%=id%>" /></a>
        <a>姓名:<input type="text" name="name" /></a>
        <a>科目:<select name="course" >
            <option>语文</option>
            <option>数学</option>
            <option>英语</option>
        </select></a>
        <a>成绩:<input type="text" name="score" /></a>
        <input type="submit" value="添加信息" />
    </form>
    </center>
    <%
        } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
        }
    %>
    </body>
    </html>
    
    

增加的实现

```jsp
<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/21
  Time: 14:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
    String id = request.getParameter("id");
    String name = request.getParameter("name");
    String course = request.getParameter("course");
    String score = request.getParameter("score");

    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/test";
    String USER = "root";
    String PASS = "password";

    try {
        // 数据库连接
        Class.forName(JDBC_DRIVER);
        Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
        String sql = "INSERT into web_class(id,name,course,score) VALUES (?,?,?,?)";
        PreparedStatement psmt = conn.prepareStatement(sql);

        psmt.setInt(1,Integer.parseInt(id));
        psmt.setString(2,name);
        psmt.setString(3,course);
        psmt.setInt(4,Integer.parseInt(score));

        int rs=psmt.executeUpdate();
        conn.close();

        response.sendRedirect("test_03.jsp");

    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
%>
```

文件处理

文件下载

下载页面

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/28
  Time: 9: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>
    <center>
<%--         链接下载--%>
        <a href="Download.jsp">download</a>
    </center>
</body>
</html>

文件下载的实现

<%--
  Created by IntelliJ IDEA.
  User: 11637
  Date: 2020/4/28
  Time: 8:52
  To change this template use File | Settings | File Templates.
--%>
<%@ page import="java.io.*"  %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    // 1、得到二进制流
    OutputStream outx=response.getOutputStream();

    // 2、设置头,告知浏览器需要下载
    response.setContentType("application/x-download");

    // 3、告诉浏览器接收文件是下载还是打开
    response.addHeader("Content-Disposition","attachment;filename=test.mp4");

    // 4、通过二进制流,将文件的数据发送到客户端
    FileInputStream fin=new FileInputStream("E:\\software\\apache-tomcat-9.0.33-windows-x64\\apache-tomcat-9.0.33\\webapps\\test\\test.mp4");
    byte[] bb=new byte[1024];
    int length=-1;
    length=fin.read(bb);

    while (length!=-1){
        outx.write(bb,0,length);
        length=fin.read(bb);
    }
//     5、关闭流对象
    outx.close();
%>

文件上传

上传页面

<form action="" method="post" enctype="mutipart- ">
	用户名:<input type ="text" name="name"/><br>
	地    址:<input type ="text" name="address"/><br>
	电	话:<input type ="text" name="phone"/><br>
	头	像:<input type ="text" name="picture"/><br>
	<input type="submit"   >
</form>

上传的实现


一些技术的笔记

邮件编程

邮件编程的步骤

1、准备一个Properties类;

准备邮件发送的两个参数,验证与地址

2、准备一个验证类

3、通过验证类创建一个验证对象

就是 邮箱的:用户名与密码

4、创建一个通道对象,将参数与验证对象传递进来;

5、通过通道对象创建一个邮件对象;

6、设置邮件的5个参数

发送者;

接收者;

主题;

时间;

内容;

7、通过发送器类直接发送该邮件对象
参考链接:菜鸟教程描述

1、邮件编程概述

不是太重要了;

java提供了一个类库,能够实现邮件编程;

邮件的发送 邮件的接收

SMTP 25 POP3 110

就是一个套设计出来的指令集合,

通过该套指令,我们用户可以实现与邮件服务器的

功能通信,这些功能都是围绕邮件来的。

2、邮件库介绍

activation.jar包

mail.jar包

这两个包都不是jdk或者tomcat的默认包,

如果你想让jdk支持邮件编程,需要引入这两个包;

如果你想让tomcat支持邮件编程,需要tomcat中引入这两个包;

3、涉及到的相关类

  邮件通道类;    Session类          

  邮件验证类;        Authenitication类


  邮件类;                  Message类


  邮件发送器类;        Transport类

四个主类

邮件中添加附件相关的几个文件处理类

通过上述类可以实现各种类型的邮件发送编程;

邮件接收编程还有相关的类,本课不做介绍。

4、邮件编程的步骤

1、准备一个Properties类;

准备邮件发送的两个参数,验证与地址

2、准备一个验证类

3、通过验证类创建一个验证对象

就是 邮箱的:用户名与密码

4、创建一个通道对象,将参数与验证对象传递进来;

5、通过通道对象创建一个邮件对象;

6、设置邮件的5个参数

发送者;

接收者;

主题;

时间;

内容;

7、通过发送器类直接发送该邮件对象

5、邮件编程的案例1

普通邮件发送 发送成功;

案例2:如何发送带附件的功能

普通邮件用setText来设置邮件的内容;

带附件的邮件用setConent()来设置邮件的内容;

带附件的邮件发送成功;

如何变成网页发送邮件:

我们就是把网页中获得的数据

变成 msg的五个参数,

然后还使用 刚才发送程序,实现用户通过网页发送邮件。

自己搭建一个邮件服务器,很简单,只需要找一个服务器软件,很小,在自己的电脑上搭建一个

邮件服务器,自己连接自己,实现发送;

fzxy_wlgc_test@163.com fzxy123456

在jsp中使用自定义类

如何在JSP中 使用自定义类

1、回顾

2、自定义类

1、如何在tomcat中使用第三方类

tomcat\lib    就是第三方jar的存放目录

这个目录是一个全局目录,如果我们把jar放置到这个位置,这个tomcat 服务器上的任何项目可以用;

webapp下的每一个文件件 都代表一个 web app 一个独立的web 应用;

webapp下的每一个文件夹都代表一个 web 项目;

所以,以后说一个web项目,和一个 web 应用是一回事;

web 应用技术 开发 web 项目开发

一般情况下,我们不会跨项目 共享 jar的;jar一般都是随项目走的;

如何让第三方包,跟项目走

该项目下的web-inf\lib下,放置第三方包,则该包的工作范围就是该项目;

2、自己想封装一个类自己用,怎么办?

第一步:在自己的wen-inf\classes下编译自己的java代码;

第二步:编译该代码 javac -d . ****.java ====> 为什么-d . 这个不解释;

它能够自动帮助我们创建存放类需要的文件夹;

第三步: 在jsp中使用自己的类

在jsp中使用自己的类 和第三方类 没有区别;

该import 该 new 对象使用就new 对象使用;

需要注意的是,如果你的类需要被使用,千万千万要 public

3、封装的好处是什么?感觉更麻烦了

不解释;代码重复使用 代码重复使用 代码重复使用

程序,结构性强 可读;

代码重复使用 结构清晰 可读性强 》是所有软件重构 代码重构的 目标;==》让软件的质量高;

3、JavaBean

本来啊,自己定义自己的类自己用,好好的,javaBean就是 web服务器特殊支持的 自定义类;

因为获得了web服务器的特殊支持,能够更加方便的 jsp编程;

javabean作为特殊的自定义类,有如下特殊的地方;

1、类必须有包;
2、类必须有无参构造函数;
3、类必须public
4、类中的属性 最好都带set/get 方法

数据的自动装配,就是 这个最最最最重要的特殊的支持;

2.jsp 和 3.jsp对比案例 深刻的说明, 数据自动装配能够让服务器的初始化 减少90%的工作量;

本质上,所谓的数据自动装配,就是 javabean 能够将我们的数据 自动初始化,甚至在初始化过程中,自动完成数据类型的匹配;

就是将用户提交的数据变量和需要自动装配的对象 一对一的赋值;

千万注意:

为什么没有值?谁知道,奖励2分,期末成绩? 谁回答?

如果想要实现自动装配,

用户端提交的变量的名字 和 服务器端 对象的属性的名字 必须一样

不一样的不能够 自动装配;

4、关于javaBean的5个指令

指令1:<jsp:useBean id=“a**” scope=“b**” class=“c**” /> 就是 创建一个对象; c** a** = new c**();

指令2:<jsp:setProperty name=“d**” property=“e**” /> //就是自动装配;

指令3:<jsp:setProperty name=“d**” property=“e**” value="***" />//手动初始化 aa.name = 33;

    d**.e**  =  ***;  

指令4:<jsp:setProperty name=“aa” property=“name” />//单一初始化

aa.name = request.getParameter(name);

指令5:<jsp:setProperty name=“aa” property=“name” param=“age” />

aa.name = request.getParameter(“age”);

5、总结

javabean 就是特殊的自定义类,特殊的地方见1234;

javabean的最大好处是 能够将数据自动装配;

涉及到数据装配的指令有5个,如上。

sevlet概述(jsp编译源码)

1、Servlet概述

Servlet是真正的服务器程序;

JSP难道是假程序吗?

JSP程序不是服务器最终执行的实体,JSP被调用,实际上会让服务器将jsp程序

编译成Java源代码====》java的可执行程序 ===》执行

用户调用jsp====>tomcat引擎编译jsp====>.java====>java编译器====>.class====>tomcat的执行器执行该

*.class程序。

JSP的执行效率高 还是 Servlet 的执行效率高?

jsp 选1

servlet 选2

jsp好的好处是 编写方便

servlet的好处是运行效率高;

你就明白? 很多情况下,我们需要手动编写servlet ,为了效率;===》程序的目标是功能 ===》功能使用者是用户

所以,编程的最终目标是用户 不是程序员;

经常是因为 我们需要 用户一点点 体验上的改变 性能上的提升 我们需要 翻越10万大山…

这个世界不是先有jsp,先有的是Servlet,编写servlet确实很不爽的情况下,有人定义了一个jsp技术,让程序员的更加有效率;

看项目。 有些项目是 以 用户为中心;

3、Servlet编写步骤

1、找到位置 自己项目的web-inf\classes下

2、继承HttpServlet类

3、重写service方法

4、在service中编写自己的功能;

5、编译 想在jdk中成功编译servlet,需要jdk中引入servlet的jar才可以; tomcat中有servlet的jar,导入到jdk中即可。

6、部署
servlet需要配置才可以调用;

在该项目对应的web-inf\web.xml中配置该sevlet;

7、测试

调用成功;

演示:

4、如何理解 Servlet 与 JavaBean

JavaBean 是一个第三方类,不是一个独立的程序?

class Student{

。。。。

。。。。

}

是独立的程序吗?

1 是

2 不是

JavaBean 必须别JSP、Servlet或者是其它的代码调用,它不面对客户调用;

一段代码是不是独立的程序?判断的标准就是你是对内,还是对外;

对外的代码,可以被用户直接触发的从才是独立程序;

Servlet是独立的程序,可以直接面对用户触发;

5、Servlet在开发中的位置

我们经常发那些需要高效执行的代码直接编写为Servlet,提高软件的效率;

6、Servlet生命周期

JDK中,我们一个独立的程序,它的执行的入口是main()方法;

在Servelt中,它执行的入口是什么?

Servlet程序与JDK中的程序相比,执行过程稍微不一样;

它有5个方法,分别参与了整个程序的执行过程;

init();

service();

doget();

dopost();

destroy();

Servlet第一次被调用,则执行顺序为init()=>service()=>doget()||doPost()

Servlet非第一调用,则执行顺序为service()===>doget()||doPost()

web-app 被shutdown的时候,该web-app中的servlet被统一的调用destroy()方法;

有什么用?

用处大了?

我们可以考虑,在不同的周期的,安排不通的功能,实现 一个软件功能更加合理的安排;

7、Servlet和JSP的关系

Servlet和JSP之间是替代关系,是效率关系 是方便关系;

7、一个案例来证明servlet的生命周期

4、Servlet 部署执行

5、Serlet调用执行

6、Servlet自动加载、

Servlet的多重映射

7、Servlet默认映射 没有匹配到的请求都来匹配这个Servlet

Servlet的部署技巧

8、Servlet的部署技巧

学习Servlet的部署配置

aa //对象的名字,也是自己命名的; Servlet2 //Servlet对应的类 aa //对象的名字,也是自己命名的; /s2 //表示用户访问设计的地址标签

部署自动加载模式

aa //对象的名字,也是自己命名的;
Servlet2 //Servlet对应的类
1 //表示该Servlet可以自动触发

有很多程序,是服务器的内部功能程序,不面向用户使用:例如:监控程序,后台定时器,任务管理程序…

这些程序,可以考虑在tomcat自动的时候自动调用,就可以用Servlet配置为自动记载模式;

多映射部署 ——好处就是让用户不知道服务器的执行架构(软件更安全),不要将真实的命名与调用逻辑暴露给用户;

aa //对象的名字,也是自己命名的; /s2 //表示用户访问设计的地址标签 aa //对象的名字,也是自己命名的; /s3 //表示用户访问设计的地址标签

默认映射—》 与一个网站有默认的首页一样,如果用户的访问路径不一样,应该导到统一的一个处理页面,增加用户体验

aa /

通配符映射 ====>用通配符将一类请求,映射到一个Servlet上.

aa /* //所有的请求的到aa上; aa /abc/* //所有/abc/开头的请求都映射到aa上

9、两类特殊的Servlet之一_Filter过滤器

互联网上有很多的流量 不是人生成。。

2010左右 50%的流量不是人生成的。机器的访问请求超过人的访问请求;

爬虫。。。。。。。百度的数据怎么来的?爬虫爬来的。mapping数据库中

爬虫用来获取数据

引擎为了搜索数据

防灾科技学院=服务器====》800用户并发 2000个爬虫

原理特别简单: request.getHead(“user-agent”); 通过这个数据,就能够获得用户的客户请求信息

                  根据用户请求信息的数据,来判断请求的是用户  ,还是爬虫,如果是用户,继续请求,

    如果是爬虫,拒绝访问。

user-agent代表 客户端的信息;

不通的浏览器,得到的关于用户的信息不一样

如果我们自己开发一个爬虫,看看能得到什么信息

Java/1.7.0_15
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

chain.doFilter(request,response);//将用户的请求传递的请求的位置;

我们的服务器的过滤器,用来过滤所有的用户请求,如果是浏览访问,则正常通过,

如果是非浏览,则过滤该请求,不让通过。

通过这个模式,可以让我们的网站,抵御爬虫;

为什么?网站可以抵御爬虫,也可以不抵御爬虫,甚至可以设置一个管理器,

让爬虫在特定的时间内,访问我们的网站; 例如:从夜间10点 到第二天早晨6点;

我们的网站,也盼望爬虫访问。

    <filter>
            <filter-name>aa</filter-name>
            <filter-class>cn.edu.cidp.wlwgc.Filter1</filter-class>
    </filter>

    <filter-mapping>
            <filter-name>aa</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>

package cn.edu.cidp.wlwgc;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
加载更多

监听器

1、监听器

tomcat 提供了四个状态允许Servlet来监听

ServletContext 这个是服务器的状态

ServletContextAtrribute 服务器状态的属性的

SessionListener 来访用户

SesssionAtrribute 来访用户的属性

实际使用中,绝多数都是监听Session来监听服务器的实时在线用户数

服务器端的session代表的是一个到访用户,来一个客户端,服务器为它创建一个session;

所以,如果可以直接到服务器有多少个session.就可以知道,当前在线有多少个用户。

如果一个用户离开了服务器,则服务器销毁该用户对应的session。 ??

一个需要特别注意的问题:什么叫做离开的了服务器?

部署

案例

部署完成

启动服务器 则该监听器 就已经在运行了;

普通的Servlet需要被触发;---------------》明确的请求触发

过滤器也需要被用户请求触发;---------------》任意的用户请求,都会触发过滤器

监听器 ===========》服务器启动,监听器就自动运行,不是用户触发的,是服务器启动自带的;

1是登录状态

2 非登录状态 2

360浏览器 访问服务器的时候,服务器作为一个用户来管理 所以,无论多少个360浏览器,服务器只

为该浏览器创建一个session。

ie浏览器访问服务器的时候,服务器作为一个用户在管理,所以,无论多少个ie浏览器,服务器只

为该浏览器创建一个session。

上面的这个说法,不取决于 客户如何?取决于服务如何。

所以:作为程序员,要注意,服务器是可以调整设置,如何创建session策略的。

关闭浏览器,服务器的session是否销毁,销毁后应该 count应该减少才对.

服务器用户数减少没有?

1 减少

2 没减少

我们用浏览器访问了淘宝,登录成功;关闭浏览器,再打开,发现还是登录状态,说明

服务器把我看做老用户,意味着服务器不会创建新的session。

刚才的案例:我们自己关闭自己的浏览器,来重新访问tomcat服务器的时候,新的浏览被tomcat

当做新用户,所以才count++;

来访问淘宝的时候,淘宝当做老用户,所以,保持登录状态;

这就说明,我们的tomcat关于session的管理策略,与taobao的session管理策略不通。

重新打开浏览器后,访问邮箱,需要重新的登录吗?

1、需要

2、不需要

请选择

为什么,还是深刻的说明,不通的服务器的关于session的管理策略是不一样的,客户端无从知道。

既然新打开当做新用户,为什么老用户没有销毁,从而count–呢?

这个是服务器的默认销毁策略,tomcat默认的销毁策略是30分钟;我估计taobao也是30分钟

不动,明天来,还是在登录状态吗?

1、登录
2、不登录

请选择

通过上面几个案例,你会深刻的理解 服务器的session,

服务器的session就是 服务器为每一个用户保持的一个对象,session的状态消失与否,

就是服务器对于客户登录或者新客户的分界线。

一般默认都是30分钟。

可以不可以自动销毁呢;

可以。

session.invalidate();//该方法,就是主动触发,服务器销毁该session.

所以,所以系统的退出起就是都是触发 该代码。

session invalidate 表示session失效,session失效 未必很快就是session销毁,所以有延迟。

上面的案例就是一个同样的案例;

你可以引用一下,开发中直接使用;

2、MVC开发模式

语法讲述的不够完整,但是,这个课程的核心技术,都传授给你了

语法不是重点

技术是重点

JSP的技术体系

登录
校验码
增产查改
访问数据库
分页显示

邮件编程

html界面

注册界面

上传与下载

javabean

servlet

上述技术?那个最重要,必须掌握,代表编程入门了?

数据库的增删查改

成绩的增删查改

id name class score 实现增删查改

业务核心

3、四个内置对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值