文章目录
-
- 1、营造开发环境:
-
- 1.1创建项目:crm-project
-
- 1.1.1设置JDK.
- 1.1.2创建工程:crm
- 1.1.3补充目录结构:
- 1.1.4设置编码格式:UTF-8
- 1.1.5数据库编码设置
- 1.1.设置6字符集编码
- 2.spring application配置文件知识点
-
- 2.1.applicationContext-datasource.xml
-
- 2.1.1.sqlsessionFactory他是数据库
- 2.1.2为什么使用127.0.0.1不用localhost
- 2.2 applicationContext-mvc.xml
-
- 2.2.一起加载服务器servlet实例 servlet会加载mvc的配置文件
- 2.2.2拦截器
- 2.3 applicationContext.xml
-
- 2.3.1 监听器加载service层和dao层配置文件
- 2.3.2服务器启动配置文件的加载顺序
- 2.4 pom.xml
-
- 2.4.1 `和`
- 2.4.2maven编译配置文件
- 3.tomcat和idea
-
-
- 3.1idea如何放置项目?tomcat webapps下的
- 3.2使用127.0.01ip地址
- 3.3.默认设置恢复代码提示
-
- 4.jsp
-
- 4.1 jquery
-
- 4.1.1 在必要时使用标签保存数据:
- 4.1.2 jsp操作原理:
- 4.1.3 ajax $.each( )的用法
- 4.1.4 submit发送同步,button通过绑定 发送异步
- 4.1.5 jquery小结
- 4.1.6 ajax
- 4.1.7 jquery事件函数的用法:
- 4.2 web
-
- 4.2.1 cookie的参数传输
- 4.2.2 cookie和session
- 4.2.3 window.location.href
- 4.2.4 jsp如何在浏览器上显示?
- 4.2.5 jsp和html的编码区别
- 4.2.6 `浏览器只能解决网页,json字符串只能由ajax和js来解决`
- 4.2.7 index.jsp自带根目录base的标签的
- 4.2.8 html中就加id 等html标签 就不要加js 的标签
- 4.2.9 同步请求 (页面跳转)
- 4.2.10 入口函数在加载整个页面后执行
- 4.2.11 web的作用域
- 4.2.12 s e s s i o n S c o p e . s e s s i o n U s e r . n a m e 和 {sessionScope.sessionUser.name}和 sessionScope.sessionUser.name和{sessionUser.name}区别
- 4.3. bootstrpt
-
- 4.3.1 页面切割技术:`和:` ``
和:``
- 4.3.2 模态窗口
-
- 模态窗口:
- 显示和隐藏控制模式窗口:
- 模式窗口的意义:
- 4.3.3 正则表达式
- 4.3.4 日历
- 4.3.5 日历用法
- 4.3.6 分页插件
- 4.3.7
- 4.3.1 页面切割技术:`和:` ``
1,搭建开环境: 1)创建项目:crm-project 设置JDK. 创建工程:crm 补全目录结构: 设置编码格式:UTF-8 2)添加jar包:添加依赖—参考课件. 3)添加配置文件:参考课件. 4)添加静态页面资源: webapps |->stumgr |->crm |->.html,.css,.js,.img test.jsp |->WEB-INF |->web.xml |->classes |->lib *web应用根目录下的内容都是不安全的,外界可以通过url直接访问; 所以,一般为了数据的安全,都会把页面放到WEB-INF下,因为WEB-INF目录下的资源是受保护的,外界不能直接访问。
1,搭建开发环境:
1.1创建项目:crm-project
1.1.1设置JDK.
1.1.2创建工程:crm
1.1.3补全目录结构:
1.1.4设置编码格式:UTF-8
1.1.5数据库编码设置
1.1.6字符集编码的设置
需要设置字节码的
- 编码
- 解码
- 传输数据的字节码
2.spring application配置文件知识点
2.1.applicationContext-datasource.xml
2.1.1.sqlsessionFactory他是一个数据库
2.1.2为什么使用127.0.0.1不用localhost
localhost只是tomcat配置的一个映射,localhost是可以修改的有风险
2.2 applicationContext-mvc.xml
2.2.1服务器一起东就加载servlet实例 servlet会加载mvc的配置文件
<load-on-startup>1</load-on-startup> 服务器一起东就加载servlet实例
<!-- Spring mvc分发servlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.2.2拦截器
a)提供拦截器类:implements HandlerInterceptor{ --pre --post --after } b)配置拦截器:springmvc.xml
能通过return ture 不能通过return false
配置拦截器
<mvc:interceptors>
<mvc:interceptor>
拦截的内容
<mvc:mapping path="/settings/**"/>
<mvc:mapping path="/workbench/**"/>
放行的内容 有一个东西即要放行也要拦截,优先进行放行
<mvc:exclude-mapping path="/settings/qx/user/toLogin.do"/>
<mvc:exclude-mapping path="/settings/qx/user/login.do"/>
<bean class="com.bjpowernode.crm.settings.web.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<mvc:mapping path="/settings/**"/>
拦截的是url
settings/* 拦截一层目录 settings/*/login.jsp还是没拦截到
settings/** 拦截settins下所有目录
2.3 applicationContext.xml
2.3.1 监听器加载service层和dao层的配置文件
(applicationContext.xml,applicationContext-datasource.xml)
监听器在服务器一启动是就会进行加载
2.3.2服务器启动对配置文件的加载顺序
服务器一启动就用监听器加载applicationContext.xml
applicationContext.xml
加载aplicationContext-datasource.xml
aplicationContext-datasource.xml
会加载mybatis-config.xml
dispatcherservlet
一启动就会加载application-mvc.xml
配置文件
2.4 pom.xml
2.4.1 <groupId>和<artifactId>
2.4.2maven对配置文件的编译
maven默认只会编译java的源文件,不会编译xml配置文件
加上这个就会编译xml配置文件了
3.tomcat和idea
3.1idea项目是如何放在tomcat webapps下的
tomcat
webapps |->stumgr |->crm |->.html,.css,.js,.img test.jsp |->WEB-INF |->web.xml |->classes |->lib
-
maven会把
java代码,配置文件
编译好放在classes
, 把依赖jar包
放在lib
目录下 -
静态资源放在webapp下,会直接部署到tomcat webapps下的crm项目中根目录中
-
页面要放在webapp web-inf下
-
在crm根目录中能直接被访问,web-inf下的资源是受保护的不能直接访问,
-
要通过controller跳转才能访问,到了controller后我们就能掌握主动权,对用用户进行验证
-
为什么不将image,jquery放入web-inf下,这些东西放在web-inf下,因为要我们通过controller转发才能实现到页面上会非常麻烦,用一个要跳一个会非常麻烦
3.2使用127.0.01ip地址
3.3恢复代码提示的默认设置
4.jsp
4.1 jquery
4.1.1 使用标签保存数据,以便在需要的时候能够获取到这些数据:
-
给标签添加属性:
如果是表单组件标签,优先使用value属性,只有value不方便使用时,使用自定义属性;
如果不是表单组件标签,不推荐使用value,推荐使用自定义属性。
-
获取属性值时:
如果获取表单组件标签的value属性值:dom对象.value jquery对象.val()
如果自定义的属性,不管是什么标签,只能用:jquery对象.attr(“属性名”);
不加引号会认为是变量,加了才认为是字符串
var activityId='${requestScope.activity.id}';
//删除活动备注
$("#deleteActivityRemark").click(function () {
//获得自己创建的属性的值
var id=$("#deleteActivityRemark").attr("remarkId");
var activityId='${requestScope.activity.id}';
<a class="myHref" remarkId="${remark.id}" id="deleteActivityRemark" ><span class="glyphicon glyphicon-remove" style="font-size: 20px; color: #E6E6E6;"></span></a>
4.1.2 jsp的运行原理:
- xxx.jsp:
- tocmat中运行: 把xxx.jsp翻译成一个servlet, 运行servlet,运行的结果是一个html网页 把html网页输出到浏览器
- html网页在浏览器上运行: 先从上到下加载html网页到浏览器,在加载过程中,运行前端代码 当页面都加载完成,再执行入口函数和js.
- 把页面片段显示在动态显示在页面中:
- 选择器.html(htmlStr):覆盖显示在标签的内部
- 选择器.text(htmlStr):覆盖显示在标签的内部
- 选择器.append(htmlStr):追加显示在指定标签的内部的后边
4.1.3 ajax $.each( )的用法
success:function (data) {
//显示总条数
//$("#totalRowsB").text(data.totalRows);
//显示市场活动的列表
//遍历activityList,拼接所有行数据
var htmlStr="";
$.each(data.activityList,function (index,obj) {
htmlStr+="<tr class=\"active\">";
htmlStr+="<td><input type=\"checkbox\" value=\""+obj.id+"\"/></td>";
htmlStr+="<td><a style=\"text-decoration: none; cursor: pointer;\" οnclick=\"window.location.href='detail.html';\">"+obj.name+"</a></td>";
htmlStr+="<td>"+obj.owner+"</td>";
htmlStr+="<td>"+obj.startDate+"</td>";
htmlStr+="<td>"+obj.endDate+"</td>";
htmlStr+="</tr>";
});
$("#tBody").html(htmlStr);
htmlStr+=“<tr class=“active”>”; 在"" 双引号中加 双引号 要在里面的双引号中 加上
\
" 进行转义>
htmlStr+=“”+obj.owner+“”; 在"" 双引号中加
"+ +"
表示 obj.owner 不是一个字符,而是数据
4.1.4 submit发送同步,button通过绑定 发送异步
<input type="submit" value="发送同步请求">
<input type="button" id="queryBtu" value=" 通过id创建一个jquery对象绑定按钮,发送异步请求">
4.1.5 jquery小结
<script type="text/javascript">
$(function () {
$("#loginBtu").onclick(function () {
var loginAct =$.trim ($("#loginAct").val());
var loginPwd =$.trim( $("#loginPwd").val());
var isRemPwd = $("#isRemPwd").prop("checkbox");
})
})
</script>
-
trim
方法是去掉空格 -
使用jquery获取指定元素的指定属性的值: 选择器
.attr("属性名")
;//用来获取那些值不是true/false的属性的值. 选择器.prop("属性名")
;//用来获取值是true/false的属性的值.例如:checked,selected,readonly,disabled等。 -
jquery中判断只有
==和!=
,因为是弱语言所以没有equel -
后台放送过去的是一个json(应该是
returnObject
对象自动变json
) -
(前端ajax定义好发送的就是json)后台接受的也是一个json
$("#msg").html(data.message);
$("#msg").text(data.message);
-
html即能写文本信息也能写标签信息
-
text 只能写标签信息
4.1.6 ajax
loginAct:loginAct, loginPwd:loginPwd, isRemPwd:isRemPwd
这种是不标准的未加双引号
//给"登录"按钮添加单击事件
$("#loginBtn").click(function () {
//收集参数
var loginAct=$.trim($("#loginAct").val());
var loginPwd=$.trim($("#loginPwd").val());
var isRemPwd=$("#isRemPwd").prop("checked");
//表单验证
if(loginAct==""){
alert("用户名不能为空");
return;
}
if(loginPwd==""){
alert("密码不能为空");
return;
}
//显示正在验证
//$("#msg").text("正在努力验证....");
//发送请求
$.ajax({
url:"settings/qx/user/login.do",
data:{
"loginAct":loginAct,
"loginPwd":loginPwd,
"isRemPwd":isRemPwd
},
type:"post",
dataType:"json",
async:"false",
success:function (data) {
if(data.code=="1"){
//跳转到业务主页面
window.location.href="workbench/index.do";
}else{
//提示信息
$("#msg").text(data.message);
}
},
beforeSend:function () {
//当ajax向后台发送请求之前,会自动执行本函数;
//该函数的返回值能够决定ajax是否真正向后台发送请求:
//如果该函数返回true,则ajax会真正向后台发送请求;否则,如果该函数返回false,则ajax放弃向后台发送请求。
$("#msg").text("正在努力验证....");
return true;
}
});
});
4.1.7 jquery事件函数的用法:
- 选择器.click(function(){//给指定的元素添加事件 //js代码 });
- 选择器.click();//在指定的元素上模拟发生一次事件
4.2 web
4.2.1 cookie的参数传输
4.2.2 cookie和session
在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息
其实在浏览器关闭后,session并没有失效,正常来说一个session的存活时间是30分钟,也就是在不操作这个session的情况下,30分钟自动清除。可是实际中浏览器关闭,设置的session也会随之消失,这里的消失是他这个session的你找不到了,不是他没有了,因为在浏览器重新打开时,浏览器总会自动给你创建一个的新的session。session并不是唯一的,每个session都有自己的一个专属sessionId,这个sessionId在浏览器打开时创建,保存在浏览器的cookie中,浏览器关闭,cookie自动清除,sessionId丢失,之前的session找寻不到!
cookie不销毁也会这样
4.2.3 window.location.href
window.location.href = "settings/qx/user/toLogin.do";
4.2.4 jsp如何显示到浏览器上的
jsp就是一个servlet,先在tomcat运行,结果是一个html
4.2.5 jsp和html的编码区别
jsp默认是utf-8
html iso8859-1
4.2.6 浏览器只能解决网页,json字符串只能由ajax和js来解决
4.2.7 index.jsp在根目录下自带base的标签的
<%
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<base href="<%=basePath%>">
4.2.8 html中就加id 等html标签 就不要加js 的标签
4.2.9 同步请求 (页面跳转了)
同步请求的方式 有地址栏,form表单,超链接 ajax只有地址栏一个方式 window.loction.href
4.2.10 整个页面加载完才执行入口函数
也就是静态资源加载完后
<script type="text/javascript">
$(function () {
});
</script>
4.2.11 web的作用域
jsp作用域
1,把控制层(controller)代码中处理好的数据传递到视图层(jsp),使用作用域传递:
pageContext:用来在同一个页面的不同标签之间传递数据。
jsp的每个标签对应着一个类 如<c:if 就对应着一个类
request:在同一个请求过程中间传递数据。
session: 同一个浏览器窗口的不同请求之间传递数据。
或者是一个用户的范围内
application:所有用户共享的数据,并且长久频繁使用的数据。
4.2.12 s e s s i o n S c o p e . s e s s i o n U s e r . n a m e 和 {sessionScope.sessionUser.name}和 sessionScope.sessionUser.name和{sessionUser.name}区别
一个在指定的范围找 一个是在四个作用域所有的范围找
4.3. bootstrpt
4.3.1 页面切割技术:<frameset>和<frame>:
<div>和<iframe>:
1)不灵活效率低
<frameset>和<frame>:
<frameset>:用来切割页面.
<frameset cols="20%,60%,20%" rows="10%,80%,10%">
<frame>:显示页面.
<frame src="url">
<frameset cols="20%,60%,20%">
<frame src="url1" name="f1">
<frame src="url2" name="f2">
<frame src="url3" name="f3">
</frameset>
每一个<frame>标签就是一个独立的浏览器窗口。
<a href="url" target="f3">test</a>
2)<div>和<iframe>:
灵活效率高
<div>:切割页面。
<div style="height:10%;width=20%">
</div>
</div>
<iframe>:显示页面。
<div style="height:10%;width=20%">
<iframe href="url">
</div>
3,创建市场活动:
4.3.2 模态窗口
模态窗口:
模拟的窗口,本质上是<div>
的一个表单,通过设置z-index大小来实现的; z轴
初始时,z-index初始参数是<0,所以不显示; 需要显示时,z-index值设置成>0即可。
bootstrap来控制z-index的大小。
控制模态窗口的显示与隐藏:
1)方式一:通过标签的属性data-toggle
=“modal” 开启模态窗口 toggle切换 美工喜欢用
data-target=“模态窗口的id” 确定那个div是模态窗口
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#createActivityModal"><span class="glyphicon glyphicon-plus"></span> 创建</button>
2)方式二:通过js函数控制:程序员喜欢用的
选择器(选中div).modal(“show”);//显示选中的模态窗口 选择器(选中div).modal(“hide”);//关闭选中的模态窗口
$(function(){
$("#createActivityBtu").click(function () {
//这里可以编写js 进行一些初始化工作
// jquery转dom对象 $("#createActivityFrom") 转为 from标签
$("#createActivityFrom").get(0).reset();
//弹出创建市场的窗口,
$("#createActivityModal").modal("show");
});
<!-- data-toggle="modal" data-target="#createActivityModal" 没有这两