最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

什么是springMVC?視圖和視圖解析器實(shí)例代碼

 更新時(shí)間:2023年09月22日 10:44:00   作者:塵覺  
在 springMVC 中的目標(biāo)方法最終返回都是一個(gè)視圖,返回的視圖都會(huì)由一個(gè)視圖解析器來處理,這篇文章主要介紹了什么是springMVC?視圖和視圖解析器,需要的朋友可以參考下

??什么是springMVC 視圖和視圖解析器

??基本介紹

  • 在 springMVC 中的目標(biāo)方法最終返回都是一個(gè)視圖(有各種視圖)
  • 返回的視圖都會(huì)由一個(gè)視圖解析器來處理 (視圖解析器有很多種)

??自定義視圖

為什么需要自定義視圖

在默認(rèn)情況下,我們都是返回默認(rèn)的視圖, 然后這個(gè)返回的視圖交由 SpringMVC 的InternalResourceViewResolver 視圖處理器來處理的

在實(shí)際開發(fā)中,我們有時(shí)需要自定義視圖,這樣可以滿足更多更復(fù)雜的需求

自定義視圖實(shí)例-代碼實(shí)現(xiàn)

配置 springDispatcherServlet-servlet.xml , 增加自定義視圖解析器

解讀

  • 配置自定義視圖解析器BeanNameViewResolver
  • BeanNameViewResolver可以去解析我們自定義的視圖
  • 配置 屬性 order, 表示視圖解析器執(zhí)行的順序, 值越小, 優(yōu)先級(jí)越高
  • 屬性 order 的默認(rèn)值是最低優(yōu)先級(jí) ,值為 Integer.MAX_VALUE int LOWEST_PRECEDENCE = 2147483647
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="99"/>
    </bean>

建MyView.java -自定義視圖類

解讀

  • MyView繼承了AbstractView, 就可以作為一個(gè)視圖使用
  • @Component(value = “myView”),該視圖會(huì)注入到容器中, 名字/id是 myView
@Component(value = "hspView")
public class MyView extends AbstractView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model,
                                           HttpServletRequest request,
                                           HttpServletResponse response) throws Exception {
        //完成視圖渲染
        //并且可以確定我們要跳轉(zhuǎn)的頁面 [請(qǐng)求轉(zhuǎn)發(fā)] /WEB-INF/pages/my_view.jsp
        System.out.println("進(jìn)入到自己的視圖..");
        //解讀
        //1. 下面就是進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)到 /WEB-INF/pages/my_view.jsp
        //2. /WEB-INF/pages/my_view.jsp 會(huì)被springmvc解析
        //   /springmvc/WEB-INF/pages/my_view.jsp
        request.getRequestDispatcher("/WEB-INF/pages/my_view.jsp")
                .forward(request, response);
    }
}

注意

  • 下面就是進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)到 /WEB-INF/pages/my_view.jsp
  • /WEB-INF/pages/my_view.jsp 會(huì)被springmvc解析 /springmvc/WEB-INF/pages/my_view.jsp

3.最后瀏覽器解析成http://localhost:8080 /springmvc/WEB-INF/pages/my_view.jsp

創(chuàng)建GoodsHandler.java類

@RequestMapping("/goods")
@Controller
public class GoodsHandler {
    @RequestMapping(value = "/buy")
    public String buy() {
        System.out.println("------buy()-----");
        return "myView";
    }
}

創(chuàng)建view.jsp類

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>自定義視圖測(cè)試</title>
</head>
<body>
<h1>自定義視圖測(cè)試</h1>
<a href="goods/buy">點(diǎn)擊到自定義視圖-</a><br/>
</body>
</html>

創(chuàng)建/WEB-INF/pages/my_view.jsp類

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>my_view頁面</title>
</head>
<h1>進(jìn)入到my_view頁面</h1>
<p>是從自定義視圖來的..</p>
<body>
</body>
</html>

完成測(cè)試(Postman 測(cè)試)

自定義視圖-小結(jié)

  • 自定義視圖: 創(chuàng)建一個(gè) View 的 bean, 該 bean 需要繼承自 AbstractView, 并實(shí)現(xiàn)renderMergedOutputModel 方法。
  • 并把自定義 View 加入到 IOC 容器中
  • 自定義視圖的視圖處理器,使用 BeanNameViewResolver, 這個(gè)視圖處理器也需要配置到 ioc 容器
  • BeanNameViewResolver 的調(diào)用優(yōu)先級(jí)需要設(shè)置一下,設(shè)置 order 比 Integer.MAX_VAL小的值. 以確保其在 InternalResourceViewResolver 之前被調(diào)用

自定義視圖-工作流程

SpringMVC 調(diào)用目標(biāo)方法, 返回自定義 View 在 IOC 容器中的 id

SpringMVC 調(diào)用 BeanNameViewResolver 解析視圖: 從 IOC 容器中獲取 返回 id 值對(duì)應(yīng)的 bean, 即自定義的 View 的對(duì)象

SpringMVC 調(diào)用自定義視圖的 renderMergedOutputModel 方法渲染視圖

說明: 如果在 SpringMVC 調(diào)用目標(biāo)方法, 返回自定義 View 在 IOC 容器中的 id,不存在, 則仍然按照默認(rèn)的視圖處理器機(jī)制處理

??目標(biāo)方法直接指定轉(zhuǎn)發(fā)或重定向

默認(rèn)返回的方式是請(qǐng)求轉(zhuǎn)發(fā),然后用視圖處理器進(jìn)行處理,比如在目標(biāo)方法中這樣寫:

也可以在目標(biāo)方法直接指定重定向或轉(zhuǎn)發(fā)的 url 地址

如果指定重定向,不能定向到 /WEB-INF 目錄中

應(yīng)用實(shí)例-代碼實(shí)現(xiàn)

修改 GoodsHandler.java, 增加方法 order()

直接指定要請(qǐng)求轉(zhuǎn)發(fā)的或者是重定向的頁面

  • 對(duì)于重定向來說,不能重定向到 /WEB-INF/ 目錄下
  • redirect 關(guān)鍵字,表示進(jìn)行重定向
  • /login.jsp 在服務(wù)器解析 /springmvc/login.jsp
@RequestMapping("/goods")
@Controller
public class GoodsHandler {   
/**
     * 演示直接指定要請(qǐng)求轉(zhuǎn)發(fā)的或者是重定向的頁面
     * @return
     */
    @RequestMapping(value = "/order")
    public String order() {
        System.out.println("=======order()=====");
         // return "forward:/WEB-INF/pages/my_view.jsp";
        // return "forward:/aaa/bbb/ok.jsp";
        return "redirect:/login.jsp";
    }
}

如果是這種

return "redirect:/WEB-INF/pages/my_view.jsp";

/WEB-INF/pages/my_view.jsp 被解析成 /springmvc/WEB-INF/pages/my_view.jsp 然后會(huì)報(bào)404錯(cuò)誤

在這里插入圖片描述

修改view.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>自定義視圖測(cè)試</title>
</head>
<body>
<h1>自定義視圖測(cè)試</h1>
<a href="goods/buy">點(diǎn)擊到自定義視圖-</a><br/>
<a href="goods/order">測(cè)試在目標(biāo)方法中指定請(qǐng)求轉(zhuǎn)發(fā)或者重定向的頁面-</a><br/>
</body>
</html>

完成測(cè)試(頁面測(cè)試)

完成測(cè)試(Postman 測(cè)試)

??綜合代碼演示

完成一個(gè)簡單的用戶登錄案例

  • 編寫登錄頁面 login.jsp
  • LoginHandler [doLogin 方法], 如果用戶輸入用戶名是 wyx, 密碼 123 就可以登錄成功.
  • 創(chuàng)建 JavaBean : User.java
  • 表單提交數(shù)據(jù)到 doLogin 方法, 以 User 對(duì)象形式接收.
  • 登錄成功到, 頁面 login_ok.jsp 并顯示登錄歡迎信息
  • 登錄失敗, 到頁面 login_error.jsp

代碼實(shí)現(xiàn)

創(chuàng)建login.jsp

<form action="login">
    u:<input name="username" type="text"> <br/>
    p:<input name="password" type="password"><br/>
    <input type="submit" value="登錄">
</form>
</body>
</html>

創(chuàng)建login_ok.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登錄成功</title>
</head>
<h1>登錄成功</h1>
歡迎你: ${requestScope.user.username}
<body>
</body>
</html>

創(chuàng)建login_error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登錄失敗</title>
</head>
<body>
<h1>登錄失敗</h1>
<a href="<%=request.getContextPath()%>/homework/login.jsp">返回重新登錄</a>
</body>
</html>
  • 這里考察web工程路徑的知識(shí)點(diǎn) 如果忘記了 可以去看我的博客 鏈接
  • <%=request.getContextPath()%>/homework/login.jsp

服務(wù)器解析 /springmvc/homework/login.jsp

  • 瀏覽器會(huì)解析 為 http://localhost:8080/springmvc/homework/login.jsp 創(chuàng)建 User.java
public class User {
    //屬性..
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

創(chuàng)建LoginHandler.java

@RequestMapping("/user")
@Controller
public class LoginHandler {
    //處理登錄
    @RequestMapping(value = "/login")
    public String doLogin(User user) {
        //判斷
        if("wyx".equals(user.getUsername())
                && "123".equals(user.getPassword())){
            //驗(yàn)證OK
            return "forward:/WEB-INF/pages/homework/login_ok.jsp";
        } else {
            return "forward:/WEB-INF/pages/homework/login_error.jsp";
        }
    }
}

??總結(jié)

  • 對(duì)于重定向來說,不能重定向到 /WEB-INF/ 目錄下
  • redirect 關(guān)鍵字,表示進(jìn)行重定向
  • MyView繼承了AbstractView, 就可以作為一個(gè)視圖使用
  • 配置 屬性 order, 表示視圖解析器執(zhí)行的順序, 值越小, 優(yōu)先級(jí)越高
  • 屬性 order 的默認(rèn)值是最低優(yōu)先級(jí) ,值為 Integer.MAX_VALUE int LOWEST_PRECEDENCE = 2147483647

到此這篇關(guān)于什么是springMVC 視圖和視圖解析器的文章就介紹到這了,更多相關(guān)springMVC視圖解析器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

大余县| 衡阳市| SHOW| 阿城市| 乐都县| 吉安市| 防城港市| 阿勒泰市| 收藏| 当涂县| 潢川县| 大渡口区| 大丰市| 望江县| 准格尔旗| 广河县| 武清区| 昌吉市| 珠海市| 三河市| 孝昌县| 南汇区| 宣汉县| 玉屏| 常山县| 三穗县| 历史| 崇义县| 沅江市| 台南县| 万全县| 西城区| 肇州县| 多伦县| 东至县| 洞头县| 淅川县| 连江县| 将乐县| 隆安县| 吉安县|