1. jsp

servle逻辑处理方便 html页面表现麻烦

jsp 页面表现方便 但是逻辑处理麻烦

JSP

是一种页面技术 JSP本质上是servlet类 通过JSP引擎翻译成servlet

jsp 约等于 java+html

注意:jsp不是访问静态的html文件

index.jsp修改成如下代码:

<%--
Created by IntelliJ IDEA.
User: chenw
Date: 2023/10/19
Time: 22:27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,java.lang.*" pageEncoding="utf-8" %> <html>
<head>
<title>$Title$</title>
</head>
<body> <%
int i = new Random().nextInt(10);
if(i>5){
%>
<b>今天天气很好 !</b>
<%}else{
%>
<b>今天天气不好~~</b>
<%}%>
</body>
</html>

2. 过滤器



作用:

分析请求 对请求的数据进行预处理

阻止请求的进行

web资源的协作

修改请求他的内容

servlet1

response.getWriter().write("学习 filter1");

servlet2

response.getWriter().write("学习 filter2");

启服务 访问

http://localhost:8080/learningfilter/serv1

http://localhost:8080/learningfilter/serv2

都会有乱码

如何用filter解决

new filter

web.xml增加如下配置

    <filter>
<filter-name>SetEncodingFilter</filter-name>
<filter-class>com.msb.filter.SetEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

所有的请求都需要经过 SetEncodingFilter处理

public class SetEncodingFilter implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
chain.doFilter(req, resp);
} public void init(FilterConfig config) throws ServletException { } }

没有中文乱码了

用过滤启 来做一个登录拦截 条件是session里面含有user

LoginFilter

package com.msb.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException; /**
* @Auther: jack.chen
* @Date: 2023/10/21 - 10 - 21 - 10:36
* @Description: ${PACKAGE_NAME}
* @version: 1.0
*/
public class LoginFilter implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpSession session = ((HttpServletRequest)req).getSession(); if(session.getAttribute("user") == null){
((HttpServletResponse)resp).sendRedirect("login.jsp"); }else{
chain.doFilter(req, resp);
}
} public void init(FilterConfig config) throws ServletException { } }

web.xml配置

<?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">
<filter>
<filter-name>SetEncodingFilter</filter-name>
<filter-class>com.msb.filter.SetEncodingFilter</filter-class>
</filter>
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.msb.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>LearningServlet1</servlet-name>
<servlet-class>com.msb.servlet.LearningServlet1</servlet-class>
</servlet>
<servlet>
<servlet-name>LearningServlet2</servlet-name>
<servlet-class>com.msb.servlet.LearningServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LearningServlet1</servlet-name>
<url-pattern>/serv1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LearningServlet2</servlet-name>
<url-pattern>/serv2.do</url-pattern>
</servlet-mapping>
</web-app>

登录 http://localhost:8080/learningfilter/serv2.do 则调到 login.jsp

再次登录

http://localhost:8080/learningfilter/serv2.do

响应正常

3. listener 监听器

监听器的作用:

监听一些共享对象属性值的变化 或者事件的发生前后 做出响应的响应 类似 触发器

这些共享对象有:

ServletContext 对象 全局唯一的tomcat启动时创建 停止时销毁

HttpSession对象

ServletRequest 对象

servlet

package com.msb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException; /**
* @Auther: jack.chen
* @Date: 2023/10/21 - 10 - 21 - 11:40
* @Description: ${PACKAGE_NAME}
* @version: 1.0
*/
public class ListenerServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8"); // request对象设置属性
request.setAttribute("learning", "listener"); //servletContext对象添加属性
ServletContext context = this.getServletContext();
context.setAttribute("servlet_key", "servlet_value"); // 设置session
HttpSession session = request.getSession();
session.setAttribute("sess_key", "sess_value"); response.getWriter().write("Learning Listener !"); }
}

listener

package com.msb.listener; /**
* @Auther: jack.chen
* @Date: 2023/10/21 - 10 - 21 - 11:45
* @Description: ${PACKAGE_NAME}
* @version: 1.0
*/ import javax.servlet.*;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent; public class MyListener1 implements ServletRequestListener, ServletRequestAttributeListener,
ServletContextListener, ServletContextAttributeListener,
HttpSessionListener, HttpSessionAttributeListener { @Override
public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
// request对象 属性增加 // 将设置的属性打印
System.out.println(servletRequestAttributeEvent.getName());
System.out.println(servletRequestAttributeEvent.getValue());
} @Override
public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
// request对象 属性移除
} @Override
public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
// request对象 属性重新设置
// 将设置的属性打印
System.out.println(servletRequestAttributeEvent.getName());
System.out.println(servletRequestAttributeEvent.getValue());
} @Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
// request对象 创建 } @Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
// request对象 销毁
} @Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
// servletContext 对象添加属性
} @Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
// servletContext 对象移除属性
} @Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
// servletContext 对象 替换属性
} @Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
// servletContext 对象创建 tomcat启动时创建一次 全局共享
} @Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
// servletContext 停止时销毁
} @Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
// session 对象 添加属性
} @Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
// session 对象 移除属性
} @Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
// session 对象 修改属性 } @Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
// session 对象被创建
} @Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
// session 对象销毁
}
}

web.xml

<?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">
<listener>
<listener-class>com.msb.listener.MyListener1</listener-class>
</listener>
<servlet>
<servlet-name>ListenerServlet</servlet-name>
<servlet-class>com.msb.servlet.ListenerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ListenerServlet</servlet-name>
<url-pattern>/serv1</url-pattern>
</servlet-mapping>
</web-app>

用listener实现在线人数的统计

不同的浏览器分别访问



page.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
当前在线人数:${applicationScope.count}
</body>
</html>

listener

package com.msb.listener; /**
* @Auther: jack.chen
* @Date: 2023/10/21 - 10 - 21 - 12:07
* @Description: ${PACKAGE_NAME}
* @version: 1.0
*/ import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent; public class CountListener implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener { // Public constructor is required by servlet spec
public CountListener() {
} // -------------------------------------------------------
// ServletContextListener implementation
// -------------------------------------------------------
public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is
initialized(when the Web application is deployed).
You can initialize servlet context related data here.
*/
ServletContext servletContext = sce.getServletContext();
// 设置初始值
servletContext.setAttribute("count", 0);
} public void contextDestroyed(ServletContextEvent sce) {
/* This method is invoked when the Servlet Context
(the Web application) is undeployed or
Application Server shuts down.
*/
} // -------------------------------------------------------
// HttpSessionListener implementation
// -------------------------------------------------------
public void sessionCreated(HttpSessionEvent se) {
/* Session is created. */
ServletContext servletContext = se.getSession().getServletContext();
// 获取servletContext对象count属性
int count = (int)servletContext.getAttribute("count");
// +1之后设置回去
servletContext.setAttribute("count", ++count);
} public void sessionDestroyed(HttpSessionEvent se) {
/* Session is destroyed. */
ServletContext servletContext = se.getSession().getServletContext();
// 获取servletContext对象count属性
int count = (int)servletContext.getAttribute("count");
// -1之后设置回去
servletContext.setAttribute("count", --count);
} // -------------------------------------------------------
// HttpSessionAttributeListener implementation
// ------------------------------------------------------- public void attributeAdded(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute
is added to a session.
*/
} public void attributeRemoved(HttpSessionBindingEvent sbe) {
/* This method is called when an attribute
is removed from a session.
*/
} public void attributeReplaced(HttpSessionBindingEvent sbe) {
/* This method is invoked when an attibute
is replaced in a session.
*/
}
}

java项目实践-jsp-filter-监听器-day19的更多相关文章

  1. 一次从0到1的java项目实践清单

    虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...

  2. 一份从0到1的java项目实践清单

    虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...

  3. Java项目在jsp页面中引入jquery框架的步骤

    环境:在Java  web项目中引入juqery框架 工具:MyEclipse8.5 [步骤如下] A:新建一个Java web项目TestJquery,在WebRoot目录下创建一个jquery文件 ...

  4. 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)

    一年前,从不知道Ajax是什么,伴随着不断的积累,到如今常常使用,逐渐有了深入的认识. 今天,假设想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在具体讨论Aj ...

  5. SuperDiamond在JAVA项目中的三种应用方法实践总结

    SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...

  6. java 项目 导入成功后jsp页面报错处理方法

    本人新导入一个maven项目可是jsp页面一直报错,我先按照网上的经验操作如下步骤: 在pom.xml配置文件中添加上javax.servlet的相关依赖: <dependency>  & ...

  7. Java项目案例之---登录和修改(JSP)

    登录和修改(JSP) 通过案例学习jsp的常用知识点: 1.创建一个Map集合,用于存放学生信息,将学生信息存入Map中 2.通过page将需要的包导入 3.用request.getParameter ...

  8. Java项目经验

    Java项目经验 转自CSDN. Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:1.掌握项目开发的基本步骤2.具备极强的面向对象的 ...

  9. 【项目实践】手把手带你搞定SSM

    以项目驱动学习,以实践检验真知 前言 现在使用Java后端开发使用的技术栈基本上比较统一:Spring + SpringMVC + Mybatis,即大家常说的SSM.虽然现在流行的做法是使用Spri ...

  10. Java项目打包方式分析

    [TOC] 概述 在项目实践过程中,有个需求需要做一个引擎能执行指定jar包的指定main方法. 起初我们以一个简单的spring-boot项目进行测试,使用spring-boot-maven-plu ...

随机推荐

  1. NoSQL数据库与关系数据库的比较

    1.在原理方面 2.在数据规模方面 3.在数据库模式方面 4.查询效率方面: 5.在事务一致性方面: 6.在数据完整性方面: 7.在可扩展性方面: 8.在可用性方面 9.在标准化方面: 10.在技术支 ...

  2. 【.NET】控制台应用程序的各种交互玩法

    老周是一个不喜欢做界面的码农,所以很多时候能用控制台交互就用控制台交互,既方便又占资源少.有大伙伴可能会说,控制台全靠打字,不好交互.那不一定的,像一些选项类的交互,可以用键盘按键(如方向键),可比用 ...

  3. 探索 ECMAScript 2023 中的新数组方法

    前言 ECMAScript 2023 引入了一些新功能,以改进语言并使其更加强大和无缝.这个新版本带来了令人兴奋的功能和新的 JavaScript 数组方法,使使用 JavaScript 编程更加愉快 ...

  4. 探究vue的diff算法

    1.diff算法是什么? diff算法是一种通过**同层的树节点**进行比较的高效算法 Diff 算法探讨的就是虚拟 DOM 树发生变化后,生成 DOM 树更新补丁的方式.对比新旧两株虚拟 DOM 树 ...

  5. 华企盾DSC苹果电脑右键菜单不显示问题

    1.检查认证的用户是否给了对应的权限(如:手动加密.手动解密.申请解密) 2.系统偏好设置--键盘--快捷键中开通的权限是否有勾选 3.系统服务中允许的菜单数超出了最大值

  6. 技本功|Hive优化之Spark执行引擎参数调优(二)

    Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主要有数据 ...

  7. 5.elasticsearch中查询条件

    目录 一.URI查询 指定字段.泛查询 分组和phrase Bool条件 must条件 范围查询 通配符查询 正则表达式 模糊匹配与近似查询 二.RequestBody&DSL ignore_ ...

  8. 2023-05-19:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。 沿途有加油站,每个 station[i] 代表一个加油站, 它位于出发位置东面 station[i][

    2023-05-19:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处. 沿途有加油站,每个 station[i] 代表一个加油站, 它位于出发位置东面 station[i][ ...

  9. Spark Core快速入门

    Spark-core快速入门 一.简介 Apache spark是专门为大规模数据处理而设计的快速通用的计算模型,是一种类似于Mapreduce通用并行计算框架,与mapreduce不同的是,spar ...

  10. 华为云弹性云服务器ECS搭建FTP服务实践

    摘要:在使用华为弹性云服务器ECS搭建FTP服务的时候,经常会遇到搭建完成后无法访问的问题.本篇通过演示windows IIS搭建FTP方法,讲解ftp主动模式.被动模式原理来说明无法访问的原因及解决 ...