SpringMVC配置篇

Spring为Java开发带来了春天。 ——不知道谁说的,反正很有名
为什么我们要学习SpringMVC,而不是像往常一样开发web程序?

试想一下,Java Web开发是怎么样的?你要构建一系列的Servlet,一系列的Filter。

构建一个Servlet,用复杂的xml或者WebServlet注解,继承了HttpServlet,你要实现doPost或者doGet方法,在结束请求的时候你要重定向到另一个Servlet/jsp等。SpringMVC为你简化了很多操作。首先我们来用maven构建一个项目HelloSpringMVC(详细可以看4.14日的博客)。然后在pom.xml贴上如下代码:

<dependencies>
    <!--Spring-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.16.RELEASE</version>
    </dependency>
    <!--servlet-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!--SpringMVC-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.11.RELEASE</version>
    </dependency>
    <!--junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!--apache-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.1</version>
    </dependency>
</dependencies>

这样我们的环境就配置好了。

一、我的Servlet呢?
要知道的是,SpringMVC基于Servlet的,但是你不用自己去实现HttpServlet的接口,SpringMVC里面有一个叫做DispatcherServlet的东西,所有的请求都会被DispatcherServlet截获,找到Controller,然后返回View。多说无益,我们实战。

二、配置启用SpringMVC:完全利用注解,最小但可用。(参考Spring In Action这本书,推荐)
1、我们在src/main/java中新建一个package mvc.config,在里面新建三个类:WebInitalizer、RootConfig和WebConfig。

package mvc.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

//对于AbstractAnnotationConfigDispatcherServletInitializer,我们目前只需要知道所有Spring应用的上下文
//都会基于它来帮助我们配置DispatcherServlet
public class WebInitalizer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
    @Override
//    RootConfig定义
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {RootConfig.class};
    }

    @Override
//    ServletConfig定义
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {WebConfig.class};
    }

    @Override
//    全部的"/"请求
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}
package mvc.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;


@Configuration
@EnableWebMvc
//       会扫描mvc.web包,里面是Controller
@ComponentScan("mvc.web")
public class WebConfig extends WebMvcConfigurerAdapter{
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
//        view存放在WEB-INF下的views里面,请在此目录创建views目录
        resolver.setPrefix("/WEB-INF/views");
//        返回view类型为jsp文件
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}
package mvc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;


@Configuration
@ComponentScan(basePackages = {"mvc"}, excludeFilters = {@ComponentScan.Filter(type =
        FilterType.ANNOTATION, value = EnableWebMvc.class)})
public class RootConfig {
}

这样我们的SpringMVC环境就配好了,但是看到这里,你应该读一遍代码。虽然接下来你的操作是复制粘贴,但是你可以很明显的发现,我们现在目录结构还不行。
我没有WEB-INF,我没有web.xml……
……(我怕我讲的太详细你们都不好好学习🙃️)
别急。经过一番操作(右击你的项目名称,Add Frameworks Support,勾一下Web Application然后OK即可),你的目录文件结构应该是介样子滴:

2、我们在web包中新建一个类,叫HelloMVCController:

package mvc.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

//你是一个Controller,你要注册才行
@Controller
//请求你的服务器root/hellomvc时候被截获
@RequestMapping("/hellomvc")
public class HelloMVCController {
//    GET METHOD
    @RequestMapping(method = RequestMethod.GET)
//    为SpringMVC返回一个字符串,标志资源
    public String helloMVC() {
//        资源名字叫MVC,你也可以在这里写你的逻辑
        return "/mvc";
    }
}

3、我们在WEB-INF中新建目录views,新建jsp叫做mvc.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>MVC</title>
  </head>
  <body>
  <h1>Hello SpringMVC By HC</h1>
  </body>
</html>

4、大功告成,部署到Tomcat中吧!(我还是怕你们不会用Idea部署web项目,简单讲一下)
(1)界面右上角有个带三角的方框,点一下,然后Edit Configurations,点+号,配置你的Tomcat Server。(不知道什么是tomcat就去面壁吧)
(2)仔细看下面,有一个红色的提示说No artifacts marked for deployment,点一下右边的Fix,暂时点一下OK。
(3)IDE界面右上角有个Project Structure(找不到鼠标悬停找),然后在里面找到Artifacts,Output Layout中有AvaliableElements一栏,如果里面有东西,右键全选,然后选择put into WEB-INF/lib中(非常重要)!
(4)IDE点一下绿色的运行键,部署到Tomcat中。在你的浏览器访问:
http://localhost:8080/hellomvc/
或者你定义好到URL,如果出现了你定义好到JSP,那么大功告成。done。

总结一下:
1、为什么用SpringMVC,而不用Servlet?
你不觉得新建一个Servlet,那一堆doGet,doPost很复杂么。而且页面跳转就是返回一个字符串,不觉得很优雅嘛?

2、config包里面那么复杂一堆注解,什么意思啊?
代码中有注释的内容可以了解一下。没注释的,不懂可以先不管,等我之后更新了Spring的内容就可以很明白了。如果现在急切想知道,自学一下Spring也是很好的。

3、Idea好麻烦,Tomcat好麻烦……
撸猫吧,撸完再学。(Idea是很好的IDE)

4、还有问题,发邮件zhanghaozjk@outlook.com或者在下面评论🐶,今天就到这里

利用maven构建你的项目(Idea版本入门篇)

大家好,我HC又回来了。虽然仍然是N无(没工作没没女朋友没……)的状态🙃️。
言归正传,可能有部分人都没有听说过Maven,因为它藏在MyEclipse和Idea的小小角落里,如果是Eclipse还要去装插件。那么什么是Maven呢?

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
以上这一段是某百科上面前两段废话,我的解释就是:Maven可以很简单的帮你把环境配好。有多简单呢?用几个词就行。
设想一下你要配置一个Junit的环境,你需要按照规范在src目录下新建main和test的目录,在这两个目录下分别建立java、resource目录。另外你还需要把junit的jar文件下载下来保存到某个目录,不能挪动,再配置project的configurations,library中导入这些jar文件。略复杂,是吧?
但是我们有Maven。Maven怎么做的呢?(以下均发生在Idea IDE下,如果你是MyEclipse道理相通)
情况一、你要开始一个项目
1、你要开始新建一个project,在打开的界面左侧选择Maven
2、接下来写一个合理的GroupID和ArtifactId,一路Next,Finish。
3、在文件列表中找到一个很关键的Maven配置文件:pom.xml,打开它。
4、这是一个我们常见的xml文件,但是他很神奇,因为你只需要在这个里面写点东西就可以配置环境了。打开在里面添加代码:
<!--dependencies是dependency的root标签,需要添加的dependency都放在里面-->
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
5、OK,环境配好了,这时候我们的IDE已经等不及想要帮助我们配置环境了。点一下右下角跳出来的Import Changes。
6、接下来我们来写一下测试:
package maventest;
//在main/java中创建这个类
public class Calculator {
    public int add(int a, int b) {
        int ret = a + b;
        return ret;
    }
}
package maventest;

import org.junit.Test;
import static org.junit.Assert.assertEquals;

//在test/java中创建这个类
public class CalculatorTest {
    @Test
    public void testAdd() {
        int a = 3, b = 5;
        Calculator calculator = new Calculator();
        int ret = calculator.add(a, b);
        assertEquals(8, ret);
    }
}

这里教大家一个小窍门,当你输入assertEquals的时候IDE提示未找到类,这时候只需鼠标点上去,在键盘上选择alt+enter(Windows)/option+enter(macOS),选择合适的解决方案即可。

7、跑一下testAdd,绿色的,done。

情况二、我有项目,想用Maven构建。

1、右键点一下你的项目标题,选择Add Framework Support。

2、弹出的页面左侧找到Maven,勾选一下,选一下OK,接下来的工作同上,done。

Maven很容易,这里再来一个Tip:
我记不住这么多dependency,其实本身也不用记。Maven构建项目一定是基于网络的,需要用什么,Google搜一下即可。关键词:Maven+Framework。因你也可以发现各种框架控件目前都推荐使用Maven搭建,选择合适的版本(这里也可以看出用Maven改变当前的配置版本很方便),贴进你的pom.xml即可。

Today,done。明天还会更新的

10分钟搭建基于WordPress博客

  • 感谢阅读,这是我的第一篇文章。
  • 如题目所说,要10分钟搭建一个基于WordPress的博客你需要准备:
  1. 安装了Ubuntu 16.04 LTS 64bit的云服务器
  2. 申请域名、域名解析并通过备案(如果是国内的域名解析
  • 如果你使用centOS,请阅读之后发布的教程。以下是在Ubuntu下的操作。请Mac/Linux用户在Terminal使用ssh连接到你的云服务器,Windows用户可以选用putty进行操作。

一、准备 LAMP 环境

安装Apache2
    sudo apt-get install apache2 -y

安装成功后可以用浏览器访问你的服务器,如果有apache2的页面即安装成功。

安装PHP组件
    sudo apt-get install mysql–server mysql–client
    sudo apt-get install libapache2-mod-php7.0

第1行:安装PHP 7.0环境
第2行:安装PHP的相关组件

安装MySQL服务
    sudo apt-get install mysql-server mysql-client

安装过程中控制台会提示您输入MySQL的密码,您需要输入两次密码,并记住您输入的密码,后续步骤需要用到。

    sudo apt-get install php7.0-mysql

安装 php MySQL相关组件

安装phpmyadmin
    sudo apt-get install phpmyadmin -y

安装过程中,您需要根据提示选择apache2,再输入root密码和MySQL数据库的密码。

    sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

建立软连接(注:软连接的功能是为某一个文件在另外一个位置建立一个同不的链接)

    sudo service mysql restart
    sudo systemctl restart apache2.service

重启MySQL及Apache服务。

二、安装并配置 WordPress

安装WordPress
    wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.zip

从中国官网下载WordPress的压缩包。注意,此网站虽然是中国官网,但是速度偶尔会出现波动。如果波动很厉害,请复制上面的链接用你本机的下载器下载,在使用ftp的方式上传到服务器。关于ftp的搭建可以查找资料。

    sudo unzip wordpress-4.7.4-zh_CN.zip

解压WordPress包,解压完成后可以在你所处的文件夹下看到WordPress源码。

为WordPress配置数据库
    mysql -u root -p

进入MySQL的数据库控制台环境,并根据提示输入密码。

    CREATE DATABASE wordpress;

创建数据库,你也可以给数据库名字和以下所述的用户和密码user、password设置自己需要的样子,但请牢记。

    CREATE USER wordpressuser;

创建用户。

    SET PASSWORD FOR wordpressuser= PASSWORD("yourpassword");

创建密码。

    GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser IDENTIFIED BY"yourpassword";
    FLUSH PRIVILEGES;
    exit;

授予操作权限并退出数据库。

配置 WordPress
    sudo mv wordpress/* /var/www/html/
    sudo chmod -R 777 /var/www/html/
    sudo mv /var/www/html/index.html /var/www/html/~index~.html

把WordPress文件夹里的文件都复制到 /var/www/html/ 文件夹,因为apache服务默认访问这个文件夹。并给Apache默认的index.html改名,使Apache默认访问WordPress的index.php。

大功告成!(接下来请用http方式访问你的服务器,并根据提示操作即可)

最后,感谢WordPress。 ENJOY!