天天看點

jstl的使用 轉發和重定向(做項目遇到的一些問題總結)

文章目錄

  • ​​1、jstl的使用​​
  • ​​2、轉發和重定向​​
  • ​​3、shiro​​
  • ​​4、spring是什麼?​​
  • ​​5、對AOP的了解​​
  • ​​6、标簽通常和标簽一起使用​​
  • ​​7、springmvc中的form表單​​
  • ​​7.1 form标簽​​
  • ​​8 input标簽​​

1、jstl的使用

<c:choose>
    //c:choose的子标簽,c:when隻用來判斷條件是否成立
    <c:when test="${chanConf.remark!=null && fn:length(chanConf.remark)>'15'}">
        <td title="${chanConf.remark}">${fn:substring(chanConf.remark,0,15)}...</td>
    </c:when>
    //c:choose的字标簽,在c:when後邊使用,當when判斷為false的時候,執行
    <c:otherwise>
        <td>${chanConf.remark}</td>
    </c:otherwise>
</c:choose>      

2、轉發和重定向

  • 轉發

    1.位址欄不發生變化,顯示的是上一個頁面的位址

    2.請求次數:隻有1次請求

    request.getRequestDispatcher(“/位址”).forward(request, response);

jstl的使用 轉發和重定向(做項目遇到的一些問題總結)

3、shiro

Shiro 可以幫助我們完成:認證、授權、加密、會話管理、與 Web 內建、緩存等。

shiro:haspermission是從外部引入的一個标簽,執行标簽時,标簽會根據name屬性來判斷目前使用者是否擁有指定的權限

如果有,就執行shiro标簽内的代碼,如果沒有,就跳過不執行。

4、spring是什麼?

容器架構,用來轉JavaBean,中間層架構(萬能膠),起到連接配接作用。

Spring是一個輕量級的控制反轉(IOC)和面向切面(AOP)的容器架構

5、對AOP的了解

系統有許多元件構成,每個元件負責一個特定的功能,同時這些元件還會承擔着額外的職責,比如日志,事務管理。為分散的對象引入公共的行為,面向對象(OOP)不适合。【從上到下,不适合從左到右】OOP大量代碼重複,不利于各個子產品的複用

AOP:将程式中的交叉業務邏輯,(安全、日志、事務),封裝成一個切面,注入到目标對象。還可以對某個對象或對象功能進行增強。在執行方法之前額外做一些事情,執行方法之後額外做一些。

6、标簽通常和标簽一起使用

主要作用就是增強使用者可用性,使用者點選标簽中的文本時,浏覽器自動聚焦到和該标簽關聯的控件。

文本内容

關聯控件的id一般指的是input元素的id;

springmvc中的檔案上傳

enctype就是encodetype就是編碼類型的意思。

multipart/form-data是指表單資料有多部分構成,既有文本資料,又有檔案等二進制資料的意思。

需要注意的是:預設情況下,enctype的值是application/x-www-form-urlencoded,不能用于檔案上傳,隻有使用了multipart/form-data,才能完整的傳遞檔案資料。

application/x-www-form-urlencoded不是不能上傳檔案,是隻能上傳文本格式的檔案,multipart/form-data是将檔案以二進制的形式上傳,這樣可以實作多種類型的檔案上傳。

7、springmvc中的form表單

7.1 form标簽

使用Spring的form标簽主要有兩個作用,第一是它會自動的綁定來自Model中的一個屬性值到目前form對應的實體對象,預設是command屬性,

這樣我們就可以在form表單體裡面友善的使用該對象的屬性了;第二是它支援我們在送出表單的時候使用除GET和POST之外的其他方法進行送出,包括DELETE和PUT等。

1.1.1 支援綁定表單對象

我們先來看如下使用form标簽的一個示例:

<form:form action="formTag/form.do" method="post">  
    <table>  
        <tr>  
            <td>Name:</td><td><form:input path="name"/></td>  
        </tr>  
        <tr>  
            <td>Age:</td><td><form:input path="age"/></td>  
        </tr>  
        <tr>  
            <td colspan="2"><input type="submit" value="送出"/></td>  
        </tr>  
    </table>  
</form:form>      

這個時候如果Model中存在一個屬性名稱為command的javaBean,而且該javaBean擁有屬性name和age的時候,在渲染上面的代碼時就會取command的對應屬性值賦給對應标簽的值。如在上面的代碼中,假設Model中存在一個屬性名稱為command的javaBean,且它的name和age屬性分别為“Zhangsan”和“36”時,那麼它在渲染時就會生成如下一段代碼:

<form id="command" action="formTag/form.do" method="post">  
    <table>  
        <tr>  
            <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>  
        </tr>  
        <tr>  
            <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>  
        </tr>  
        <tr>  
            <td colspan="2"><input type="submit" value="送出"/></td>  
        </tr>  
    </table>  
</form>  
<form id="command" action="formTag/form.do" method="post">  
    <table>  
        <tr>  
            <td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>  
        </tr>  
        <tr>  
            <td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>  
        </tr>  
        <tr>  
            <td colspan="2"><input type="submit" value="送出"/></td>  
        </tr>  
    </table>  
</form>      

從上面生成的代碼中,我們可以看出,當沒有指定form标簽的id時它會自動擷取該form标簽綁定的Model中對應屬性名稱作為id,而對于input标簽在沒有指定id的情況下它會自動擷取path指定的屬性作為id和name。我們指定form預設自動綁定的是Model的command屬性值,那麼當我的form對象對應的屬性名稱不是command的時候,應該怎麼辦呢?對于這種情況,Spring給我們提供了一個commandName屬性,我們可以通過該屬性來指定我們将使用Model中的哪個屬性作為form需要綁定的command對象。除了commandName屬性外,指定modelAttribute屬性也可以達到相同的效果。這裡假設上面代碼中我們存放在Model中的是user對象而不是預設的command對象,那麼我們的代碼就可以如下定義了

<form:form action="formTag/form.do" method="post" commandName="user">  
    <table>  
        <tr>  
            <td>Name:</td><td><form:input path="name"/></td>  
        </tr>  
        <tr>  
            <td>Age:</td><td><form:input path="age"/></td>  
        </tr>  
        <tr>  
            <td colspan="2"><input type="submit" value="送出"/></td>  
        </tr>  
    </table>  
</form:form>      

8 input标簽

SpringMVC的input标簽會被渲染為一個type為text的普通Html input标簽。使用SpringMVC的input标簽的唯一作用就是它能綁定表單資料。SpringMVC表單标簽最大的好處就是它支援資料綁定,當我們的表單标簽不需要綁定的資料的時候,我們應該使用普通的Html标簽。關于input标簽綁定表單資料的方法已經在介紹form标簽的時候順帶介紹過了,這裡就不再過多的贅述了。

<form:form action="formTag/form.do" method="head" modelAttribute="user" methodParam="requestMethod">  
    <table>  
        <tr>  
            <td>Name:</td><td><form:input path="name"/></td>  
        </tr>  
        <tr>  
            <td>Age:</td><td><form:input path="age"/></td>  
        </tr>  
        <tr>  
            <td colspan="2"><input type="submit" value="送出"/></td>  
        </tr>  
    </table>  
</form:form>      

2、什麼是${CTX}

{pageContext.request.contextPath}的對比

1、${pageContext.request.contextPath}是擷取目前根目錄。

2、${ctx}通過觀察可以知道也是擷取目前根目錄的意思

不同之處:

${ctx}是

{pageContext.request.contextPath}“/>。

在此值得注意的是,在使用{pageContext.request.contextPath}”/>的檔案引入到目前頁面來。

${pageContext.request.contextPath}等價于<%=request.getContextPath()%> 或者可以說是<%=request.getContextPath()%>的EL版 意思就是取出部署的應用程式名或者是目前的項目名稱。

比如我的項目名稱是ajax01 在浏覽器中輸入為http://localhost:8080/ajax01/login.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>

取出來的就是/ajax01,而"/"代表的含義就是http://localhost:8080

是以我們項目中應該這樣寫

${pageContext.request.contextPath}/login.jsp

3、

一、SpringMVC 表單元素标簽 如下:

<form:textarea path=“remarks” htmlEscape=“false” class=“input-xlarge”/>

其中的屬性 htmlEscape的作用是? 大緻的意思是起轉義作用。

二、測試如下

1、htmlEscape=“false” , 輸入内容 “<” ;結果如下圖

<

2、htmlEscape=“true” , 輸入内容 “<” ;結果如下圖

<

3、去掉 htmlEscape 屬性 , 輸入内容 “<” ;結果如下圖

      

<

三、 總結

1、htmlEscape 屬性作用了解為:是否轉義字元, 預設為 true ,若要設定不對特殊字元進行轉移,需設定為 false 。

2、轉義字元為: < > " & ( 轉義字元是 XML中5個預定義的實體引用)

實際上也沒有多大的作用啦 自己太好奇而已

4、

定義和用法

required 屬性規定必需在送出之前填寫輸入字段。

如果使用該屬性,則字段是必填(或必選)的。

注釋:required 屬性适用于以下 類型:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file。

HTML 4.01 與 HTML 5 之間的差異

required 屬性是 HTML5 中的新屬性。

文法:

5、常用的正規表達式

1、

比對所有。\s 是比對所有空白符,包括換行,\S 非空白符,不包括換行。

2、

[A-Z] 表示一個區間,比對所有大寫字母,[a-z] 表示所有小寫字母。

3、

正規表達式/\s+/g和/\s/g,目的均是找出目标字元串中的所有空白字元,但兩者到底有什麼差別呢?

我們先來看下面一個例子:

let name = ‘ye wen jun’;

let ans = name.replace(/\s/g, ‘’); // ‘yewenjun’

let ans2 = name.replace(/\s+/g, ‘’); // ‘yewenjun’

從上面那個例子我們看到結果沒有差別,那我們在換個例子看看

let name = ‘ye wen jun’;

let ans = name.replace(/\s/g, ‘#’); // “ye###wen####jun”

let ans2 = name.replace(/\s+/g, ‘#’); // “ye#wen#jun”

現在可以很清楚的可以看到,+的意思就是從遇到第一個比對的字元起,繼續比對,直到比對失敗,把這段比對到的字元替換為#,

而不帶+的是把比對到的字元一個一個替換為#

this.value=this.value.replace(/\s+/g,‘’)

當輸入值的鍵盤擡起時觸發這個事件。this.value表示此輸入框的值,/\s/g為正規表達式,目的均是找出目标字元串中的所有空白字元