1. 程式人生 > 其它 >7 Steps to Create New Oracle Database from Command Line

7 Steps to Create New Oracle Database from Command Line

1.SpringMVC快速入門

  • MVC是一種軟體架構模式,分離了啞無邏輯和顯示介面,包括model 模型、view檢視、controller控制器,其中model負責處理業務邏輯,封裝試題,view檢視展現內容,controller控制器負責排程分發,如接受請求,呼叫模型,發出響應
  • SpingMVC是一種基於java的實現MVC 設計模式的輕量級web框架,屬於SpringFrameWork的後續產品,融合在Spring Web Flow中,通過一套註解讓一個簡單的java成為處理請求的控控制器,無須實現任何藉口,同時還支援RESTful程式設計風格的請求
  • 封裝了原來的servlet中的共有行為,實現了引數封裝,檢視轉發等功能

  • 快速入門
    • 建立web專案,匯入SpringMVC相關座標
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion
    >4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>springmvc_quick</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!--springMVC座標--> <dependency> <
    groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.5.RELEASE</version> </dependency> <!--servlet座標--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!--jsp座標--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> </dependencies> </project>
    • 配置SpringMVC前端控制器 DispathcerServlet
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>DispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring_mvc.xml</param-value>
            </init-param>
        <!-- 啟動時載入-->
            <load-on-startup>2</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>DispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    • 編寫Controller類和檢視頁面,使用註解配置Controller類中業務方法的對映地址
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>成功響應</title>
    </head>
    <body>
    <%--檢視頁面--%>
    <h2>成功響應springmvc</h2>
    </body>
    </html>
    package com.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class UserController {
    //    編寫Controller類,跳轉到/quick地址並響應
        @RequestMapping("/quick")
        public String quick(){
            System.out.println("收到請求了");
            return "success.jsp";
        }
    
    
    }
    • 配置SpringMVC核心檔案 spring-mvc.xml
    <!-- 開啟註解掃描-->
    <context:component-scan base-package="controller"/>
  • 執行流程:Tomcat接受客戶端發出的請求,解析請求資源地址,建立代表請求物件和響應物件,呼叫目標資源,此時通過前置DispatchServlet進行地址解析,將請求傳送給對應的/quick的controller,執行響應,將響應傳給前置DispatchServlet解析,組裝成對應的響應傳送給客戶端

2.springmvc執行流程

  • 執行元件(springMVC三大元件是處理器對映器,處理器介面卡,和檢視解析器;四大元件是前端控制器,檢視解析器,處理器介面卡和處理器對映器)
    • 前端控制器DispatcherServlet:使用者請求到達前端控制器,由它呼叫其他元件處理使用者的請求,降低了元件之間的耦合性
    • 處理器對映器HandlerMapping:通過對映器對處理器進行適配,對更多型別的處理器進行執行,採用了介面卡模式
    • 處理器Handler:由開發者編寫,是真正執行請求的控制器,對具體業務進行處理
    • 檢視解析器ViewResolver:負責將處理結果生成view檢視,它首先將邏輯檢視名解析層物理檢視名,找到對應的頁面地址,再生成view檢視物件,對view進行渲染並將結果通過頁面展示給使用者
    • 檢視view:有開發者編寫,springMVC支援很多的view檢視型別,如jstlViewfreemarkerViewpdfView等,最常用的是jsp,通過頁面標籤或頁面模板技術將頁面展示給使用者
  • 自定義配置三大元件
    • 處理器介面卡和處理器對映器
    <!-- 配置處理器介面卡和處理器對映器 ,可以對json格式解析,進行了方法的增強-->
        <mvc:annotation-driven/>
    • 檢視解析器,一遍用於邏輯檢視到物理檢視地址的拼接
  • 執行流程
    • 使用者傳送請求到前端控制器DispatcherServlet,前端控制器收到請求後呼叫處理器對映器HandlerMapping
    • 處理器對映器根據請求,通過xml配置或註解方式找到對應的處理器,生成處理器物件和處理器攔截器,並返回給前端控制器
    • 前端控制器呼叫處理器介面卡HandlerAdapter,由介面卡通過適配方式找到具體的控制器即處理器(後端控制器)
    • 處理器執行完返回ModelAndView,處理器介面卡將後端控制器的執行結果ModelAndView返還給前端控制器
    • 前端控制器將ModelAndView傳給ViewReslover檢視解析器,由檢視解析器後返還具體的view
    • 前端控制器根據view進行檢視渲染,並響應客戶
  • 常用註解
    • Controller:SpringMVC基於Spring容器,所以在進行SpringMVC操作時,需要將Controller儲存到Spring容器中,如果使用@Controller註解標註的話,就需要使用
      <!--配置註解掃描-->
      <context:component-scan base-package="com.controller"/>
    • RequestMapping:用於建立請求url和處理請求方法之間的對應關係
      • 類上:URL的一級訪問目錄,/開頭,方便模組化管理
    • 方法上:URL的二級訪問目錄,和一級目錄組成一個完整的 URL 路徑
      • value:用於指定請求的URL。它和path屬性的作用是一樣的
      • method:用來限定請求的方式
      • params:用來限定請求引數的條件,如{"accountName"} 表示請求引數中必須有accountName{"money!100"} 表示請求引數中money不能是100
    • 訪問頁面或跳轉時,WEB-INF下預設是安全資源,在其包下的資源不可以通過url直接獲取,只可以在伺服器內轉發

3. SpringMVC請求

  • springMVC可以接收的引數型別:基本引數型別、物件引數型別、陣列引數型別、集合引數型別。
    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2021/7/17
      Time: 14:51
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>請求資料</title>
    </head>
    <body>
    
    <%--不要有空格--%>
    <a href="${pageContext.request.contextPath}/data?username=大明&age=19" >普通資料型別</a>
    <a href="${pageContext.request.contextPath}/object?name=大明&id=2" >物件型別</a>
    
    <form method="post" action="${pageContext.request.contextPath}/array">
    
        <input type="checkbox" name="ids" value="1">1<br>
        <input type="checkbox" name="ids" value="2">2<br>
        <input type="checkbox" name="ids" value="3">3<br>
        <input type="checkbox" name="ids" value="4">4<br>
        <input type="checkbox" name="ids" value="5">5<br>
        <input type="submit" value="陣列元素">
    </form>
    
    <form method="post" action="${pageContext.request.contextPath}/listormap">
        關鍵詞 <input type="text" name="keyword">
        使用者id<input type="text" name="user.id">姓名<input type="text" name="user.name">
        第一個集合<input type="text" name="userList[0].id"><input type="text" name="userList[0].name">
        第二個集合<input type="text" name="userList[1].id"><input type="text" name="userList[1].name">
        第一個map<input type="text" name="map['u1'].id"><input type="text" name="map['u1'].name">
        第二個map<input type="text" name="map['u2'].id"><input type="text" name="map['u2'].name">
        <input type="submit" value="集合資料型別">
    </form>
    
    <form method="post" action="${pageContext.request.contextPath}/date">
    自定義轉換器 生日<input type="text" name="date">
        <input type="submit" value="自定義轉換器 生日">
    </form>
    
    
    <a href="${pageContext.request.contextPath}/page?pageNo = 2" >物件型別</a>
    </body>
    </html>
    package domain;
    
    import java.util.List;
    import java.util.Map;
    
    public class QueryVo {
    
        private String keyword;
        private User user;
        private List<User> userList;
        private Map<String,User> map;
    
        @Override
        public String toString() {
            return "QueryVo{" +
                    "keyword='" + keyword + '\'' +
                    ", user=" + user +
                    ", userList=" + userList +
                    ", map=" + map +
                    '}';
        }
    
        public String getKeyword() {
            return keyword;
        }
    
        public void setKeyword(String keyword) {
            this.keyword = keyword;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
        public List<User> getUserList() {
            return userList;
        }
    
        public void setUserList(List<User> userList) {
            this.userList = userList;
        }
    
        public Map<String, User> getMap() {
            return map;
        }
    
        public void setMap(Map<String, User> map) {
            this.map = map;
        }
    }
    package domain;
    
    public class User {
        private int id;
        private String  name;
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    }
    package domain;

    public class User {
    private int id;
    private String name;

    @Override
    public String toString() {
    return "User{" +
    "id=" + id +
    ", name='" + name + '\'' +
    '}';
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }
    }
    package controller;
    
    import domain.QueryVo;
    import domain.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.util.Arrays;
    import java.util.Date;
    
    @Controller
    public class UserController {
    
        @RequestMapping("/data")
        public String data(String username,Integer age){
            System.out.println(username);
            System.out.println(age);
            return "success";
        }
        @RequestMapping("/object")
        public String object(User user){
            System.out.println(user);
            return "success";
        }
        @RequestMapping(path = "/array")
        public String array(Integer[] ids){
            System.out.println(Arrays.toString(ids));
            return "success";
        }
        @RequestMapping("/listormap")
        public String listormap(QueryVo queryVo){
            System.out.println(queryVo);
            return "success";
        }
      
    
    }
  • controller中的業務方法會對引數值進行自動對映匹配和型別轉換,將引數由string型別轉為對應的要求型別
  • 中文亂碼過濾器:當post請求時資料會出現亂碼,需要通過中文過濾器進行編碼過濾
        <!-- 中文過濾器-->
        <filter>
            <filter-name>CharacterEncodingFilter</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>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
  • 自定義轉換器:springMVC提供了一些常用的型別轉換器,對於特有的行為讓那個開發者自定義處理
    package converters;
    
    import org.springframework.core.convert.converter.Converter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class ConverterDate implements Converter<String,Date> {
    
        @Override
        public Date convert(String birth) {
            SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
            Date date =null;
            try {
                 date = sdf.parse(birth);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return date;
        }
    }
    <!-- 配置處理器介面卡和處理器對映器 ,可以對json格式解析,進行了方法的增強-->
        <mvc:annotation-driven conversion-service="conversionService"/>
    
    <!-- 配置自定義轉換器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="converters.ConverterDate"/>
            </set>
        </property>
    </bean>
    package controller;
    
    import domain.QueryVo;
    import domain.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.util.Arrays;
    import java.util.Date;
    
    @Controller
    public class UserController {
        @RequestMapping("/date")
        public String date(Date date){
            System.out.println(date);
            return "success";
        }
     
    }
  • 請求常用註解
    • @RequestParam:當請求引數名與controller業務方法的引數名不一致時,可以顯示繫結,設定預設值和資料非必須
    • @RequestHeader:獲取請求頭資料
    • @CookieValue:獲取cookie中的資料
    • 獲取相關的Servlet相關API:SpringMVC支援使用原始ServletAPI物件作為控制器方法的引數進行注入,如request,response和session
package controller;

import domain.QueryVo;
import domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Arrays;
import java.util.Date;

@Controller
public class UserController {
    @RequestMapping("/page")
//    required 設定是否必須傳遞引數,預設值為true;如果設定了預設值,值自動改為false
    public String page(@RequestParam(name="pageNo", defaultValue ="1", required = false) Integer pageNum, @RequestParam(defaultValue = "5") Integer pageSize){
        System.out.println(pageNum);
        System.out.println(pageSize);
        return "success";
    }

    @RequestMapping("/header")
    public String header(@RequestHeader("cookie") String cookie){
        System.out.println(cookie);
        return "success";
    }
    @RequestMapping("/cookie")
    public String cookie(@CookieValue("JSESSIONID") String cookie){
        System.out.println(cookie);
        return "success";
    }
    @RequestMapping("/springAPI")
    public String springAPI(HttpServletRequest request, HttpServletResponse response, HttpSession session){
        System.out.println(request);
        System.out.println(response);
        System.out.println(session);
        return "success";
    }

}

4. springMVC響應

  • 頁面跳轉方式包括返回字串邏輯檢視、void原始ServletAPIModelAndView方式
  • void原始ServletAPI格式
   // 原始Servlet
    @RequestMapping("/servlet")
    public void servlet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;utf-8");
        response.getWriter().println("我收到額");
        request.setAttribute("username", "原始servlet");
        //  request.getRequestDispatcher("success.jsp").forward(request, response);

    }
  • 返回的資料格式可以通過直接返回字串資料方式或將物件、集合轉為json格式返回
  • 使用字串邏輯檢視實現頁面的跳轉實際上是執行請求轉發,相當於forward
  • forward關鍵字實現轉發,則路徑必須是實際檢視URL,相當於 request.getRequestDispatcher("url").forward(request,response) ,既可以轉發到jsp,也可以轉發到其他的控制器方法
 @RequestMapping("/forward")
    public String forward(Model model) {
        model.addAttribute("username", "轉發");
        return "forward:success.jsp";
    }
  • Redirect重定向實現重定向,路徑必須是實際檢視URL,虛擬目錄springMVC框架自動完成拼接
    @RequestMapping("/redirect")
    public String redirect(Model model) {
        model.addAttribute("username", "重定向");
// 重定向的頁面不會展示username的值
        return "redirect:success";
    }
  • ModelAndView有兩種方式實現,推薦方式二
    • Controller中方法建立並返回ModelAndView物件,並且設定檢視名稱
    • Controller中方法形參上直接宣告ModelAndView,無需在方法中自己建立,在方法中直接使用該物件設定檢視,同樣可以跳轉頁面
    //ModelAndView方式一
        @RequestMapping("/model1")
        public ModelAndView model1() {
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("username", "modelAndView方式一");
            modelAndView.setViewName("success");
            return modelAndView;
        }
    
        //ModelAndView方式二
        @RequestMapping("/model2")
        public ModelAndView model2(ModelAndView modelAndView) {
            modelAndView.addObject("username", "modelAndView方式二");
            modelAndView.setViewName("success");
            return modelAndView;
        }
  • @SessionAttributes:適用於在多個請求之間共有資料,在控制器類上標註配置需要在session中存放的資料,Spring MVC將存放在model中對應的資料暫存到HttpSession
 @RequestMapping("/forward")
    public String forward(Model model) {
        model.addAttribute("username", "轉發");
        return "forward:success.jsp";
    }

    @RequestMapping("/returnString")
    public String returnString() {
        return "success";
    }

5.靜態資源的開啟

  • 問題:當有靜態資源需要載入,如query檔案,通過谷歌開發者工具抓包發現沒有載入到jquery
  • 原因:SpringMVC的前端控制器DispatcherServleturl-pattern配置的是 /(預設),代表對所有的靜態資源都進行處理操作,這樣就不會執行Tomcat內建的DefaultServlet處理
  • 解決:配置檔案放行靜態資源
<!--方式一:在springmvc配置檔案中指定放行資源-->
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/img/**" location="/img/"/>

<!--方式二(推薦):在springmvc配置檔案中開啟DefaultServlet處理靜態資源-->
<mvc:default-servlet-handler/>