新建項目
新建maven開始項目的時候,會報錯,因為沒有webxml.
項目右擊-properties,projectfac--,先取消 dynamic。。。,apply然后重新點上
image.png
然后下面
點擊設置路徑
image.png
一、亂碼問題
- 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("http:// 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">
...