第一個(gè)可運(yùn)行的java web簡易程序?qū)W習(xí)筆記

學(xué)習(xí)內(nèi)容鏈接

http://how2j.cn/k/tmall_ssm/tmall_ssm-1516/1516.html

總體思路

使用springMVC+spring+mybatis的方式打通表現(xiàn)層/業(yè)務(wù)層/持久層。從瀏覽器接收訪問路徑開始祭阀,經(jīng)過數(shù)據(jù)庫調(diào)取數(shù)據(jù)(只做查詢),最后從瀏覽器顯示視圖的全部簡易流程。

開發(fā)環(huán)境

  • Eclipse oxygen
  • tomcat 8.5
  • Apache maven 3.5.3
  • mysql

實(shí)現(xiàn)步驟

  1. 環(huán)境配置完成后,啟動(dòng)Maven新建webapp項(xiàng)目
  2. 在pom.xml中添加依賴(依賴來源:Maven Repository

依賴清單:

  <properties>
    <spring.version>4.1.3.RELEASE</spring.version>
    <pagehelper.version>5.1.2-beta</pagehelper.version>
    <mysql.version>5.1.6</mysql.version>
    <mybatis.spring.version>1.2.3</mybatis.spring.version>
    <mybatis.version>3.1.1</mybatis.version>
    <junit.version>4.12</junit.version>
    <jstl.version>1.2</jstl.version>
    <jsqlparser.version>1.0</jsqlparser.version>
    <jackson.version>1.2.7</jackson.version>
    <servlet-api.version>3.1.0</servlet-api.version>
    <druid.version>1.0.18</druid.version>
    <log4j.version>1.2.16</log4j.version>
    <commons-logging.version>1.2</commons-logging.version>
    <commons-fileupload.version>1.2.1</commons-fileupload.version>
    <commons-io.version>1.3.2</commons-io.version>
    <commons-lang.version>2.6</commons-lang.version>
    <aopalliance.version>1.0</aopalliance.version>
    <mybatis-generator.version>1.3.5</mybatis-generator.version>
  </properties>
  1. 創(chuàng)建實(shí)體類Category仗处,定義了private的id和name鼠冕,以及getter/setter方法
public class Category {
    private Integer id;
    private String name;
    public Integer getId()           {      return id;  }
    public void setId(Integer id)    {      this.id = id;   }
    public String getName()          {      return name;    }
    public void setName(String name) {      this.name = name;   }
}
  1. 創(chuàng)建接口CategoryMapper,申明list方法防症,未來可以添加增刪改查等操作
public interface CategoryMapper {
    List<Category> list();
}
  1. 創(chuàng)建接口CategoryService,申明list方法
public interface CategoryService {
    List<Category> list();
}
  1. 創(chuàng)建類CategoryServiceImpl實(shí)現(xiàn)CategoryService接口
@Service
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    CategoryMapper categoryMapper;
    @Override
    public List<Category> list() {      return categoryMapper.list();   }
}

@Service 表示將CategoryServiceImpl類交給spring來管理哎甲,并申明為Service類
@Autowired 表示由spring自動(dòng)裝配注入categoryMapper

  1. 創(chuàng)建類CategoryController蔫敲,處理請求,跳轉(zhuǎn)視圖
@Controller
@RequestMapping("")
public class CategoryController {
    @Autowired
    CategoryService categoryService;
    
    //處理admin_category_list路徑的url
    @RequestMapping("admin_category_list")
    public String list(Model model) {
        List<Category> cs=categoryService.list();
        //向model傳遞數(shù)據(jù)
        model.addAttribute("cs",cs);
        
        //視圖跳轉(zhuǎn)到listCategory.jsp文件
        return "admin/listCategory";
    }
}
  1. 創(chuàng)建CategoryMapper.xml配置文件炭玫,實(shí)現(xiàn)id倒排序查詢所有分類
<mapper namespace="com.ihappy.lee.mapper.CategoryMapper">
  //id="list"唯一標(biāo)識(shí)此sql語句奈嘿,并與接口方法名保持一致
    <select id="list" resultType="Category">
        select * from category order by id desc
    </select>
</mapper>
  1. 創(chuàng)建核心文件applicationContext.xml--對注解的識(shí)別;對jdbc.properties的引用吞加;指定數(shù)據(jù)庫連接池指么;配置Mybatis的SessionFactory;
    <context:component-scan base-package="com.ihappy.lee.service" />
    
    
    <context:property-placeholder location="classpath:jdbc.properties"/>
    
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="typeAliasesPackage" value="com.ihappy.lee.pojo" />
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

  1. 創(chuàng)建springMVC.xml
    <!--springMVC的注解配置-->
    <context:annotation-config/>
        <!-- base-package后跟要掃描的包            expression是注解類的全名        -->
    <context:component-scan base-package="com.ihappy.lee.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <mvc:annotation-driven />
    
    <!--開通靜態(tài)資源的訪問-->
    <mvc:default-servlet-handler />

    <!-- 視圖定位到/WEB-INF/jsp目錄下  -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 對上傳文件的解析-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
  1. 配置web.xml--指定spring核心配置文件applicationContext.xml;設(shè)置中文過濾器;分發(fā)servlet椭蹄,指定springMVC配置文件springMVC.xml
  <!-- spring的配置文件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--中文過濾器-->
  <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>

  <!-- spring mvc核心:分發(fā)servlet -->
  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- spring mvc的配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springMVC.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  1. 其他配置(日志文件log4j.properties;數(shù)據(jù)庫配置文件jdbc.properties)盗似,略
  2. 使用的靜態(tài)資源,略
  3. 創(chuàng)建listCategory.jsp文件
    <!--  關(guān)鍵代碼:
    遍歷cs里的內(nèi)容平项,然后挨個(gè)顯示出來 -->
    <c:forEach items="${cs}" var="c">
  1. 簡易測試類
    public static void main(String args[]) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try (Connection c = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/tmall_ssm?useUnicode=true&characterEncoding=utf8", "root", "admin");
                Statement s = c.createStatement();) {
            for(int i=0;i<=10;i++) {
                String sqlFormat="insert into category values (null,'測試分類%d')";
                String sql=String.format(sqlFormat, i);
                s.execute(sql);
            }
        }catch(SQLException e) {
            e.printStackTrace();
        }
    }

運(yùn)行思路

  1. 從瀏覽器上訪問路徑/admin_category_list
  2. 根據(jù)web.xml中的配置(分發(fā)servlet)赫舒,將攔截到的/admin_category_list悍及,交給DispatcherServlet來處理
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

【注】<url-pattern>使用的'/'將會(huì)覆蓋到容器的default servlet,凡是web.xml中找不到匹配的URL接癌,訪問請求都將交給該servlet心赶,即DispatcherServlet來處理

  1. DispatcherServlet根據(jù)springMVC的配置(掃描注解),將這次請求交由CategoryController類來處理缺猛,映射到該類的list方法上(list方法帶有@RequestMapping("admin_category_list")注解)
  2. CategoryController自動(dòng)注入CategoryService缨叫,在訪問了categoryService.list()方法時(shí),再自動(dòng)注入CategoryMapper
  3. 根據(jù)applicationContext.xml配置的會(huì)話工廠SessionFactory荔燎,使用mapperLocations屬性來指定resources/mapper下的xml文件耻姥,將讀取的CategoryMapper.xml與CategoryMapper關(guān)聯(lián)起來
  4. 通過步驟4、5完成CategoryController的實(shí)例化有咨,使用CategoryController.list()處理查詢請求琐簇,id為‘list’的sql語句被執(zhí)行,將查詢結(jié)果封裝到Category對象座享,并存入List<Category>類型的cs中
  5. 把集合cs放入model中傳遞給jsp婉商,之后跳轉(zhuǎn)到admin/listCategory.jsp頁面,經(jīng)過foreach把List項(xiàng)逐個(gè)顯示出來

流程圖

forquery.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渣叛,一起剝皮案震驚了整個(gè)濱河市据某,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诗箍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挽唉,死亡現(xiàn)場離奇詭異滤祖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瓶籽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門匠童,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人塑顺,你說我怎么就攤上這事汤求。” “怎么了严拒?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵扬绪,是天一觀的道長。 經(jīng)常有香客問我裤唠,道長挤牛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任种蘸,我火速辦了婚禮墓赴,結(jié)果婚禮上竞膳,老公的妹妹穿的比我還像新娘。我一直安慰自己诫硕,他們只是感情好坦辟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著章办,像睡著了一般锉走。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纲菌,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天挠日,我揣著相機(jī)與錄音,去河邊找鬼翰舌。 笑死嚣潜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椅贱。 我是一名探鬼主播懂算,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庇麦!你這毒婦竟也來了计技?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤山橄,失蹤者是張志新(化名)和其女友劉穎垮媒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體航棱,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睡雇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饮醇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片它抱。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朴艰,靈堂內(nèi)的尸體忽然破棺而出观蓄,到底是詐尸還是另有隱情,我是刑警寧澤祠墅,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布侮穿,位于F島的核電站,受9級特大地震影響毁嗦,放射性物質(zhì)發(fā)生泄漏撮珠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芯急。 院中可真熱鬧勺届,春花似錦、人聲如沸娶耍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榕酒。三九已至胚膊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間想鹰,已是汗流浹背紊婉。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辑舷,地道東北人喻犁。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像何缓,于是被迫代替她去往敵國和親肢础。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容