分类:代码

码农是第一生产力。

spring 入门之 spring-mvc + Tiles

spring-mvc 入门之 Hello World! 基础上添加 tiles 内容。

添加 POM 依赖

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-servlet</artifactId>
  <version>3.0.7</version>
</dependency>

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-jsp</artifactId>
  <version>3.0.7</version>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

修改 spring01-servlet.xml

  • 删除 InternalResourceViewResolver 定义的 bean
  • 添加 tiles 配置器和解析器
<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
  <property name="definitions">
    <list>
      <value>/WEB-INF/views/views.xml</value>
    </list>
  </property>
</bean>

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass">
    <value>org.springframework.web.servlet.view.tiles3.TilesView</value>
  </property>
</bean>

添加 tiles 模板

新建 WEB-INF/views 目录

新建 views.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
    "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>
  <definition name="template" template="/WEB-INF/views/template.jsp">
    <put-attribute name="header" value="/WEB-INF/views/header.jsp"/>
  </definition>

  <definition name="main" extends="template">
    <put-attribute name="content" value="/WEB-INF/views/content.jsp"/>
  </definition>
</tiles-definitions>

新建 jsp 模板文件

  • template.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>

<html>
<head>
  <title>Template</title>
</head>
<body>
  <tiles:insertAttribute name="header"/>
  <tiles:insertAttribute name="content"/>
</body>
</html>
  • 新建 header.jsp
<h1>this is header</h1>
  • content.jsp
<%@ page isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<p>Hello1, ${name} </p>
<p>Hello2, <c:out value="${name}"/> </p>

spring 入门之 spring-mvc

在 IDEA 中,新建工程

  • 工程类型为 maven
  • 选中 create from archetype ,选择 webapp 模板
  • 填写项目名称,完成创建

pom.xml 中添加 spring-mvc 依赖

  • 只要填写 artifactId。IDEA 自动完成 groupId,列出本地 maven 仓库中已有版本号。如果需要,可以手工将版本号修改成最新。
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.3.7.RELEASE</version>
</dependency>

修改 web.xml ,增加 spring-mvc servlet

<servlet>
  <servlet-name>spring01</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>spring01</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

新建 spring servlet 配置文件

  • 通过右键在 WEB-INF 目录下新建文件,类型选择 spring config
  • 文件名为 spring01-servlet.xml ,要与之前的 servlet-name 匹配
  • IDEA 自动完成 beans 标签
  • 注意:如果运行时提示找不到 sping-cache 库,可能是 beans 标签中的 spring-mvc 自动写成了 spring-cache ,需要手工修改。否则需要添加 POM 依赖。
<mvc:annotation-driven/>
<context:component-scan base-package="com.litchi"/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/"/>
  <property name="suffix" value=".jsp"/>
</bean>

新建 controller 类

  • 在 main 目录下新建 java 目录
  • 右键 Make directory as -> Source Root
  • 新建 MyController.java
@Controller
public class MyController {
  @RequestMapping("home")
  public String HomePage(ModelMap model) {
    return "home";
  }

新建运行配置

  • 服务器选择 tomcat7
  • 添加 deplyment,选择 exploded 版本

emacs25.1 org2blog 发布中文出错问题

使用 org2blog 发布博客时,提示出错信息如下:

error in process sentinel: url-http-create-request: Multibyte text in HTTP request: POST /xmlrpc.php HTTP/1.1

依次排查了以下可能的原因

  • 网络代理
    • 换成全局代理 podvpn,还是无法正常发布。
    • 使用 linode 上的 emacs,把 blog 文件复制过去,也无法正常发布。
  • wordpress 设置

    早上刚安装了 Disable comments 插件,该插件会禁用 ping 功能,会不会与此相关。麻烦的是,该插件写数据库,并且删除插件时不还原数据库,所以只能对整个 wordpress 进行还原。刚好前两天有个备份,花了点时间,可以正常还原。但问题还在。

  • emacs 插件升级

    将 emacs packages 还原到最后一个备份,不能解决问题。

  • 其它线索
    • linode 和 dell 电脑上的 emacs 无法正常发布 blog,但是 x200 上的 emacs 可以正常发布 blog。
    • 在出错信息中,中文被转换成了 unicode 数字形式。
    • 发布的博客中,如果没有中文,可以正常发布。

最后,从 github org2blog 官方问题列表中,搜到了 Issue 223 。该问题是 emacs25.1 引入的,一个 bugfix 导致了 multibyte http request 问题。

解决方法,修改 url-http.el 文件,注释掉以下几行,并 byte-compile

;; Bug#23750
; (unless (= (string-bytes request)
;            (length request))
;   (error "Multibyte text in HTTP request: %s" request))

chrome console 使用方法

  • 类选择器,输出一个数组
$$("body main article header div a")
  • 对输出数据进行 forEach 操作
$$("body main article header div a").forEach(function (e) { console.log(e.innerText); })