由於一些不可描述的原因,第一次參加了學校的服務外包比賽並做後臺的工作,也是第一次做web,有一種剛學會開車就要上高速的趕腳。前後一個月的時間,學到了一點。下面來總結一些問題還有一些個人的感想。
項目主要使用JSP+Servlet+JavaBean(真的有點繁瑣)開發社區家政服務系統,包括居民對服務的預約、服務商的訂單處理等。接下來是遇到的幾個問題
1.後臺獲取JSP頁面中URL/表單的參數是亂碼
JSP頁面代碼如下:
<a target="_self" href='${pageContext.request.contextPath}/serviceAction?id=保潔'>預約</a>
<form action="../userorderAction" method="get" name="myform">
<input type="text" name="username" value="姓名" />
</form>
上述情況下,取到的id和value均爲亂碼
具體原因:對於表單中post方式提交的數據,只要在接受的頁面中設置request.setCharacterEncoding("要轉換成的編碼"),即可對客戶端請求進行重新編碼;對於URL提交的數據和表單中get方式提交的數據,上述方法行不通,因爲在Tomcat中,默認情況下使用ISO-8859-1對URL提交的數據和表單中get方式提交的數據進行重新編碼(解碼)
解決方法:1)更改tomcat的配置文件
2)轉換String name=new String(request.getParameter("id").getBytes("ISO-8859-1"), "要轉換成的編碼");
2.關於表單提交的問題
1)
<input type="text" name="sname" value="XXXX" disabled />
當文本框的屬性爲disabled時,不可被編輯,同時在提交時也無法傳值,更改爲readonly即可
2)多個表單提交到同一個servlet中
<pre name="code" class="html"><form action="" method="get" name="myform">
<input type="hidden" name="type" value="1" />
</form>
<form action="" method="get" name="myform">
<input type="hidden" name="type" value="2" />
</form>
通過設置表單隱藏項,相同的name,對取得t的request.getParameter("type")進行判斷,處理不同的表單。
同理,對於同一表單的不同按鈕提交到同一個servlet中,設置相同的name不同的value值
<pre name="code" class="html"><input type="submit" name="id" value="受理" />
<input type="submit" name="id" value="完成" />
3.對JSTL遍歷得到的數據進行批量處理
JSP頁面顯示如下:
頁面代碼如下:
<c:forEach var="company" items="${List3}" varStatus="s">
<tr>
<td><input type="checkbox" name="checkbox" value="${s.index}" />
</td>
<td>${company.num}</td>
<td>${company.name}</td>
<td>${company.userAdd}</td>
<td>${company.sdate}</td>
<td>${company.phone}</td>
<td>${company.sname}</td>
<td>${company.price}</td>
<td>${company.orderstate}</td>
<td>${company.orderscore}</td>
<td>${company.orderdate}</td>
</tr>
</c:forEach>
將集合的序號作爲每一個複選框的值
String[] checkbox = request.getParameterValues("checkbox"); //將複選框的值存入數組中
for(int i=0;i<checkbox.length;i++){ //遍歷得到選中的值,一一處理
int n=Integer.parseInt(checkbox[i]); //轉換爲int
int ordernum=orderList.get(n).getOrdernum(); //得到選中的 訂單編號 ,orderList與頁面中的 List3對應
String state=orderList.get(n).getOrderstate(); /訂單執行狀態
//再得到其他的值,進行相應的處理 .......
}
4.java web開發依賴於web服務器,所有上傳的文件都會存儲在web服務器的目錄下:例如Tomcat在/tomcat安裝路徑/webapps/工程名/(自己創建的路徑) 下,數據庫存儲的地址是文件相對web服務器的路徑。上傳到web服務器的文件,當重新部署發佈的時候,程序啓動發現圖片不見了,造成這個問題的原因正是重新部署發佈時,原來的文件已經被刪除,所以需要再次上傳圖片就可以正常顯示了。
eclipse運行web項目後, 默認保存到 workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
5.獲取頁面表單name屬性的對象
<pre name="code" class="java"> Enumeration<String> ss = request.getParameterNames();
while (ss.hasMoreElements()) {
System.out.println(ss.nextElement());
}
6."../"代表上級目錄,request.getContextPath(),${pageContext.request.contextPath} 用於獲取根目錄
7.整體設計遠大於代碼實現,命名方式也很重要
8.web.xml文件配置錯誤將會導致Tomcat啓動報錯
9.servlet間的相互跳轉
response.sendRedirect("serviceorderAction");
response.sendRedirect("serviceorderAction?id="+cname); //帶參數
10.分層的思想
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
轉眼就要大四了,一個半月後的去路還沒想通,三年前當我拿到物理系通知書的時候,打死都想不到現在會在寫代碼。也許是因爲在杭州這座城市,也許是因爲身在理學院,不知道能在這條路上走多久,但是走一走也就知道了。
路漫漫其修遠兮,吾將上下而求索。