java listen_JavaWeb之Filter、Listener

昨天和大家介紹了一下JSON的用法,其實JSON中主要是用來和數據庫交互數據的。今天給大家講解的是Filter和Listener的用法。

一、Listenner監聽器

1.1、定義

Javaweb中的監聽器是用于監聽web常見對象HttpServletRequest,HttpSession,ServletContext。

1.2、監聽器的作用

監聽web對象創建與銷毀.

監聽web對象的屬性變化

監聽session綁定javaBean操作.

1.3、監聽機制中的概念

事件----一件事情

事件源---產生這件事情的源頭

注冊監聽---將監聽器與事件綁定,當事件產生時,監聽器可以知道,并進行處理。

監聽器---對某件事情進行處理監聽的一個對象

二、JavaWeb中常見的監聽器

2.1、創建一個監聽器的步驟

創建一個類,實現需要監聽器的接口

重寫接口中的方法

在web.xml中配置注冊該監聽器

2.2、監聽域對象的創建與銷毀

監聽ServletContext創建與銷毀 ServletContextListener

監聽HttpSession創建與銷毀 HttpSessionListener

監聽HttpServletRequest創建與銷毀 ServletRequestListener

下面為大家展示的實例,首先我們的實例在jsp中進行的話,我們要明確這三個域對象什么時候被jsp創建什么時候又被銷毀呢。

在ServletContext中是服務器開啟的時候就被創建,當服務器關閉的時候就被銷毀

在session中,jsp里的page指令中可以配置默認是ture的,所以當你加載這個jsp頁面的時候session就被創建了,而銷毀的話就有

四種方法:默認超時30分鐘、關閉服務器、invalidate()方法、setMaxInactiveInterval(int interval) 可以設置超時時間,在servlet中

需要通過request.getSseeion()來創建session。

在request中,發送請求服務器就會創建它,當響應產生時,request對象就會銷毀。在jsp頁面的話,你加載開始創建,加載完就銷毀了。

2.2.1、實例:監聽域對象的創建與銷毀

這里只演示一個,其他的兩個同理都是這樣子操作的。

HttpServletListener監聽器

a.創建類,實現HttpServletListener接口,并重寫方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;importjavax.servlet.http.HttpSessionEvent;importjavax.servlet.http.HttpSessionListener;public class MyHttpSessionListener implementsHttpSessionListener {

@Overridepublic voidsessionCreated(HttpSessionEvent arg0) {

System.out.println("session被創建了");

}

@Overridepublic voidsessionDestroyed(HttpSessionEvent arg0) {

System.out.println("session被銷毀了");

}

}

View Code

b.在web.xml中的配置

28277d0f7aae1bef4da4464d76b31baf.png

c.在newFile.jsp中測試

注:在jsp中我添加了invalidate方法來測試銷毀

3edfd38f4dae822d223fa28490a84bdf.png

d.結果

8ed7887860f2215adcea10604c427fef.png

2.3、監聽域對象的屬性變化

監聽ServletContext屬性變化 ServletContextAttributeListener

監聽HttpSession屬性變化 HttpSessionAttributeListener

監聽HttpServletRequest屬性變化 ServletRequestAttributeListener

2.3.1、實例:監聽域對象的實例變化

a.創建一個MyServletRequest類繼承ServletRequestAttributeListener接口,并實現改接口方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;importjavax.servlet.ServletRequestAttributeEvent;importjavax.servlet.ServletRequestAttributeListener;public class MyServletRequest implementsServletRequestAttributeListener{

@Overridepublic voidattributeAdded(ServletRequestAttributeEvent arg0) {

System.out.println("requestAttribute添加了屬性");

}

@Overridepublic voidattributeRemoved(ServletRequestAttributeEvent arg0) {//TODO Auto-generated method stub

System.out.println("requestAttribute被移除了");

}

@Overridepublic voidattributeReplaced(ServletRequestAttributeEvent arg0) {//TODO Auto-generated method stub

System.out.println("requestAttribute被替換了");

System.out.println(arg0.getName()+arg0.getValue());

}

}

View Code

b.在web.xml中注冊該監聽器

test.MyServletRequest

c.在jsp測試一下

14a7193a4620fd9b886af793280db036.png

結果:

f2b354e16543bb8cbafcad8edbfc8064.png

當我們在添加一個removeAttribute()方法時

491e517aa39b4a1cf1cd276737727ad9.png

2.4、監聽session綁定javabean

2.4.1、HttpSessionBindingListener(這個是用javabean去實現的,所以不需要去注冊)

用于監聽javaBean對象是否綁定到了session域

創建一個User去實現HttpSessionBindingListener接口

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;importjavax.servlet.http.HttpSessionBindingEvent;importjavax.servlet.http.HttpSessionBindingListener;public class User implementsHttpSessionBindingListener {privateString name;private intage;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@Overridepublic voidvalueBound(HttpSessionBindingEvent arg0) {

System.out.println("User對象被session綁定了!");

}

@Overridepublic voidvalueUnbound(HttpSessionBindingEvent arg0) {

System.out.println("User對象解除session綁定了!");

}

}

View Code

在jsp頁面中測試

061fc3463375792656254be2220afefe.png

結果:

371fd418ea54acbbc580baa4e7eaa2e4.png

注意:不需要再web.xml中去配置該監聽器,在執行setAttrubute()方法的時候自動去識別該監聽器

2.4.2.HttpSessionActivationListener

用于監聽javaBean對象的活化與鈍化。

HttpSessionActivationListener如果javaBean實現了這個接口,那么當我們正常關閉服務器時,session中的javaBean對象就會被鈍化到我們指定的文件中。

當下一次在啟動服務器,因為我們已經將對象寫入到文件中,這時就會自動將javaBean對象活化到session中。

首先我們要明白什么是活化與鈍化等下單獨寫一篇文章介紹活化與鈍化

a2b02190b491049e09b1433291c2fd40.png

我們還需要個context.xml文件來配置鈍化時存儲的文件

三、Filter

接下來為大家講解的是Filter,這個相對于Listener來說就重要的多了,它的應用非常的廣泛,主要是起到一個過濾、攔截的作用。

3.1、Filter的定義

Javaweb中的過濾器可以攔截所有訪問web資源的請求或響應操作。執行過濾任務的對象,這些任務是針對對某一資源(servlet 或靜態內容)的請求或來自某一資源的響應執行的,抑或同時針對這兩者執行。

3.2、怎么創建一個過濾器

創建一個類實現Filter接口

重寫接口中方法 doFilter方法是真正過濾的

在web.xml文件中配置

注意:在Filter的doFilter方法內如果沒有執行chain.doFilter(request,response)那么資源是不會被訪問到的。

3.3、實例

首先我創建了一個MyFilter.java實現Filter接口

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;public class MyFilter implementsFilter{

@Overridepublic voiddestroy() {

}

@Overridepublic voiddoFilter(ServletRequest req, ServletResponse res,

FilterChain chain)throwsIOException, ServletException {

System.out.println("doFilter執行了");

chain.doFilter(req, res);//放行

System.out.println("執行完返回到客戶端");

}

@Overridepublic void init(FilterConfig arg0) throwsServletException {

}

}

View Code

在web.xml中配置過濾器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

MyFilter

com.jxlg.filter.MyFilter

MyFilter

/demo1

View Code

寫一個servlet讓MyFilter進行過濾

53ae10f8f6677ef7f8a44f87333ece64.png

結果

27aff5ee25a5e0c23507980b132282c3.png

3.4、FilterChain

FilterChain 是 servlet 容器為開發人員提供的對象,它提供了對某一資源的已過濾請求調用鏈的視圖。過濾器使用 FilterChain 調用鏈中的下一個過濾器,如果調用的過濾器是鏈中的最后一個過濾器,則調用鏈末尾的資源。

問題:怎樣可以形成一個Filter鏈?

只要多個Filter對同一個資源進行攔截就可以形成Filter鏈

問題:怎樣確定Filter的執行順序?

由來確定,在web.xml文件中哪一個過濾器的放到了前面誰就先執行。

3.5、Filter的生命周期

Servlet生命周期:

實例化 --》 初始化--》 服務--》 銷毀

當服務器啟動,會創建Filter對象,并調用init方法,只調用一次.

當訪問資源時,路徑與Filter的攔截路徑匹配,會執行Filter中的doFilter方法,這個方法是真正攔截操作的方法.

當服務器關閉時,會調用Filter的destroy方法來進行銷毀操作.

3.6、FilterConfig

在Filter的init方法上有一個參數,類型就是FilterConfig.

FilterConfig它是Filter的配置對象,它可以完成下列功能

1.獲取Filtr名稱

2.獲取Filter初始化參數

3.獲取ServletContext對象。

怎么獲取到一個filterConfig對象

c696b75f1a860f6554a0df927b53cdc4.png

fiterConfig中的方法

5098855a1c458ccd95c4c38a36bf1fd3.png

實例:獲取web.xml文件中的字符編碼,用來過濾,告知服務器請求用的是什么編碼。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;public class MyFilterConfig implementsFilter {privateFilterConfig filterConfig;

@Overridepublic voiddestroy() {

}

@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response,

FilterChain chain)throwsIOException, ServletException {//通過filterConfig來獲取配置信息中的初始化參數

String encoding = filterConfig.getInitParameter("encoding");

request.setCharacterEncoding(encoding);

chain.doFilter(request, response);//放行

}

@Overridepublic void init(FilterConfig filterConfig) throwsServletException {this.filterConfig =filterConfig;

}

}

View Code

web.xml中的配置信息

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

MyFilterConfig

com.jxlg.filter.MyFilterConfig

encoding

UTF-8

MyFilterConfig

/*

View Code

3.7、Filter配置

基本配置

filter名稱

Filter類的包名.類名

filter名稱

路徑

關于其它配置

1.

完全匹配 以”/demo1”開始,不包含通配符*

目錄匹配 以”/”開始 以*結束

擴展名匹配 *.xxx 不能寫成/*.xxx

2.

它是對指定的servlet名稱的servlet進行攔截的。

3.

可以取的值有 REQUEST FORWARD ERROR INCLUDE

它的作用是:當以什么方式去訪問web資源時,進行攔截操作.

1.REQUEST 當是從瀏覽器直接訪問資源,或是重定向到某個資源時進行攔截方式配置的 它也是默認值

2.FORWARD 它描述的是請求轉發的攔截方式配置

3.ERROR 如果目標資源是通過聲明式異常處理機制調用時,那么該過濾器將被調用。除此之外,過濾器不會被調用。

4.INCLUDE 如果目標資源是通過RequestDispatcher的include()方法訪問時,那么該過濾器將被調用。除此之外,該過濾器不會被調用。

四、使用Fliter實現自動登錄

這個例子就是一個簡單的登錄驗證與數據庫交互,我們使用Fliter來實現自動登錄。

思路分析:

72283ed613eb3686b3d8d47f34f787c2.png

login.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

${msg}

用戶名:密碼:

自動登陸

View Code

FindUserServlet.java

這里獲取了表單提交的數據,然后如果按了自動登錄,我們就會把用戶名和密碼保存到cooki中去

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.web.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.jxlg.web.domain.User;importcom.jxlg.web.service.UserService;public class FindUserServlet extendsHttpServlet {public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//獲取表單數據

String username = request.getParameter("username");

String password= request.getParameter("password");//處理業務邏輯

UserService us = newUserService();

User user=us.findUser(username,password);if(user!=null){

String autoLogin= request.getParameter("autoLogin");

Cookie cookie= new Cookie("user",user.getUsername()+"&"+user.getPassword());

cookie.setPath("/");if(autoLogin!=null){//將用戶名和密碼保存到cookie中

cookie.setMaxAge(60*60*24*7);

}else{//清除cookie

cookie.setMaxAge(0);

}

response.addCookie(cookie);//把cookie保存到客戶端

request.getSession().setAttribute("u", user);

request.getRequestDispatcher("/home.jsp").forward(request, response);

}else{

request.setAttribute("msg", "用戶名或密碼輸入錯誤,請重新登陸");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

doGet(request, response);

}

}

View Code

UserService

這里是service業務層代碼

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

ackage com.jxlg.web.service;importjava.sql.SQLException;importcom.jxlg.Dao.UserDao;importcom.jxlg.web.domain.User;public classUserService {

UserDao ud= newUserDao();publicUser findUser(String username, String password) {try{returnud.findUser(username,password);

}catch(SQLException e) {

e.printStackTrace();

}return null;

}

}

View Code

UserDao

這里是DAO實現類,與數據庫交互,我這里是用的是C3P0連接池,和dbUtils與數據庫交互

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.Dao;importjava.sql.SQLException;importorg.apache.commons.dbutils.QueryRunner;importorg.apache.commons.dbutils.handlers.BeanHandler;importcom.jxlg.util.C3P0Util;importcom.jxlg.web.domain.User;public classUserDao {public User findUser(String username, String password) throwsSQLException {

QueryRunner qr= newQueryRunner(C3P0Util.getDateSource());return qr.query("select * from user where username=? and password=?", new BeanHandler(User.class),username,password);

}

}

View Code

home.jsp

登錄成功跳轉的界面

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

View Code

MyFilter

這是一個過濾器,記住一定要去web.xml配置,如果我們在longin.jsp中選擇了自動登錄的話,我們可以直接訪問home.jsp實現自動登錄。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.web.domain;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.jxlg.web.service.UserService;public class MyFilter implementsFilter{

@Overridepublic voiddestroy() {

}

@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response,

FilterChain Chain)throwsIOException, ServletException {//轉化兩個對象

HttpServletRequest req =(HttpServletRequest)request;

HttpServletResponse res=(HttpServletResponse) response;

String uri=req.getRequestURI();//System.out.println(uri);///StudentLogin/login.jsp

String path =req.getContextPath();

path=uri.substring(path.length());//System.out.println(path);///login.jsp

if("/login.jsp".equals(path)||"/servlet/findUserServlet".equals(path)){

User user= (User) req.getSession().getAttribute("u");//如果用戶沒有登錄過,我們就執行登錄操作。

if(user==null){//得到cookies數組

Cookie[] cookies =req.getCookies();

String username="";

String password="";//從cookie中找到想要的user對象

for(int i=0;cookies!=null&&i

String value= cookies[i].getValue(); //tom&123

String[] values = value.split("&");

username= values[0];

password= values[1];

}

}//執行登錄操作

UserService us = newUserService();

User u=us.findUser(username, password);//如果登錄成功,把user保存到session中

if(user!=null){

req.getSession().setAttribute("u", u);

}

}

}//放行

Chain.doFilter(request, response);

}

View Code

開發中遇到的問題

1.在寫MyFilter中,在遍歷保存在客戶端的cookie的時候,我沒有家伙寫cookies!=null,這樣會導致空指針異常

2.在使用HttpServletRequest時,記住在Filter中一定要記住,進行轉化,因為在Filter中是ServletRequest對象。

3.因為我在Filter中web.xml文件中配置的url-pattern是當前應用的所有url,所以當我們請求的每一個資源都會調用Filter進行過濾,但是我們并不需要在login.jsp等也自動登錄,所以就記得要排除掉這些。

提供源碼,收好不謝:

鏈接:http://pan.baidu.com/s/1c1K6UJ2 密碼:mewe

五、全局編碼的過濾器

前言:

ef71b9d72938b7237237c607d088a1e6.png

使用過濾器對post請求的亂碼進行過濾,測試之后是沒有問題的,但是當我們是get請求的時候,我們該怎么去處理呢?

怎樣可以做成一個通用的,可以處理post,get所有的請求的?

在java中怎樣可以對一個方法進行功能增強?

1.繼承

2.裝飾設計模式

1.創建一個類讓它與被裝飾類實現同一個接口或繼承同一個父類

2.在裝飾類中持有一個被裝飾類的引用

3.重寫要增強的方法

分析:我們獲取請求參數無非就三種方式:getParameter、getParameterValues、getParameterMap.

我們知道getParameter與getParameterValue方法可以依賴于getParamterMap方法來實現。

login.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

username:
username:

View Code

LoginServlet

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

String name1= request.getParameter("username1");

String name= request.getParameterValues("username")[0];

System.out.println(name);

System.out.println(name1);

}

View Code

MyFilter

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.itheima.filter;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.util.Map;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletRequestWrapper;public class MyFilter implementsFilter {public void init(FilterConfig filterConfig) throwsServletException {

}public voiddoFilter(ServletRequest request, ServletResponse response,

FilterChain chain)throwsIOException, ServletException {

HttpServletRequest req=(HttpServletRequest) request;//解決post方式//req.setCharacterEncoding("UTF-8");

req = newMyRequest(req);

chain.doFilter(req, response);

}public voiddestroy() {

}

}//實現與被包裝對象相同的接口//定義一個與被包裝類相對象的引用//定義一個構造方法,把被包裝對象傳過來//對于不需要改寫方法,直接調用//對于無需要改寫方法,寫自己的方法體

class MyRequest extendsHttpServletRequestWrapper {

HttpServletRequest request;//是用于接收外部傳遞的原始的request

publicMyRequest(HttpServletRequest request) {super(request);//是因為父類沒有無參數構造

this.request =request;

}/** @Override public String getParameter(String name) { name =

* request.getParameter(name);//亂碼 try { return new

* String(name.getBytes("iso-8859-1"),"UTF-8"); } catch

* (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }*/@OverridepublicString getParameter(String name) {

Map map =getParameterMap();return map.get(name)[0];

}

@OverridepublicString[] getParameterValues(String name) {

Map map =getParameterMap();returnmap.get(name);

}private boolean flag = true;

@Overridepublic MapgetParameterMap() {

Map map = request.getParameterMap();//亂碼

if(flag) {for (Map.Entrym : map.entrySet()) {

String[] values=m.getValue();for (int i = 0; i < values.length; i++) {try{

values[i]= newString(

values[i].getBytes("iso-8859-1"), "UTF-8");

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

}

}

flag= false;

}returnmap;

}

}

View Code

68f724bad5a33d9a9f6bd2ca7369ecb7.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536890.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BFC的概念及作用

在了解什么是BFC之前&#xff0c;首先得明白什么是Box , Formatting Context &#xff08;一個決定如何渲染文檔的容器&#xff09;的概念 Box: CSS布局的基本單位 Box是 CSS 布局的對象和基本單位&#xff0c; 直觀點來說&#xff0c; 就是一個頁面是由很多個 Box組成的&#…

bitcount java_java-Long.bitCount()如何找到設置的位數?

讓我們以255為例.我們將這些位組合在一起.首先,我們從255開始,為0b1111.1111(二進制為8 1)第一行代碼是&#xff1a;i i - ((i > > > 1) & 0x5555555555555555L);這條線正在梳理每對1.由于我們有8個1,所以我們希望組合成對,并得到2,2,2,2之類的東西.由于它是二進…

Luogu P2463 [SDOI2008]Sandy的卡片

題目鏈接 \(Click\) \(Here\) 真的好麻煩啊。。事實證明&#xff0c;理解是理解&#xff0c;一定要認認真真把板子打牢&#xff0c;不然調鍋的時候真的會很痛苦。。&#xff08;最好是八分鐘能無腦把\(SA\)碼對的程度\(QAQ\)&#xff09; 這個題最開始我想的是\(RMQ\)遍歷每一個…

java log輸出到文件路徑_Java - 配置log4j的日志文件路徑 (附-獲取當前類路徑的多種方法)...

1 日志路徑帶來的痛點Java 項目中少不了要和log4j等日志框架打交道, 開發環境和生產環境下日志文件的輸出路徑總是不一致, 設置為絕對路徑的方式缺少了靈活性, 每次變更項目路徑都要修改文件, 目前想到的最佳實現方式是: 根據項目位置自動加載并配置文件路徑.本文借鑒 Tomcat 的…

常用數據結構

字典&#xff1a;即map&#xff0c;映射&#xff0c;通過key>value的方式直接查找與之對應的值&#xff0c;實現一般是hash表或二叉樹跳躍表&#xff1a;本質是鏈表&#xff0c;只不過將數據進行提取分層&#xff0c;將總數據置為底層&#xff0c;提取2、4、的倍數為第一二層…

java jasypt_Jasypt

軟件簡介Jasypt這個Java類包為開發人員提供一種簡單的方式來為項目增加加密功能&#xff0c;包括&#xff1a;密碼Digest認證&#xff0c;文本和對象加密&#xff0c;集成hibernate&#xff0c;SpringSecurity(Acegi)來增強密碼管理。Jasypt開發團隊推出了Java加密工具Jasypt 1…

ZABBIX監控JAVA日志文件

最近開發人員有一個需求&#xff0c;監控java程序的報錯日志&#xff0c;如日志中包含“ERROR”關鍵字的信息&#xff0c;就郵件告警&#xff0c;以下是具體實現方法。 一、創建模板以上是已經創建好的模板&#xff0c;名為“Template App Java logs”創建應用集二、創建監控項…

如何快速把音樂轉成MP3格式

身邊有這樣一群朋友經常搞音樂&#xff0c;仿佛生活的樂趣只有音樂&#xff0c;不能也能理解&#xff0c;誰沒有點自己的愛好呢&#xff1f;但是如果想要在茫茫人海中成為佼佼者&#xff0c;并不是這么容易的&#xff0c;但是我們要在速度上贏更多的人&#xff0c;所以寫了這篇…

new URI(zk_servers_1) 路徑包含下劃線無法獲取host的問題

spring cloud gateway使用zookeeper作為注冊中心調用其它服務的時候報了下面這個錯誤&#xff1a; ava.lang.NullPointerException: nullat io.netty.util.NetUtil.isValidIpV4Address(NetUtil.java:648) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at io.netty.util.NetUt…

java ee 值范圍_JAVAEE之內置對象和屬性范圍

內置對象和屬性范圍四種屬性范圍九個內置對象1.內置對象如果說想要使用一個對象&#xff0c;必須new 出來&#xff0c;但是在我們的jsp操作中&#xff0c;發現我們使用過的out,request對象沒有進行實例化&#xff0c;類似于這樣的對象&#xff0c;我們叫做jsp的內置對象&#x…

JavaWeb學習筆記(九)--HttpServletResponse

web服務器接收到客戶端的HTTP請求&#xff0c;會針對每一次請求&#xff0c;分別創建一個用于代表請求的request對象和代表響應的response對象。 request和response對象既然代表請求和響應&#xff0c;那我們要獲取客戶端提交過來的數據&#xff0c;只需要找request對象即可。要…

java html5 上傳_HTML5結合ajax實現文件上傳以及進度顯示

基于原生html5實現&#xff0c;不需要falsh支持&#xff0c;進度可以自定義顯示&#xff0c;控制靈活&#xff0c; 本來打算使用jquery插件進行異步文件上傳&#xff0c;比如uploadfy但是需要額外的支持&#xff0c;也有人用iframe模仿異步上傳機制&#xff0c;感覺都比較別扭。…

7天玩轉機器學習

7天玩轉機器學習 人工智能時代&#xff0c;數據迎來大爆發&#xff0c;數據對于提升業務價值的重要性與日俱增。但面對海量數據&#xff0c;傳統分析方法已經顯得無能為力&#xff0c;而機器學習的成熟為企業帶來了強大的分析引擎&#xff0c;可在眾多領域幫助企業挖掘數據價值…

centos 6.5 yum java_Centos6.5 yum 安裝jdk1.8

centos 6.5 安裝卸載jdk-- 查看有沒有預裝jdk版本java -version-- 查看已安裝的版本rpm -qa|grep java-- 卸載預裝版本 rpm -e --nodeps 命令卸載rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64-- 查找可以安裝的jdk列表yum search java | grep -i --color J…

java 中使用mongodb_mongodb在java中的使用

agg Aggregation.newAggregation(Aggregation.match(new Criteria().andOperator(Criteria.where("timeStamp").lte(TypeChange.dateToLong(times[1])).gte(TypeChange.dateToLong(times[0])),new Criteria().orOperator(ruleCr))),//篩選符合條件的記錄Aggregation…

一次面試總結(記錄)

1,從一個數組里找重復出現次數最多的一個數&#xff1f;2,常用的linux命令3.垃圾收集器有哪些 &#xff1f;垃圾收集算法&#xff1f;4,線上服務器變慢了你是如何定位問題并處理的&#xff1f;5,你自己實現一個本地緩存,淘汰最久未使用,你怎么設計6,用棧實現計算器7,剔除二叉樹…

java 累加 0-9 a-z_JAVA獲得包含0-9、a-z、A-Z范圍內字符串的的隨機數實例

一、獲得0-9,a-z,a-z范圍的隨機字符串/*** java獲得0-9,a-z,a-z范圍的隨機數* param length 隨機數長度* return string*/public static string getrandomchar(int length) {char[] chr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r,…

【PHP 擴展開發】Zephir 基礎篇

上一篇 《Zephir 簡介》 簡單介紹了環境搭建&#xff0c;編寫了一個的簡單示例。這一篇繼續介紹 Zephir 基礎。 基本語法Zephir 中&#xff0c;每個文件都必須有且只有一個類&#xff0c;每個類都必須有一個命名空間&#xff0c;目錄結構必須與所使用的類和命名空間的名稱相匹配…

java常見排序算法有哪些_Java中常用的6種排序算法詳細分解

排序算法很多地方都會用到&#xff0c;近期又重新看了一遍算法&#xff0c;并自己簡單地實現了一遍&#xff0c;特此記錄下來&#xff0c;為以后復習留點材料。廢話不多說&#xff0c;下面逐一看看經典的排序算法&#xff1a;1. 選擇排序選擇排序的基本思想是遍歷數組的過程中&…

python range函數

這個函數很簡單&#xff0c;就不寫例子了&#xff0c;看看語法&#xff0c;拿來即用 python range() 函數可創建一個整數列表&#xff0c;一般用在 for 循環中。 函數語法 range(start, stop[, step]) 參數說明&#xff1a; start: 計數從 start 開始。默認是從 0 開始。例如ra…