Javaweb项目框架搭建-准备篇

前言
Java于大二开始修及现行大四乎出多少年了,但是由之前一直于游玩,没有当真学过,直到现在才起重新学习。也是杀凑巧,看到了黄勇先生的《架构探险》,于是便开念写Java
Web框架。

当介绍四生目标的那么篇博客中,可以着力了解及程序启动的过程:

1.开发工具
《架构探险》书被涉嫌说IntelliJ
IDEA(简称IDEA)是业界最牛之Java开发工具,但是它起些许单版,一个社区本无花钱,属于开源的民用版,但是意义未圆满,另一个凡是完全本,属于收费的小卖部版,功能到。于是自己对要为此就就此极好之的主旨,毅然下载了收费版的,在安过程遭到呢意识了当下款开发工具的一个小Bug,因为此家伙收费版有30龙之试用期,我们得在设置前把电脑系统时间改到推后半年,比如现在凡2016年12月,我们可改化2017年6月,这样设置到位后它的试用期就见面及2017年7月,之后先关软件还管系统时改回去就OK了,它的试用期依然是2017年7月。

main–>UIApplicationMain–>创建UIApplication的实例和app代理AppDelegate的实例并安装好代理—>在程序启动后,也就算是开行画面显得之后,
AppDelegate创建UIWindow(可以是全自动创建的,也可以手动创建)

图片 1

今谈论的问题是,如何创造控制器并设置也UIWindow的根控制器,然后加载出控制器中之view并出示出来。

事后的安装过程就是比较简单了,提醒一点底是,最好不要转移之卓绝多,推后的辰在同样年之内,超过同样年安装会发出报错。

本文目录

2.召开一个有些品种
以开专业工作之前,先开一个Hello
World(好像有所开支都去不起来就同步)。一凡驾轻就熟一下Maven,二是复习一下Servlet和JSP。开始!!!

  • 1.创造控制器的老三种艺术
  • 2.控制器的view的开创进程
  • 3.Controller的view的生命周期
  • 4.导航控制器的运
  • 5.UITabBarController底简短以
  • 6.TabBarController>>NavigationController>>ViewController主流框架

1.创一个Maven的类
Maven
是一个门类管理和构建自动化工具。不过对此程序员而言,更珍惜它的品类构建成效。但是对用IDEA作为开发工具,也未用单独生充斥、配置Maven,因为IDEA默认将那个做了。使用IDEA创建Maven项目好粗略:
  a.点击右上角工具栏的File/New/Project。
  b.在弹出框选择Maven,然后Next。
 
c.在连接下的窗口中,这三单凡是必填的,很重点之事物。GroupId建议为网站域名的倒排方式,确保唯一性,类似于Java的包名;ArtifactId是模块名称,这个自动起名。
  d.继续Next,输入Project name,然后Finish。
至这,Maven项目就是创办好了。

-1.创造控制器的老三种植方式)

2.配置Maven
开拓Maven配置文件pom.xml,之后展开同样名目繁多的布局,配置好后底师:

1.创办控制器的老三栽方法

1> 直接通过alloc + init的法子开创
2> 通过加载storyboard文件来创造一个控制器
3> 通过点名的xib文件来创造控制器

方法一:

// 1.创建window self.window是强指针
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
// 2.创建控制器,并设置为window的根控制器
MKOneViewController *oneViewController = [[MKOneViewController alloc]init];
self.window.rootViewController = oneViewController;
// 3.设置self.window为主窗口, 并显示
[self.window makeKeyAndVisible];

方法二:

// 1.创建window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 2.通过storyboard加载控制器,并将initialViewController设置为window的根控制器
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Two" bundle:nil]; // sb加载
MKTwoViewController *twoViewController = [sb instantiateInitialViewController]; // 用sb初始化initialViewController
self.window.rootViewController = twoViewController;
// 3.设置window为主窗口并显示
[self.window makeKeyAndVisible];
注意如果想加载的不是initialViewController,而是sb文件中的其他controller,根据控制器的Storyboard ID来创建:
[storyboard instantiateViewControllerWithIdentifier:@"vmid"];

方法三:

是让整个xib文件中的控件都让controller管理,xib中没有控制器,而是设置xib的files owner为指定的控制器,控制器用initWithNib创建
// 1.创建window
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
// 2.使用xib加载控制器,并设置为window的根控制器
MKThreeViewController *threeViewController = [[MKThreeViewController alloc]initWithNibName:@"MKThreeView" bundle:nil];
self.window.rootViewController = threeViewController;
// 3.设置self.window为主窗口,并显示
[self.window makeKeyAndVisible];

利用xib需要专注的是:

如果创建控制器的早晚,
没有强烈指定xib文件(也便是运用这样的代码创建[[MKThreeViewController
alloc]init]),
那么默认系统回去寻找一个暨控制器名字如出一辙的(但是去丢后缀Controller,也便是MKThreeView.xib)的xib文件,
如果找了虽然利用此xib中之view作为控制器的默认view(前提是已经以view连线,即使没装files
owner也是可以的)。

而搜索不至则尝试去找寻一个同控制器名字一样的xib文件(MKThreeViewController.xib),
然后以是xib文件被的view作为控制器默认的view。如果都摸不交,
那么就算创办一个透明底view(空的view)。

提议将这样的xib起名叫吧带controller后缀的,因为它们的用意就是相当给一个controller,类似于sb中之一个controller。

 

 

 

-控制器的view的创建进程)

<?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.smart4j</groupId>    
   <artifactId>chapter1</artifactId>    
   <version>1.0.0</version>
   <properties>    
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <build>    
     <plugins>        
       <!-- Compile -->        
       <plugin>            
          <groupId>org.apache.maven.plugins</groupId>            
          <artifactId> maven-compiler-plugin</artifactId>            
          <version>3.3</version>            
          <configuration>                
            <source>1.8</source>                
            <target>1.8</target>            
          </configuration>        
       </plugin>        
       <!-- Test -->        
       <plugin>            
         <groupId>org.apache.maven.plugins</groupId>             
         <artifactId>maven-surefire-plugin</artifactId>            
         <version>2.18.1</version>            
         <configuration>                
           <skipTests>true</skipTests>            
         </configuration>        
       </plugin>        
       <!-- Tomcat -->        
       <plugin>            
         <groupId>org.apache.tomcat.maven</groupId>            
         <artifactId>tomcat7-maven-plugin</artifactId>             
         <version>2.2</version>            
         <configuration>                
            <path>/${project.artifactId}</path>            
         </configuration>        
       </plugin>    
     </plugins>
   </build>

   <packaging>war</packaging>  

   <dependencies>        
     <!-- 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>        
     <!-- JSTL -->        
     <dependency>            
       <groupId>javax.servlet</groupId>            
       <artifactId>jstl</artifactId>            
       <version>1.2</version>            
       <scope>runtime</scope>        
     </dependency>    
   </dependencies>  
</project>

2.控制器的view的创办过程

归来顶部

控制器的顶其管理之view的始建,view到底是何等进展创办的也罢,一般的话view的创导与控制器的创立方式是来关联之,控制器的view有以下几栽创建的办法:

  1. 透过storyboard创建, 创建了控制器后,
    自动调用loadView方法,创建控制器的view。
    ** 此时自定义的控制器, 因为尚未”重写”(“实现”)loadView方法,
    所以loadView方法内部就是根据storyboard文件被的view来创造View的。

  2. 经xib文件创建, 创建了控制器后, 自动调用loadView创建控制器的view。
    ** 此时起定义的控制器, 因为无”重写”(“实现”)loadView方法,
    所以loadView方法内部就是冲xib文件中之view来创造View的。

3.
经过重写(实现)UIViewController的loadView方法重写。(自己通过代码来创造控制器的View)
*** 控制器的loadView方法就是为此来自定义View的。
** 如果要啊控制器自定义View, 要写于loadView中,
不要写以viewDidLoad中。
*** 如果还写(实现)loadView方法中调用了[super loadView],
那么还会采用默认的点子来加载。
***
重写ViewController的loadView方法,用来自定义View,当从定义view的时,
就不用调用[super loadView]了。
[super loadView];相当给实践了瞬间代码

if (是否是根据storyboard来创建的控制器) {
   self.view = storyboard中的控制器中的view;
} else if (xib) {
   self.view = xib中的view;
} else {
   self.view = 透明的一个view
}

“ ** 注意:无论是通过加载xib创建view、storyboard创建view,
最终都凭借让loadView方法来创造。这个点子确定了最后的view。

** 注意:修改了色文件(比如:xxx.xib等,要先期Product -> Clean,
然后将软件打模拟器中卸载, 然后再也运行。)

** 控制器的loadView方法什么时调用?
**
在用用到控制器的view的时刻才调用(当调用UIWindow对象的makeKeyAndVisible方法时,就待展示该view了,
此时就是象征为此到View了。), 这个就称为”延迟加载”。
** 比如当使用self.view.backgroundColor ,
要设置控制器的view的背景色时(这时急需用到view了),
那么这才见面开创造该控制器的view, 也就是说要调用loadView方法了。所以,
如果在loadView方法内部调用self.view.backgroundColor, 就时有发生死循环了。

** 可以经调用控制器的self.isViewLoaded
方法来判断当前控制器的view是否早已加载了了。

** 并且当控制器的view加载完毕后, 会调用viewDidLoad方法(系统和谐调用)。

 

 

 

-Controller的view的生命周期)

先是是安排编码格式为UTF-8:

3.Controller的view的生命周期

下面是表示控制器视图的生命周期的7个措施

  1. viewDidLoad
  2. viewWillAppear
  3. viewDidAppear
  4. viewWillDisappear
  5. viewDidDisappear
  6. viewWillUnload
  7. viewDidUnload
    下是这些点子的调用顺序图:
    图片 2 假是两独控制器:
    先后启动后:OneController的viewDidLoad—>OneController的viewWillAppear—>OneController的viewDidAppear

超越反到第二个界面:Two的viewDidLoad—>One的viewWillDisapear—>Two的viewWillAppear—->
One的viewDidDisappear—>Two的viewDidAppear

返第一个界面:Two的viewWillDisapear—>One的viewWillAppear—->
Two的viewDidDisappear—>One的viewDidAppear
(one的view不需再次创造)

重超越到第二个界面:和第一次同,two的view需要创造。

 

 

 

-4.导航控制器的动)

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>

4.导航控制器的下

回顶部

导航控制器本身和其它控制器没什么太要命区别,但是导航控制器可以承受页面的条状,用来保管均等组控制器,这些为管制之控制器成为她的分段控制器(一定和子类的定义区别开)

** 使用手续:
1> 创建、初始化一个导航控制器: UINavigationController.
2> 设置UIWindow的rootViewController为UINavigationController.
3> 通过调用push方法上加子控制器到UINavigationController。
** 注意:谁是最后一个push进来的,当前亮的尽管是何许人也ViewController,在-
(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中

UINavigationController *nav = [[UINavigationController alloc]init];
self.window.rootViewController = nav; // 设置为window的根控制器  

MKOneViewController *oneVC = [[MKOneViewController alloc]init]; 
[nav pushViewController:oneVC animated:YES]; // 将页面跳转到oneVC的view

貌似的应用程序中,如果生导航控制,会以创建导航控制器的下指定它的始控制器,而休是采用push的方式以上马控制器入栈push:

OneViewController *oneVC = [[OneViewController alloc]init];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:oneVC];
self.window.rootViewController = nav;

NavigationController以下几个办法吧较常用:

[nav popViewControllerAnimated:YES]; // 弹出栈顶的控制器, 返回

[nav popToRootViewControllerAnimated:YES]; // 依次弹出栈顶控制器,直到显示根控制器的view

假定惦记装导航条的一部分性质,需以导航控制器的道岔控制器中分头安装:
当每个控制器的viewDidLoad方法中设置当前控制器的navigationItem属性。
navigationItem属性的具体内容:
* title属性
* titleView属性
* leftBarButtonItem特性:只能设置左上角的一个按钮
* leftBarButtonItems性能: 可以安装左上角有差不多个按钮
* rightBarButtonItem特性:只能设置右上比赛的一个按钮
* rightBarButtonItems性能: 可以设置右上比有差不多个按钮
* backBarButtonItem属性: 设置下一个控制器,
左上斗的按钮。默认情况下,该按钮文字与上一个控制器的title文字相同。
假若下storyboard设置导航栏和它们的字控制器,需要注意的是:导航控制器向子控制器连线的下选择的凡relationship
segue:view controllers。

 

 

 

-5.UITabBarController的略以)

接下来配置JDK为1.8(这个看个人,因为我电脑里JDK版本也1.8)和Tomcat为7:

5.UITabBarController之简便用

归来顶部

大多跟navigationController的缔造方式同样
补充加子控件的上可用
viewControllers属性或者setViewControllers:方法上加一个控制器数组
而是非克采取childViewController属性,这是一个单独念之性质,下面是一个简单的以例子:

// 1.创建self.window
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
// 2.创建tabBarController控制器并设置它的子控制器,同时设置为window的根控制器
UITabBarController *tab = [[UITabBarController alloc]init];

OneViewController *one = [[OneViewController alloc]init];
TwoViewController *two = [[TwoViewController alloc]init];
ThreeViewController *three = [[ThreeViewController alloc]init];

//    [tab setViewControllers:@[one, two, three]];
tab.viewControllers = @[one, two, three];

self.window.rootViewController = tab;
// 3.将window设置为主界面并显示
[self.window makeKeyAndVisible];

通过storyboard设置导航栏,是以导航栏显示的时用享有的按钮都来得了出来,而未像对每个子控制器设置的导航那样延迟加载。
注意连线时,选择的凡relationship
segue

-6.TabBarController>>NavigationController>>ViewController主流框架)

<build>    
   <plugins>        
   <!-- Compile -->        
   <plugin>            
      <groupId>org.apache.maven.plugins</groupId>            
      <artifactId> maven-compiler-plugin</artifactId>            
      <version>3.3</version>            
      <configuration>                
         <source>1.8</source>                
         <target>1.8</target>            
         </configuration>        
   </plugin>        
   <!-- Test -->        
   <plugin>            
      <groupId>org.apache.maven.plugins</groupId>             
      <artifactId>maven-surefire-plugin</artifactId>            
      <version>2.18.1</version>            
      <configuration>                
         <skipTests>true</skipTests>            
      </configuration>        
   </plugin>        
   <!-- Tomcat -->        
   <plugin>            
      <groupId>org.apache.tomcat.maven</groupId>            
      <artifactId>tomcat7-maven-plugin</artifactId>             
      <version>2.2</version>            
      <configuration>                
         <path>/${project.artifactId}</path>            
      </configuration>        
   </plugin>    
 </plugins>
</build>

6.TabBarController>>NavigationController>>ViewController主流框架

回顶部

眼前之多数次还利用了TabBarController>>NavigationController>>ViewController主流框架,window的绝望控制器是一个UITabBarController,其子控制器为多单UINavigationController,每个NavigationController可以segue或者modal出任何的控制器。

再度然后配置打包类型也war包:

<packaging>war</packaging>

说到底安排Servlet、JSP、JSTL(Maven三坐标必须提供,之后的Servlet和JSP因为Tomcat自带有相应的jar包,故scope设置也provided;而JSTL是于运作时索要,编译时未待,故scope设置也runtime):

<dependencies>        
   <!-- 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>        
   <!-- JSTL -->        
   <dependency>            
      <groupId>javax.servlet</groupId>            
      <artifactId>jstl</artifactId>            
      <version>1.2</version>            
      <scope>runtime</scope>        
   </dependency>    
</dependencies>

顶之,Maven的布置也形成了(确实比Eclipse之类的配置简单的基本上)。

3.转换为Java Web项目
但待3步,轻松搞定,
a.在main目录下新建webapp目录。
b.于webapp目录下新建WEB-INF目录。
c.以WEB-INF目录下新建web.xml。
此时,屏幕右下比赛会有只提醒:

图片 3

那么表示,web项目已经创造好。

4.编写Servlet类和JSP页面
于main目录下的java目录下新建包,包名,然后新建一个Servlet(HelloServlet),该Servlet负责页面跳转,并且将手上时空转移为正规格式传递到页面中。(在这边产生一些,我仍在黄勇先生的步子在Servlet页面跳转时候的路是”/WEB-INF/jsp/hello.jsp”,但是页面一直报错提示404,后来我找找资料才找到,页面不能够写在”/WEB-INF”目录下,于是改化下面是样子就好显示了):

package org.smart4j.chapter1;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{    
      @Override    
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        
       DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
       String currentTime = dateFormat.format(new Date());        
       req.setAttribute("currentTime", currentTime);        
       req.getRequestDispatcher("/jsp/hello.jsp").forward(req, resp);   
   }
}

尔后新建一个当显示的JSP页面,该页面收取Servlet传递过来的参数并经JSTL表达式显示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
  <title>Hello</title>
 </head>
 <body>
  <h1>Hello!</h1>
  <h2>当前时间为:${currentTime}</h2>
 </body>
</html>

5.配置Tomcat
形容好页面及Servlet之后虽需要配备一个服务器,把写的东西在好显得出。在这里一定是要是安排Tomcat服务器了:
  a.点击右上角工具栏中之“Edit Configurations…”(这是一个下拉框)。
  b.点击左上比赛的“+”按钮,选择“Tomcat Server/Local”。
  c.Name自己打个名字,然后去丢勾选的After launch。
  d.点击Application
server右边的“Configure…”按钮,配置Tomcat(这个会自动帮您摸你电脑及的Tomcat)。
 
e.切换到Deployment选项卡,点击右侧“+”按钮,选择“Artifact…”选项,在弹出框中挑选“项目名为:war
exploded”,点击OK,然后于Application context中输入型名为。
  f.切换回Server选项卡,在On frame deactivation下拉框选择“Update
resources”选项,点击OK。
交者,Tomcat配置好。

6.上传到git
本人按在写上的法子上传时候一直提示错误:“fatal: The current branch master
has no upstream
branch.”。后来自己而更打git上先clone下来,然后将库房导入项目根本目录下
之后才正常提交,可能是本人操作有题目,但是自己耶直尚未找到问题在哪儿,只好用最为愚蠢的计了。。。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图