新建项目
新建maven开始项目的时候,会报错,因为没有webxml.
项目右击-properties,projectfac--,先取消 dynamic。。。,apply然后重新点上
然后下面
点击设置路径
一、乱码问题
- post乱码
- 1.1. 直接转换(麻烦,每个都要转换)
1. String loginacct = user.getLoginacct();
// 将乱码字符串按照错误的编码方式转换为原始的字节码序列
// byte[] bs = loginacct.getBytes("ISO8859-1");
// 将原始的字节码序列按照正确的编码转换为正确的文字即可。
// loginacct = new String(bs, "UTF-8");
- 1.2. 添加过滤器(一劳永逸)
<!-- 解决乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<servlet-name>springmvc</servlet-name>
</filter-mapping>
- get 乱码
tomcat服务器 server。xml
<Connector URIEndoding="UTF-8" connectionTime....
二. 利用 layer.jst 提示功能
login.jsp
<!-- 使用 layer提示功能 -->
<script src="layer/layer.js"></script>
if(loginacct == ""){
//alert("用户名为空");
<!-- 使用 layer提示功能 -->
layer.msg("用户登录账号不能为空,请输入", {time:2000, icon:5, shift:6}, function(){
});
return;
}
var userpswd = $("#userpswd").val();//loginacct 是 上面的id,唯一标识
// 表单 value 值不会为null,所以非空校验不能简单的 判断 !=null,而是用空字符串 “”
if(userpswd == ""){
//alert("密码为空");
<!-- 使用 layer提示功能 -->
layer.msg("用户登录密码不能为空,请输入", {time:2000, icon:5, shift:6}, function(){
});
return;
}
三. 错误回显(因为ajax线程都没有刷新,所以错误信息还在)
// 提交表单
//alert("提交表单");
//$("#loginForm").submit();
// 使用AJAX提交数据
var loadingIndex = null;
$.ajax({
type : "POST",
url : "doAJAXLogin",
data : {
"loginacct" : loginacct,
"userpswd" : userpswd
},
beforeSend : function(){
loadingIndex = layer.msg('处理中', {icon: 16});
},
success : function(result) {
// 成功了就关闭loadin效果
layer.close(loadingIndex);
// 对象.属性
if (result.success) {
// 登录成功,跳转到主页面
window.location.href = "main";
} else {
layer.msg("用户登录账号或密码不正确,请重新输入", {time:2000, icon:5, shift:6}, function(){
});
}
}
});
DIspatchContrller
/**
* 使用 ajax 解决回显和闪烁
* @param user
* @param session
* @return
*/
@ResponseBody // 对象无法在网路中传递,转换成字符串
@RequestMapping("/doAJAXLogin")
public Object doAJAXLogin(User user, HttpSession session) {
AJAXResult result = new AJAXResult();
User dbUser = userService.query4login(user);
if ( dbUser != null ) {
result.setSuccess(true);
} else {
result.setSuccess(false);
}
return result;
}
/**
* 主页面
* @return
*/
@RequestMapping("/main")
public String main() {
return "main";
}
封装 AJAXResult结果,方便调用
package com.lsy.crowdfunding.bean;
public class AJAXResult {
private boolean success;
private Object data;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
至此,解决了页面美化提示,用户错误信息不刷新(方便看用户名错没错),跳转没有黑屏三个问题
四、理解 JSON、
<script>
// JSON : JavaScript Object Notation
function Student() {
//this.sname = "zhangsan";
//this.age = 20;
}
// JS支持给对象动态添加属性
var s = new Student();
s.sname = "lisi";
var s1 = new Student();
// 声明JSON对象
var obj = {name:"lisi", age:20};
var array = [{}, {}];
//obj.name = "zhangsan";
//alert(array.length);
// JSON 字符串 : 将后台对象按照JSON格式转换为字符串输出到浏览器中,让JS当成对象来处理
</script>
五、js资源等路径问题
绝对路径:不可改变的路径
本地绝对路径:增加盘符的路径(e:/test/test.html)
网络绝对路径:增加协议,IP地址,端口号的路径(http://localhost:8080/test/test.html)
相对路径:可以改变的路径,但是以基准路径为参考,查找其他路径
默认情况下,相对路径的基准路径是以当前资源的访问路径为基准
路径以斜杠开头,表示的特殊的相对路径,在不同的场景中,相对的位置会发生变化。
url : http://localhost:8080/atcrowdfunding-web/test/test.html
前台路径:<a href=”/sssss”><img src=””>
相对服务器的根 : http://localhost:8080/sssss
后台路径:forward(”/user.jsp”), xml
相对web应用的根:http://localhost:8080/atcrowdfunding-web/user.jsp
使用监听器来解决路径
直接的方法:获取项目的名称路径,在资源前加上
pageContext.request.contextPath
在项目启动时候,用户使用之前,利用监听器获取到路径APP_PATH,然后放在资源签
第一步:新建监听器类
package com.lsy.atcrowdfunding.web;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServerStartupListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
// web 应用初始化时候会被监听到
System.out.println("// web 应用初始化时候会被监听到");
// 将web应用名称(路径)保存到application范围中
ServletContext application = sce.getServletContext();
String path = application.getContextPath();
application.setAttribute("APP_PATH", path);
}
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
}
第二步:在 web.xml中注册监听器
<!-- 使用自定义监听器 -->
<listener>
<listener-class>com.lsy.atcrowdfunding.web.ServerStartupListener</listener-class>
</listener>
第三步:在页面引入 APP_PATH(监听器自己命名的,可以随意修改,建议)
<link rel="stylesheet" href="${APP_PATH}/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="${APP_PATH}/css/font-awesome.min.css">
<link rel="stylesheet" href="${APP_PATH}/css/main.css">
...