web.xml中配置过滤器处理中文乱码问题:
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encoding
*
拦截器使用场景:
- 解决乱码问题
- 解决权限验证问题
HTTP 消息结构
1. 客户端请求信息:请求行,请求头,空行,请求数据
请求方法 URL 协议版本 --请求行
头部字段名... --请求头部
--空行
--请求数据
2. 服务器端响应信息:状态行,消息报头,空行,响应正文
HTTP/1.1 200 OK --状态行
Date:...
Content-Type:...
Content-Length:... ---消息报头
--空行
...
--响应正文
HTTP状态码分类
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
css中url的相对路径
- / 表示根目录(最原始开头的那个目录);
- ~/ 表示虚拟站点根目录;
- ../ 表示上级目录(当前目录的上一级),相当于在当前目录按了一次后退键;
- ../../ 表示上上级目录;
- ./ 当前目录(当前目录下)。
背景图片平铺:
background-size:cover;
css常用块级元素:
div
form
h1
hr
p
table
ul
css常用内联元素
a
b
br
font
i
img
input
select
label
span
strong
textarea
垂直居中
line-height:80px;
水平居中(div中设置)
text-align:center;
去除列表前面小点
list-style:none;
Core标签库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSP中page、request、session、 application的作用域
- application:作用是保存公共信息
范围:从服务器开始执行服务,到服务器关闭为止
服务器启动到停止这段时间
- session:主要用于保存用户的各种信息
范围:用户持续和服务器连接的时间
HTTP会话开始到结束这段时间
- request:
范围:一个HTTP请求开始到结束这段时间
- page:
范围:当前页面从打开到关闭这段时间
只在同一个页面中有效
* request和page的区别:
一个request可以包含多个page页
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%
String basePath = request.getContextPath();//根路径/ssm01
%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false" %>
tcl运行命令
source ../test/test.tcl
bootstrap样式的引用
z-index指定堆叠顺序
placeholder="默认值,占位符"
background:-webkit-gradient()背景渐变属性
clearTimeout(time);
time = setTimeout(function() {
box.find(".cont").hide();
box_hide();
}, 50);
session.removeAttribute("goodkind");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
Date birthday=new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("date"));
HttpSession session = request.getSession();
session.setAttribute("user", user);
request.getParameter("username");request.getAttribute("username");的区别:
setAttribute()
getParameter()
getAttribute()
当两个web组件(比如说jsp页面)为链接关系时(比如表单提交),用request.getParameter()方法
当两个Web组件之间为转发关系时,转发目标组件通过
getAttribute()方法来和转发源组件共享request范围内的数据,此时需先在1.jsp中setAttibute(),然后在2.jsp中getAttribute()
request.setAttribute() 和 getAttribute() 方法传递的数据只会存在于Web容器内部
request.getParameter() 方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据
转发和重定向区别:
- 前后两个页面有数据传递 : 请求转发
- 无数据传递 : 重定向。
分页计算总页数算法:
int totalPageNum = (totalRecord + pageSize - 1) / pageSize;
得到路径: request.getRequestURI():
得到参数: request.getQueryString() :
加载数据库配置信息
loadConfig(){
InputStream in = JdbcUtil.class.getResourceAsStream("/jdbc.properties");
Properties prop = new Properties();
prop.load(in);
USERNAME = prop.getProperty("jdbc.username");
PASSWORD...
}
catch(SQLException e){
throw new RuntIMEexception("查询数据异常",e);
}
获取url="a/aa?param1=1¶m2=5..."后参数:
controller中,request.getParameter("param1");
文件上传下载
截取字符串
String str = "e\adb\wda\wd\test.jsp"wda";
int beginIndex = str.lastIndexOf("\\");
int endIndex = str.lastIndexOf("\"");
String str2 = str.substring(beginIndex,endIndex);
request.getSession().setAttribute("","");
response.sendRedirect("index.jsp");
drop table if exists a;
单例模式:
- 饿汉模式:
public class Singleton{
private Singleton(){
}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
- 懒汉模式:
public class Singleton2{
private Singleton2(){
}
private static Singleton2 instance;
public static synchronized Singleton2 getInstance(){
if(instance==null){
instance = new Singleton2();
}else{
return instance;
}
return instance;
}
}
懒汉模式和饿汉模式区别:
- 懒汉模式特点是加载类时比较快,但是运行时获取对象的速度比较慢,线程不安全(加上synchronized就是线程安全的)
- 饿汉模式的特点是加载类时比较慢,但是运行时获取对象的速度比较快,线程安全
java反射:
1.java中两种不是对象:静态成员,基本数据类型类
类是java.lang.Class的实例对象
2.Foo foo1 = new Foo();//foo1即Foo的实例对象
3.Foo又是Class的实例对象,Class的实例的表示方法:
1)Class c1 = Foo.class;//隐含的静态成员变量class
2)Class c2 = foo1.getClass();//已知该类对象时
3)Class c3 = Class.forName("com.asiainfo.Foo");//全类名
通过c1 c2 c3创建Foo的实例对象
Foo foo = (Foo)c1.newInstance();
4.Class.forName("com.asiainfo.Foo")
是一个动态加载类,编译时加载类是静态加载类,运行时刻加载的类是动态加载类
new创建对象,是静态加载类,在编译的时候就需要加载所有可能使用到的类
记得设置表单method方法,默认get,后台获取不到参数,设成post即可获取参数
- TODO
- 注册表单验证ajax
- 弹出层
- 侧边栏
- 数据库乱码
- 文件上传
- 图片显示
html行内元素(inline),块级元素(block)
inline:相邻行内元素排成一行,宽度随元素内容变化
宽高无效
margin padding水平方向有效(边距效果),竖直方向无效
block:独占一行,宽度默认填充父元素宽度
width,height有效
margin,padding有效
常见行内,块级元素:
inline:a br img input label span button
block:div form h1 hr menu p table ul
去掉下划线:
text-decoration:none;
去掉无序列表前面圆点:
list-style:none;
无序列表由纵向变为横向:
float:left;
VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是65535个字节
mysql中文乱码问题:
1.查看默认的编码格式:
mysql>show variables like "%char%";
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
mysql>set names utf8;
作用:SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';
2.查看数据库的编码格式:
mysql>show create database test;
3.修改数据库编码格式:
mysql>ALTER DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
4.查看创建表语句及其编码格式:
mysql>show create table student;
5.修改表的编码格式:
mysql>ALTER TABLE admin DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CLIENT SECTION
[mysql]
default-character-set=utf8(作用跟set names utf8;一样,都是将client,connection,results字符集由Latin1转为utf8,不同的是set names utf8;仅仅对当前操作有效,重启mysql服务器恢复默认字符集Latin1)
为避免乱码,建库建表时设置字符集为utf8:
建库:
CREATE DATABASE `test` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
建表:
CREATE TABLE `database_user` () ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql>\s mysql>status 都可以显示数据库字符集信息
set character_set_connection = 'utf8';改变编码集
注:*****创建数据库,表均已设置编码集为utf8时,如果还不能在cmd窗口写入中文,则检查一下cmd默认编码集,若为gbk,则应:mysql>set names gbk;此时写入的中文数据可以被cmd正确解释
判断数据库中是否存在对应用户:select count(*)...根据返回记录数确定是否存在
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%>
<%
String basePath = request.getContextPath();//根路径
%>
mybatis 数据库利用like进行模糊查询时,要使用concat合并查询条件
select * from user where name like concat('%',#{name},'%')
注意::::**************
- 当jsp页面向后台传递参数时可能出现乱码错误,是由于页面编码为ISO-8859-1,而后台需要接收编码为UTF-8的参数,此时直接接收就会出现乱码
- 解决方法如下:
String str1 = 传来的参数;
String str2 = new String(str1.getBytes("ISO-8859-1"),"utf-8"); //转码UTF8
提示窗:alert("确认");
确认窗:confirm("确认,取消");
JSONArray obj=JSONArray.fromObject(industrys);
String jsonStr = json.toString();
return jsonStr;
$.each():
$("#myTb").remove();
$("#myTb").append(tbBody);
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
InputStream is = new InputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = null;
while((info=br.readLine())!=null){
System.out.println(info);
}
window.location.reload();
window.location.href = "<%=basePath%>/user/login";
TODO:
- 安全性:登录验证,密码加密√
- 表格局部刷新√
- 修改个人信息
- 管理系统
- 批量删除√
- 快捷键
- 多线程
- XML解析
- Json√
- 文件上传下载√
- 框架原理
- JVM
- 分页√
- http协议
- ajax表单验证√
- 序列化
- 哈希
- 算法
- 数据结构
- 监听器√
- 过滤器√
- 拦截器√
- 异常机制
- 网络爬虫
- 网络支付
- java反射机制
- TCP/IP
默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚。
spring aop 异常捕获原理:
- 被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过配置来捕获特定的异常并回滚
换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚
解决方案:
方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理
方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)
/* select :获取下拉框选项值
* option为获取到的点击下拉框的值
*/
var option = $("#option option:selected").val();
text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果
块阴影效果:
-webkit-box-shadow:0 0 10px #0CC;
-moz-box-shadow:0 0 10px #0CC;
box-shadow:0 0 10px #0CC;
文本阴影效果:
text-shadow: 0px 0px 5px blue;
$("#tbody").children().remove();
$("#tbody").empty();这两种方式效果相同,都可以把table清空,remove()方法直接将table的孩子节点删除,empty()方法是将table置空,并未删除节点
ajax写入表格页面拼接方法:
success:function(data){
/* $("#tbody").children().remove(); */
$("#tbody").empty();/*两种方式一样*/
$.each(data,function(i,value){
var status = value.status== 0 ? "未支付" : "已支付";
var element = ""+value.id+" "+"![](+value.imgUrl+)"+" "
+value.pro_name+" "+value.price+" "
+value.count+" "+value.sum+" "
+value.order_time+" "+status+" "
+"删除"+" ";
$("#tbody").append(element);
});
},
css样式字体加粗:
font-weight: bold
blockUI插件
//插件
$.blockUI();
$.unblockUI();
ModelAndView默认使用forward方式
public ModelAndView index(){
ModelMap model = new ModelMap();
model.addAttribute("test", "test");
ModelAndView mv = new ModelAndView("index", model);
mv.addObject("test2", "test2");
return mv;
}//addAttribute()和addObject()方法都是设定model对象
HttpServletRequest request = ServletActionContext.getRequest();
js禁用鼠标滚轮滑动:
function disabledMouseWheel() {
if (document.addEventListener) {
document.addEventListener('DOMMouseScroll', scrollFunc, false);
}//W3C
window.onmousewheel = document.onmousewheel = scrollFunc;//IE/Opera/Chrome
}
function scrollFunc(evt) {
return false;
}
-
js禁止滚动条移动:
参考博文
-
隐藏纵向滚动条
document.body.parentNode.style.overflowY ="hidden";
-
开启纵向滚动条
document.body.parentNode.style.overflowY ="auto";
如何向弹出层传值:
通过js事件(如点击onclik="a(x,y)")给方法传递页面参数,然后通过html()或attr()等方法向弹出窗口写入数据
cookie session学习网址:
参考博文
jQuery获取图片路径:
$("#img2").attr("src");
java中length,length(),size()区别
- java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.
- java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.
- java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!d
display visibility区别:
- display:none -->元素跟着浮动,不会占据原有位置
- visibility:hidden -->隐藏元素,但仍占据原有位置,不会浮动
加载数据库配置信息:
InputStream is = JdbcUtil.class.getResourceAsStream("/jdbc.properties");
Properties prop = new Properties();
prop.load(is);
USERNAME = prop.getProperty("jdbc.username");
...
input: style="width: 50px;height: 33px;color: white;background-color: red;border:0 white solid;"
show create table;
js正则表达式:
参考博文
web.xml
灰色:#f5f5f5
蓝色:#007fff
JOptionPane类提示框的一些常用的方法:
参考博文
- / 服务器的根目录
- path 项目的根目录
- url-pattern 处必须以/开头,表示项目的根目录
jQuery模态窗口!!!
过滤器(Filter)、拦截器(Interceptor)、监听器(Listener):
- 过滤器:字符编码过滤,权限访问控制(用户登录与否),过滤敏感词汇等,主要是对HttpServletRequest,HttpServletResponse进行拦截检查
- 监听器:application,session,request对象监听器监听客户端,服务器端请求,操作等
- 拦截器:
session的销毁有3种情况:
- session超时,web.xml配置:
120
- 手工使session失效
public void invalidate();//使session失效方法。session.invalidate();- 服务器重新部署
重写equals方法:
@Override
public boolean equals(Object obj){
if(obj==this){
return true;
}
if(obj==null){
return false;
}
if(!(obj instanceof Course)){
return false;
}
Course course = (Course)obj;
if(this.name==null){
if(course.name==null){
return true;
}else{
return false;
}
}else{
if(this.name.equals(course.name)){
return true;
}else{
return false;
}
}
}
set需要重写hashcode方法
Bootstrap CDN
列偏移
col-md-offset-4
注意页面传值类型!!!
xml配置错误:
The entity name must immediately follow the '&' in the entity reference.
解决办法:将&替换成and
attempted to return null from a method with a primitive return type (int).
解决办法:解决这个问题,是当查出来为NULL时,结一个默认值,如:0。
- mysql:
SELECT IFNULL(MAX(SORT),0)AS sort FROM web_d_info- oracle:
SELECT nvl(MAX(SORT),0) as sort FROM web_d_info
sqlJAVA
Cannot load excludes configuration file "/WEB-INF/decorators.xml" as specified in "sitemesh.xml" or "sitemesh-defaul : decorators.xml名称和位置不能放错
WEB-INF目录下jsp不能直接被外部访问,所以应使用方法访问路径
- 把页面资源文件只能放在webroot或WebContent下面,如 CSS,JS,image等.放在WEB-INF下直接引用不了,可以通过统一的拦截器拦截静态资源,当有请求过来时,forward至静态源。。
- 只能用转发方式来访问WEB-INF目录下的JSP,不用采用重定向的方式请求该目录里面的任何资源。
- WEB-INF目录下文件访问资源文件时,可以忽略WEB-INF这一层目录.如index.jsp 要用css目录里的一个css文件. 这样就行了。
- WEB-INF目录下的文件之间如何访问呢.可以通过action和servlet转发跳转