java写一个web聊天工具_javaweb写的在线聊天应用
寫這個玩意兒就是想練練手, 用戶需要登陸才能在線聊天,不要依賴數(shù)據(jù)庫, 不需要數(shù)據(jù)庫的操作, 所有的數(shù)據(jù)都是保存在內存中, 如果服務器一旦重啟,數(shù)據(jù)就沒有了;
登錄界面:
聊天界面:
左側是在線的用戶列表, 右側是聊天的內容, 內容的格式為 “作者 : 內容”;
點擊button可以發(fā)布聊天信息;
使用的是spring搭建的框架,基于tomcat的服務器;
web.xml的配置如下:
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
index.htm
test
org.springframework.web.servlet.DispatcherServlet
1
test
*.htm
org.springframework.web.context.ContextLoaderListener
CharacterEncodingFilter
com.nono.Filter.CharacterEncodingFilter
encoding
UTF-8
SecurityServlet
com.nono.SecurityServlet
SecurityServlet
*.htm
contextConfigLocation
/WEB-INF/test-servlet.xml
View Code
conteConfigLocation的配置為:
.jsp
View Code
整個項目的結構為一個主路由, 四個po層, ?兩個過濾器:
界面的用戶列表和用戶內容列表用了ajax刷新, 感覺不錯的說:
String basePath= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
loginheight:100%;
}
.bg{
background:url(imgs/bg.jpeg);
}
list
content
haha:
say someting
haha:
say someting
enter text
Submit
$.post("chat.htm", "content="+ $("#answer").val(), function(data) {
console.log(data);
});
});functionGet(url , el, fn) {this.post = function() {
$.post(url,function(data) {
data=JSON.parse(data);var html = "";
$.each(data,function(i, e) {
html+=fn(i,e);
});
$(el).html( html );
});
};
};
(function() {var list = new Get("getList.htm", "#list", function(i, e) {return "
" + e.name + "";});var content = new Get("getContent.htm", "#con", function(i, e) {return "
"+ e.name +" : "+ e.content +"
";});
setInterval(function() {
list.post();
content.post();
},1000);
})();
View Code
權限控制的話我們可以用到fileter:
packagecom.nono;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importcom.nono.po.User;public class SecurityServlet extends HttpServlet implementsFilter {private static final long serialVersionUID = 1L;public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throwsIOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse) arg1;
HttpSession session=request.getSession();
User user= (User) session.getAttribute("user");
String url=request.getRequestURI();//如果用戶信息不是空的, 或者要訪問的是登陸的界面(get,post的方式包含了login字符串);
if( user!=null || url.indexOf("login")>-1) {
arg2.doFilter(arg0, arg1);return;
}else{//余下的全跳到登陸界面
response.sendRedirect(request.getContextPath() + "/login.htm");return;
}
}public void init(FilterConfig arg0) throwsServletException {
}
}
View Code
路由控制和服務放到了一起, 因為權限控制使用過濾器處理, 所以在路由里面我們就不用關心用戶的消息, 只要處理業(yè)務邏輯就好了:
packagecom.nono.Controller;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Vector;importjavax.jms.Session;importjavax.print.DocFlavor.STRING;importjavax.print.attribute.HashAttributeSet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importnet.sf.json.JSONArray;importorg.omg.CORBA.PUBLIC_MEMBER;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.ResponseBody;importcom.nono.po.Content;importcom.nono.po.Contents;importcom.nono.po.User;importcom.nono.po.Users;
@Controllerpublic classMainController {//用戶和用戶組;
@Autowired
Users users;
@Autowired
Contents contents;
@RequestMapping(value="login", method=RequestMethod.GET)publicString login (HttpServletRequest request) {return "login";
}
@RequestMapping(value="login", method=RequestMethod.POST)publicString loginPOST ( HttpServletRequest request, HttpServletResponse response ) {
String string= "login";
String name= (String) request.getParameter("name");
Boolean flag= true;//如果名字不是空的話;
if( !name.equals("") ) {
Vector vector=users.getList();for(int i=0; i< vector.size(); i++) {
User user=(User) vector.elementAt(i);if( user.getName().equals( name ) ) {
flag= false;
};
};
};//用戶名不存在
if( flag ) {
User user= newUser();
user.setName( name );
HttpSession session= request.getSession(true);//設置Session的過期時間為10分鐘
session.setMaxInactiveInterval(600);//設置seesion中的用戶信息;
session.setAttribute("user", user);//添加用戶;
users.addUser( user );//加入的提示;
Content content = newContent();
content.setName( name );
content.setContent("enter the chat room!");
contents.addContent( content );
string= "chat";returnstring;
}else{//用戶名已經(jīng)存在
request.setAttribute("info", "用戶名已經(jīng)存在1");
string= "login";returnstring;
}
}
@RequestMapping(value="chat", method=RequestMethod.GET)publicString main (HttpServletRequest request) {
String string= "chat";returnstring;
}
@RequestMapping(value="chat", method=RequestMethod.POST)
@ResponseBodypublicString chat(HttpServletRequest request) {
String string= (String) request.getParameter("content");
HttpSession session=request.getSession();//設置seesion中的用戶信息;
User user = (User) session.getAttribute("user");
String name=user.getName();
Content content= newContent();
content.setName( name );
content.setContent( string );
contents.addContent( content );return "true";
}
@RequestMapping(value="getList", method=RequestMethod.POST, produces = "text/html;charset=UTF-8")
@ResponseBodypublicString getList( HttpServletRequest request) {returnJSONArray.fromObject( users.getList() ).toString();
}
@RequestMapping(value="getContent", method=RequestMethod.POST, produces = "text/html;charset=UTF-8")
@ResponseBodypublicString getArrayList() {
ArrayList list=(ArrayList) contents.getContents();
ArrayList result= newArrayList();for( int i= 0; i< list.size(); i++) {
HashMap hashMap = newHashMap();
hashMap.put("name", ((Content)list.get(i)).getName());
hashMap.put("content", ((Content)list.get(i)).getContent());
result.add( hashMap );
};returnJSONArray.fromObject( result ).toString();
}
}
View Code
有哪位大神告訴我為什么中文各種亂碼, 在界面中的utf-8也設置, @ResponseBody的也設置了, 還是亂碼, encodeURIComponent過的也是亂碼, 坑爹啊;
總結
以上是生活随笔為你收集整理的java写一个web聊天工具_javaweb写的在线聊天应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 迫不及待了 粉丝自制虚幻5《寂静岭》还原
- 下一篇: emwin edit控制的输入长度小数点