其他分享
首页 > 其他分享> > 11 JSP详解 Filter过滤器监听器 Junit

11 JSP详解 Filter过滤器监听器 Junit

作者:互联网

11 JSP详解 Filter过滤器监听器 Junit

JSP

什么是JSP

Java Server Page:Java服务器端页面,也和Servlet一样,用于动态Web技术 。

Servlet就是用wirte()那个函数来写页面。

最大特点:

JSP原理

JSP中怎们执行?

浏览器向服务器发送请求,不管访问什么资源,其实都在访问Servlet

JSP最终也会被转换成一个Java类 ,JSP中本质上就是Servlet

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ympdErb-1618656321156)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210411212340418.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ckJmVeB1-1618656321158)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210411212651467.png)]

JSP基础语法

  1. 创建一个空项目

  2. 右键项目–>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eDoOgwj1-1618656321160)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210412091635997.png)]

  3. 选择web项目

  4. 配置xml

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

注意!!

第一次运行,如果JSP修改过了,就可以直接选择第二个[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1Su6dPX-1618656321162)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210412093510426.png)],

这里是热部署:不重启服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CzasA7Xz-1618656321163)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210412093305743.png)]

JSP是访问时服务器才编译,所以这里你只需要选择第二个就行了。

<% %>
<%=%> 和 ${} EL表达式 等价  都可以直接取java的代码值,但是前面的那个会打印出不存在的值null,后面的则会不打印
<%! %>
<%! 定义全局的方法 
    private int globalvar=0;
    public void ybl(){
      System.out.println("进入了方法ybl");
    }
%>

<%@ page import="java.util.Date" %>
<%--定制错误页面--%>
<%@ page errorPage="error/500.jsp" %>

<%--注释--%>
定义出错的指向 web.xml
<error-page>
    <error-code>500</error-code>
    <location>/error/500.jsp</location>
</error-page>

JSP指令

<%@ page args %>

<%@ include file=" "%> 导入一些共有相同文件,不一定要在头部,可以嵌入在你需要的地方 ,会将两个页面和二为一,两个页面变量相同会报错

<jsp:include page=""/> JSP标签 上面的include一样功能 拼接页面,但是不是和二唯一,两个页面的变量相同也没事

9大内置对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nXZtOATj-1618656321165)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210413135800914.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lZz8Y6iF-1618656321166)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210413140132150.png)]

JSP 标签、JSTL标签、EL标签

EL:express language ${}

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>

JSP标签

<%--  转发参数--%>
  <jsp:forward page="error/500.jsp">
    <jsp:param name="name" value="ybl"/>
    <jsp:param name="age" value="12"/>
  </jsp:forward>
<%--  取出参数--%>
<%=request.getParameter("name")%>

JSTL标签库的使用是为了弥补HTML标签的不足,他自定义了许多了标签,可以供我们使用,标签的功能和Java代码一样

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmWh1Qiw-1618656321167)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210413185734867.png)]

JSTL标签库使用步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TifOGxm-1618656321168)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210413190805901.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ApWQ572J-1618656321169)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210413191455979.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ze1K4ip0-1618656321169)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210413191516780.png)]

JavaBean

实体类

JavaBean有特点的写法:

一般用来做数据库的字段做 映射

ORM: Object relationship Mapping 对象关系映射

MVC三层架构

Model view Controller 模型 视图 控制器

Controller:Servlet 接收用户的请求,相应给客户端内容,重定向或者转发

View:视图层 展示数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kribTO2Z-1618656321170)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210413201812745.png)]

Model:

View

Controller(Servlet)

登录--接收用户的登录请求--处理用户的请求(获取用户的登陆参数username password)---交给业务层处理登录业务(判断用户名密码是否正确:事务)--->Dao层查询用户名和密码是否正确----数据库

Filter过滤器

Filter :过滤器,用来过滤网站的数据;

Filter 操作步骤:

监听器

实现一个监听器接口

package com.ybl.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

//统计网站在线人数:统计session
public class onlineListener implements HttpSessionListener {
    //创建session监听:看你的一举一动
    //一旦创建session就会触发一次这个事件!
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        System.out.println(httpSessionEvent.getSession().getId());
        Integer onlinecount =(Integer) servletContext.getAttribute("onlinecount");
        if(onlinecount==null){
            onlinecount=new Integer(1);
        }else {
            int count=onlinecount.intValue();
            onlinecount=new Integer(count +1);
        }
        servletContext.setAttribute("onlinecount",onlinecount);
    }
    //销毁session
    //一旦销毁就会触发这个时间
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlinecount =(Integer) servletContext.getAttribute("onlinecount");
        if(onlinecount==null){
            onlinecount=new Integer(0);
        }else {
            int count=onlinecount.intValue();
            onlinecount=new Integer(count -1);
        }
        servletContext.setAttribute("onlinecount",onlinecount);

    }
    /*
    1.手动销毁
    2.xml配饰session
     */
}

注册web.xml的监听器

<!--    注册监听器-->
<listener>
    <listener-class>com.ybl.listener.onlineListener</listener-class>
</listener>

3.看情况是否使用其他监听器

过滤器、监听器常见应用

用户登录之后才能进入主页,用户注销之后不能进入主页。

  1. 主页登录后,向Session中放入用户的数据
  2. 进入主页的时候要判断用户是否已经登录;要求:在过滤器中实现
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request =(HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    if (request.getSession().getAttribute("username")==null){
        response.sendRedirect("/error.jsp");
    }
    filterChain.doFilter(request,response);
}

<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.ybl.filter.SysFilter</filter-class>
</filter>
    <filter-mapping>
        <filter-name>filter</filter-name>
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>

JDBC

JDBC:java连接数据库!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZpcyvOdT-1618656321172)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210416104556542.png)]

需要Jar包的支持:

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //配置  这里jdbc是schema的名字
        String url="jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false";
        String username="root";
        String password="109456";

        //1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.连接数据库
        Connection connection= DriverManager.getConnection(url,username,password);
        //3.向数据库发送SQL对象 Statement
        Statement statement = connection.createStatement();

        //4.编写SQL
        String sql="select * from users";
        //5.查询sql  返回结果集
        ResultSet resultSet = statement.executeQuery(sql);
 		//5.1  int i=statement.executeUpdate(sql);  修改都用这个函数  i表达返回的行数
        while (resultSet.next()){
            System.out.println("id="+resultSet.getObject("id"));
            System.out.println("name="+resultSet.getObject("name"));
            System.out.println("password="+resultSet.getObject("password"));
        }
        //6.关闭连接释放资源 一定要做 先开的 后关
        resultSet.close();
        statement.close();
        connection.close();
    }

JDBC事务:

要么都成功,要么都失败

ACID原则 :原子性 一致性 隔离性 持久性 保证数据的安全。

开启事务;
事务提交;commit()
事务回滚:rollback()
关闭事务;       

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPVowvlF-1618656321173)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210416144025035.png)]

Junit test

就是导入Jar包之后可以直接运行函数,不需要 main函数

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HIX0q8lV-1618656321174)(D:\ADeskTop\大三下学期\JAVA\Java Web\04 JSP.assets\image-20210416142228718.png)]

使用注解 @Test 来调用。

标签:11,标签,public,Filter,JSP,监听器,servlet,onlinecount
来源: https://blog.csdn.net/BlackNamePlate/article/details/115799661