JQUERY弹幕网AJAX加载下拉框数据,封装,CDN修改别人脚本文件,乱码处理【诗书画唱】

package com.jy.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jy.bean.Dminfo;
import com.jy.dao.DminfoDao;
/**
* Servlet implementation class DanmuServlet
*/
@WebServlet("/ds")
public class DanmuServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DanmuServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String method = request.getParameter("method");
DminfoDao dminfoDao = new DminfoDao();
if("save".equals(method)) {
//获取输入的弹幕的信息
String text = request.getParameter("text");
//中文乱码处理
text = new String(text.getBytes("iso8859-1"),"utf-8");
System.out.println(text);
String color = request.getParameter("color");
System.out.println(color);
String strSize = request.getParameter("size");
Integer size = parseToNum(strSize);
String strPosition = request.getParameter("position");
Integer position = this.parseToNum(strPosition);
String strTime = request.getParameter("time");
Integer time = this.parseToNum(strTime);
//封装数据
Dminfo dm = new Dminfo();
dm.setText(text);
dm.setColor(color);
dm.setSize(size);
dm.setPosition(position);
dm.setTime(time);
dminfoDao.add(dm);
} else {
//String jsonStr = "{dms:[{\"text\":\"神光护体\",\"color\":\"#0000EE\",\"size\":1,\"position\":0,\"time\":112}]}";
List<Dminfo>list = dminfoDao.selectAll();
StringBuilder jsonStr = new StringBuilder();
jsonStr.append("{dms:[");
String dot = "";
for(Dminfo dm : list) {
jsonStr.append(dot);
jsonStr.append("{\"text\":\"");
jsonStr.append(dm.getText());
jsonStr.append("\",\"color\":\"");
jsonStr.append(dm.getColor());
jsonStr.append("\",\"size\":");
jsonStr.append(dm.getSize());
jsonStr.append(",\"position\":");
jsonStr.append(dm.getPosition());
jsonStr.append(",\"time\":");
jsonStr.append(dm.getTime());
jsonStr.append("}");
dot = ",";
}
jsonStr.append("]}");
System.out.println(jsonStr);
response.setCharacterEncoding("utf-8");
response.getWriter().write(jsonStr.toString());
}
}
//将字符串转换成整型变量的方法
private Integer parseToNum(String s){
Integer num = null;
if(s != null && s.length() > 0) {
num = Integer.parseInt(s);
}
return num;
}
}


——————

前言:弹幕网的效果和个人对其的理解是“查询弹幕”就是在对应的时间轴显示,从数据库中查出来。效果是发弹幕时可以保存弹幕到数据库,同时,刷新时在对应的部分会从数据库查询出弹幕,并在对应的时间轴显现。
乱码处理:

下面含我自己想出来的修改别人的脚本文件高效的好方法。
有些自己想出来,的确是值得骄傲的一件事。——诗书画唱
分享自己的学习方法(我有时会毫无保留地分享我的方法,当然自己获得这些方法肯定比你们直接到我这里获取方法耗时多,同时毅力和耐心很重要,我的方法会分享很多,你不坚持学完,有时只会是一知半解,只会皮毛,想比一些人更强等的目标等也不会那么容易实现):
看教程视频是,从头到尾看,遇到自己认为好的就是亲自动手,截图,写文字到b站专栏的草稿箱,之后可以发布。遇到认为会的,容易等的就在这段时间做别的事。很多时候可以2倍或1.5倍速看。
——————————
有些时候一些JS等的脚本文件自己会写,但可能会花很多不必要的时间,所以为了更好的满足自己的需求和节省时间成高效,要自己学会修改别人写的脚本文件,之后去用。






——————
作业和我给出的答案:
加载下拉框数据


package com.SSHC.bean;
public class Addr {
private Integer id;
private Integer pid;
private String name;
public Addr(Integer id,String n){
this.id = id;
this.name = n;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

package com.SSHC.controller;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.SSHC.bean.Addr;
/**
* Servlet implementation class ProvServlet
*/
@WebServlet("/ps")
public class ProvServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ProvServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取省份下拉框中的数据(这里暂时用数组代替数据库查询)
List<Addr>list = new ArrayList<Addr>();
Addr a1 = new Addr(1,"湖南");
Addr a2 = new Addr(2,"湖北");
Addr a3 = new Addr(3,"江西");
Addr a4 = new Addr(4,"福建");
list.add(a1);
list.add(a2);
list.add(a3);
list.add(a4);
//方法一:拼接Html字符串
//拼接一段html:将list中的数据全部转换成html代码
//<option value='1'>湖南</option>
// StringBuilder html = new StringBuilder();
// for(Addr addr : list) {
// html.append("<option value='");
// html.append(addr.getId());
// html.append("'>");
// html.append(addr.getName());
// html.append("</option>");
// }
// response.setCharacterEncoding("utf-8");
// //将html代码提交到回调函数中
// response.getWriter().write(html.toString());
//方法二:拼接JSON字符串
//[{"id":1,"name":"湖南"},{"id":2,"name":"湖北"}]
StringBuilder jsonStr = new StringBuilder("[");
String dot = "";
for(Addr addr : list) {
jsonStr.append(dot);
jsonStr.append("{\"id\":");
jsonStr.append(addr.getId());
jsonStr.append(",\"name\":\"");
jsonStr.append(addr.getName());
jsonStr.append("\"}");
dot = ",";
}
jsonStr.append("]");
response.setCharacterEncoding("utf-8");
response.getWriter().write(jsonStr.toString());
}
}


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base hreff="<%=basePath%>">
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" srcc="js/jquery-1.11.0.js"></script>
<script type="text/javascript">
$(function(){
//提交一个请求下拉框数据的ajax请求
$.ajax({
url: 'ps',
type: 'POST',
success: function(data){
//方法一:
//$('#prov').html(data);
//方法二:
//将data转换成真正的js对象
var arr = JSON.parse(data);
//var arr = eval('(' + data + ')');
for(var i = 0;i < arr.length;i ++) {
var ad = arr[i];
//将选项放到下拉框中去
$('#prov').append($('<option value="'
+ ad.id + '">'
+ ad.name + '</option>'));
}
}
});
});
</script>
</head>
<body>
<select id="prov"></select>
</body>
</html>


实现弹幕保存功能。
弹幕网:
create table Dminfo(
id int primary key auto_increment,
text varchar(100) ,
color varchar(100) ,
size int,
position int,
time int
);
select * from Dminfo
drop table Dminfo




package com.SSHC.bean;
public class Dminfo {
private Integer id;//弹幕编号
private String text;//弹幕内容
private String color;//弹幕的字体颜色
private Integer size;//弹幕的字体大小
private Integer position;//弹幕的显示位置
private Integer time;//弹幕显示时间
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
public Integer getPosition() {
return position;
}
public void setPosition(Integer position) {
this.position = position;
}
public Integer getTime() {
return time;
}
public void setTime(Integer time) {
this.time = time;
}
}

package com.SSHC.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.SSHC.bean.Dminfo;
import com.SSHC.dao.BaseDao;
import com.SSHC.dao.DminfoDao;
/**
* Servlet implementation class DanmuServlet
*/
@WebServlet("/ds")
public class DanmuServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DanmuServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request,
* HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest
* request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("GBK");
String method = request.getParameter("method");
if("save".equals(method)) {
//获取输入的弹幕的信息
String text = request.getParameter("text");
String text2=
new String(text.getBytes("iso8859-1"),"UTF-8") ;
System.out.println(text2);
String color = request.getParameter("color");
System.out.println(color);
String strSize = request.getParameter("size");
System.out.println(strSize);
String strPosition = request.getParameter("position");
System.out.println(strPosition);
String strTime = request.getParameter("time");
System.out.println(strTime);
DminfoDao A=new DminfoDao();
Dminfo B=new Dminfo();
B.setText(text2);
B.setColor(color);
B.setPosition(Integer.valueOf(strPosition));
B.setSize(Integer.valueOf(strSize));
B.setTime(Integer.valueOf(strTime));
try {
A.add(B);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String S;
if(BaseDao.countAdd!=null) {
S="添加成功!";
//request.setAttribute("B", S);
//request.getRequestDispatcher("ManageAllUserServlet")
//
// .forward(request, response);
System.out.println(S);
}else
{
S="添加失败!";
System.out.println(S);
}
} else {
System.out.println("查询弹幕");
//String jsonStr = "{dms:[{\"text\":\"神光护体\",\"color\":\"#0000EE\",\"size\":1,\"position\":0,\"time\":112}]}";
DminfoDao ud = new DminfoDao();
List<Object> list;
try {
list = ud.selectAll(Dminfo.class,null);
StringBuilder jsonStr = new StringBuilder();
jsonStr.append("{dms:[");
String dot = "";
for(Object o : list) {
Dminfo dm = ( Dminfo)o;
jsonStr.append(dot);
jsonStr.append("{\"text\":\"");
jsonStr.append(dm.getText());
jsonStr.append("\",\"color\":\"");
jsonStr.append(dm.getColor());
jsonStr.append("\",\"size\":");
jsonStr.append(dm.getSize());
jsonStr.append(",\"position\":");
jsonStr.append(dm.getPosition());
jsonStr.append(",\"time\":");
jsonStr.append(dm.getTime());
jsonStr.append("}");
dot = ",";
}
jsonStr.append("]}");
System.out.println(jsonStr);
response.setCharacterEncoding("utf-8");
response.getWriter().write(jsonStr.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


package com.SSHC.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.SSHC.util.DbUtil;
//万能Dao
//T不是一个具体的java类,他是一个泛型参数
public class BaseDao<T> {
public<T> List<T>selectAll(Class cls,String SQL) throws Exception{
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
List<T>list = new ArrayList<T>();
//通过反射技术获取表的名字,表的名字刚好和bean的名字一样
//获取类的类名
String tableName = cls.getSimpleName();
String sql=null;
if(SQL==null){
sql = "select * from " + tableName;}
else if(SQL!=null){
sql = "select * from " + tableName
+SQL;}
System.out.println(sql);
conn = DbUtil.getConn();
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
//获取bean中的所有属性名
Field []fs = cls.getDeclaredFields();
while(rs.next()) {
//通过反射创建出cls对象的实例
Object obj = cls.newInstance();
for(int i = 0;i < fs.length;i ++) {
//bean中的属性名
String fname = fs[i].getName();
//获取bean中的属性的类型
Class type = fs[i].getType();
Object o = rs.getObject(fname);
//System.out.println(o);
//将属性对应的set方法名拼接出来
//取出属性名的首字母,将它变成大写
String methodName = "set"
+ fname.substring(0,1).toUpperCase()
+ fname.substring(1);
//System.out.println(methodName);
//通过反射调用set方法
Method m = cls.getDeclaredMethod(methodName, type);
System.out.println(m);
m.invoke(obj, o);
}
list.add((T)obj);
}
return list;
}
public static Integer countAdd;
public Integer add(T t) throws Exception{
Connection conn = null;
PreparedStatement pstm = null;
Integer count = -1;
String tableName = t.getClass().getSimpleName();
//System.out.println(tableName);
StringBuilder sql = new StringBuilder("insert into "
+ tableName + " (");
//取出t对象中的所有的属性名
Field []fs = t.getClass().getDeclaredFields();
String dot = "";
for(int i = 0;i < fs.length;i ++) {
sql.append(dot);
String fname = fs[i].getName();
sql.append(fname);
dot = ",";
}
sql.append(")values(");
String dot1 = "";
for(int i = 0;i < fs.length;i ++) {
sql.append(dot1);
sql.append("?");
dot1 = ",";
}
sql.append(")");
//System.out.println(sql);
conn = DbUtil.getConn();
pstm = conn.prepareStatement(sql.toString());
//调用t对象中所有的get方法
for(int i = 0;i < fs.length;i ++) {
//取出属性名
String fname = fs[i].getName();
//拼接get方法
String methodName = "get"
+ fname.substring(0,1).toUpperCase()
+ fname.substring(1);
//取出需要调用的方法
Method m = t.getClass().getDeclaredMethod(methodName);
//反射调用get方法
Object val = m.invoke(t);
System.out.println("新增的数据是:" + val);
//设置占位符
pstm.setObject(i + 1, val);
}
count = pstm.executeUpdate();
countAdd=count;
System.out.println(countAdd);
return count;
}
public static Integer countUpdate;
public Integer update(T t) throws Exception{
Connection conn = null;
PreparedStatement pstm = null;
Integer count = -1;
StringBuilder sql = new StringBuilder("update ");
//获取表名,就是获取t对象的类名
Class cls = t.getClass();
String tableName = cls.getSimpleName();
sql.append(tableName + " set ");
//获取t对象的所有属性名
Field[]fs = cls.getDeclaredFields();
//每个javabean的第一个属性必须是id
//下标是从1开始的,也就是排除了id属性
String dot = "";
//定义一个List存放所有的修改的值
List<Object>params = new ArrayList<Object>();
for(int i = 0;i < fs.length;i ++) {
Field f = fs[i];
//获取属性名
String fname = f.getName();
System.out.println("下标为"+i+"的属性名:"+fname);
//调用getXXX方法来获取t中的属性值
String methodName = "get"
+ fname.substring(0,1).toUpperCase()
+ fname.substring(1);
System.out.println(methodName);
//通过反射获取方法对象
Method m = cls.getDeclaredMethod(methodName);
//反射调用getXXX方法
Object obj = m.invoke(t);
//当获取到的值不为空时,才能进行修改
if(obj != null) {
sql.append(dot);
sql.append(fname + " = ? ");
dot = ",";
params.add(obj);
}
}
//将id也放到params容器中去
// Method m1 = cls.getDeclaredMethod("getId");
Method m1 = cls.getDeclaredMethod(
"get"
+fs[0].getName().substring(0,1)
.toUpperCase()
+ fs[0].getName().substring(1));
Object id = m1.invoke(t);
params.add(id);
//拼接where条件
fs[0].getName();
System.out.println("这个表的第一列的列名"
+ "(一般都为编号名)为:"+fs[0].getName());
// sql.append("where id = ? ");
sql.append("where "+fs[0].getName()+" = ? ");
System.out.println(sql);
conn = DbUtil.getConn();
pstm = conn.prepareStatement(sql.toString());
//设置占位符的值
for(int i = 0;i < params.size();i ++) {
pstm.setObject(i + 1, params.get(i));
}
System.out.println("这时执行的修改语句为:"+sql);
count = pstm.executeUpdate();
countUpdate=count;
return count;
}
// public Integer delete(Integer id){
// return 0;
// }
//万能Dao删除方法
public static Integer countDelete;
public Integer delete(Integer id,Class cls)
throws Exception{
Connection conn = null;
PreparedStatement pstm = null;
Integer count = -1;
String tableName = cls.getSimpleName();
Field[]fs = cls.getDeclaredFields();
for(int i = 0;i < fs.length;i ++) {
Field f = fs[i];
//获取属性名:fs[i].getName();
String fname = f.getName();
System.out.println("下标为"+i+"的属性名:"+fname);
//调用getXXX方法来获取t中的属性值
String methodName = "get"
+ fname.substring(0,1).toUpperCase()
+ fname.substring(1);
System.out.println(methodName);
//通过反射获取方法对象
Method m = cls.getDeclaredMethod(methodName);
//反射调用getXXX方法
//当获取到的值不为空时,才能进行修改
}
// String sql = "delete from " + tableName
// + " where id = ?";
String sql = "delete from " + tableName
+ " where "+fs[0].getName()+" = ?";
conn = DbUtil.getConn();
pstm = conn.prepareStatement(sql);
pstm.setInt(1, id);
count = pstm.executeUpdate();
countDelete=count;
return count;
}
public static void main(String[] args) throws Exception {
// Dao ud= new Dao();
//
//// User u = ud.selectByActAndPwd("1","1",null);
// User u = ud.selectByActAndPwd(null,null,1);
// System.out.println(u.getAct());
// System.out.println(u.getId());
// List<Object> list1;
//
// list1 = D.selectAll(Comments.class);
//
//
//
// for(Object o : list1) {
// Comments C= (Comments)o;
// System.out.println(C.getCommentsId());
// System.out.println(C.getId());
// System.out.println(C.getCommentsId());
}
}

package com.SSHC.dao;
import com.SSHC.bean.Dminfo;
public class DminfoDao extends BaseDao<Dminfo> {
}

package com.SSHC.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
public class DbUtil {
private static String driverName;
private static String url;
private static String user;
private static String pwd;
static {
//读取properties文件
Properties prop = new Properties();
//将db.properties文件读取到内存中去
InputStream is = DbUtil.class.getClassLoader()
.getResourceAsStream("db.properties");
//加载内容
try {
prop.load(is);
//读取内容
driverName = prop.getProperty("dn");
url = prop.getProperty("url");
user = prop.getProperty("un");
pwd = prop.getProperty("up");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取数据库连接对象的方法
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url,user,pwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(ResultSet rs,PreparedStatement pstm
,Connection conn){
try {
if(rs != null) {
rs.close();
}
if(pstm != null) {
pstm.close();
}
if(conn != null) {
conn.close();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}

dn=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/firstjsp?useUnicode=true&characterEncoding=utf-8
un=root
up=root



<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base hreff="<%=basePath%>">
<title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="css/danmuplayer.css">
<script type="text/javascript" srcc="js/jquery-1.11.0.js"></script>
<script type="text/javascript" srcc="js/danmuplayer.js"></script>
<script type="text/javascript">
$(function(){
$('#danmup').danmuplayer({
src: 'a.mp4',//视频的路径
width: 1200,//屏幕宽度1200px
height: 600,//屏幕高度600px
speed: 20000,//弹幕飘过的速度,穿过视频屏幕的时间
danmuss: {},
default_font_color: '#FFFFFF',//默认的弹幕颜色
font_size_small: 50,//小号弹幕字体大小
font_size_big: 75,//大号弹幕字体大小
opacity: '1',//弹幕字体的透明度,为0则完全透明
top_botton_danmu_time: 6000,//底部及顶部弹幕存留的时间
url_to_get_danmu: 'ds?method=query',//获取所有弹幕信息的url
url_to_post_danmu: 'ds?method=save'//保存弹幕信息的url
});
})
</script>
</head>
<body>
<div id="danmup"></div>
</body>
</html>











——————————————————

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。