怎么用 Solon 开发基于 undertow jsp tld 的项目?(新)
Solon
开发 jsp
项目是非常简单的,只要改用 jetty
启动器 或者 undertow
启动器,其它也没特别之处了。此文用 undertow + jsp + tld
这个套路搞一把:
一、 开始Meven配置走起
用solon 做 undertow + jsp 的开发;只需要配置一下 meven 即可(不需要其它的额外处理或启用)
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>1.7.2</version>
</parent>
<dependencies>
<!-- 添加 solon web 开发包 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web</artifactId>
<type>pom</type>
<exclusions>
<!-- 排除默认的 jlhttp 启动器 -->
<exclusion>
<groupId>org.noear</groupId>
<artifactId>solon.boot.jlhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加 undertow 启动器 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.boot.undertow</artifactId>
</dependency>
<!-- 添加 undertow jsp 扩展支持包 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.extend.undertow.jsp</artifactId>
</dependency>
<!-- 添加 jsp 视图渲染器(可以添加一堆别的view插件) -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.view.jsp</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
二、 其它代码和平常开发就差不多了
//资源路径说明(不用配置)
resources/application.properties(或 application.yml) 为应用配置文件
resources/static/ 为静态文件根目标
resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存)
//调试模式:
启动参数添加:-deubg=1
- 添加个控制器
src/main/java/webapp/controller/HelloworldController.java
@Controller
public class HelloworldController {
//这里注入个配置
@Inject("${custom.user}")
protected String user;
@Mapping("/helloworld")
public ModelAndView helloworld(Context ctx){
UserModel m = new UserModel();
m.setId(10);
m.setName("刘之西东");
m.setSex(1);
ModelAndView vm = new ModelAndView("helloworld.jsp"); //如果是ftl模板,把后缀改为:.ftl 即可
vm.put("title","demo");
vm.put("message","hello world!");
vm.put("m",m);
vm.put("user", user);
vm.put("ctx",ctx);
return vm;
}
}
- 再搞个自定义标签
src/main/java/webapp/widget/FooterTag.java
(对jsp来说,这个演示很重要)
public class FooterTag extends TagSupport {
@Override
public int doStartTag() throws JspException {
try {
String path = Context.current().path();
//当前视图path
StringBuffer sb = new StringBuffer();
sb.append("<footer>");
sb.append("我是自定义标签,FooterTag;当前path=").append(path);
sb.append("</footer>");
pageContext.getOut().write(sb.toString());
}
catch (Exception e){
e.printStackTrace();
}
return super.doStartTag();
}
@Override
public int doEndTag() throws JspException {
return super.doEndTag();
}
}
- 加tld描述文件
src/main/resources/WEB-INF/tags.tld
(位置别乱改,就放这儿...)
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<description>自定义标签库</description>
<tlib-version>1.1</tlib-version>
<short-name>ct</short-name>
<uri>/tags</uri>
<tag>
<name>footer</name>
<tag-class>webapp.widget.FooterTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
- 视图
src/main/resources/WEB-INF/view/helloworld.jsp
<%@ page import="java.util.Random" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="ct" uri="/tags" %>
<html>
<head>
<title>${title}</title>
</head>
<body>
<div>
context path: ${ctx.path()}
</div>
<div>
properties: custom.user :${user}
</div>
<main>
${m.name} : ${message} (我想<a href="/jinjin.htm">静静</a>)
</main>
<ct:footer/>
</body>
</html>
三、 疑问
一路上没有web.xml ? 是的,没有。
四、 源码
源码:demo05.solon_mvc_undertow_jsp
怎么用 Solon 开发基于 undertow jsp tld 的项目?(新)的更多相关文章
- 怎么用 Solon 开发基于 undertow jsp tld 的项目?
Solon 开发 jsp 还是简单的,可以有 jetty 启动器 或者 undertow 启动器.此文用 undertow + jsp + tld 这个套路搞一把: 一. 开始Meven配置走起 用s ...
- Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- 基于JQuery+JSP的无数据库无刷新多人在线聊天室
JQuery是一款非常强大的javascript插件,本文就针对Ajax前台和JSP后台来实现一个无刷新的多人在线聊天室,该实现的数据全部存储在服务端内存里,没有用到数据库,本文会提供所有源程序,需要 ...
- 开发基于CXF的 RESTful WebService web 项目 webservice发布
配置步骤 开发基于CXF的 RESTful WebService 1.创建Web项目并导入CXF的jar 2.在Web.xml中配置 CXFServlet <servlet> <se ...
- Solon 开发,八、注入依赖与初始化
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...
- 为什么要用hibernate 与基于数据库表结构的项目开发
最近开始学习hibernate,其实并不知道要学习什么,有什么用.后来问了一下同事,他就说快捷方便简单,很多事情不用自己做他会帮你做好,但是我觉得不应该是这样的,于是我就去搜了一下,就搜到了一篇帖子, ...
- {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件
在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...
- Form_Form Builder开发基于视图页面和自动代码生成包(案例)
2014-01-06 Created By BaoXinjian
- 转】Mahout分步式程序开发 基于物品的协同过滤ItemCF
原博文出自于: http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ 感谢! Posted: Oct 14, 2013 Tags: Hadoopite ...
随机推荐
- Markdown使用心得(简单用法解析)
Markdown使用心得(简单用法解析) Markdown的优势 个人看来,MD的优势在于脱离对鼠标的依赖,在简单的熟悉后,从段落格式到字体特效的实现都可以完全脱离鼠标.避免了为了格式和艺术效果多次将 ...
- easy_enc
寻找main函数,步过好像没有main函数,这时候想要F5就只能找到对的函数了 F5以后发现进行的操作有很多,这里发现有几个都没用的 后面发现主要是对V5有操作,所以直接看有关于V5的操作函数 经过上 ...
- L2-033 简单计算器
#include <bits/stdc++.h> using namespace std; int cal(int a, int b, char c) { int t; if (c == ...
- (Good topic)快慢指针:链表的中间结点 (3.23leetcode每日打卡)
给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3, ...
- DX后台截图C++实现代码
DX后台截图C++实现代码 文章仅发布于https://www.cnblogs.com/Icys/p/DXGI.html和知乎上. 传统的GDI API (BitBlt)虽然可以完美的完成后台截图的任 ...
- redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
大家如果对使用netty搞这些http请求什么的感兴趣的,可以参观我自己创建的这个项目. nanshaws/nettyWeb: 复习一下netty,并打算做一个web项目出来 (github.com) ...
- 搭建前端项目时出现了.../dist/index.mjs:128 if (!require.cache) { ^ ReferenceError: require is not defined...
具体报错如下: 修改node_modules/vite-plugin-mock/dist/index.mjs 加入如下内容 // 解决报错问题 import { createRequire } fro ...
- django模型不应该作为参数传递给task
Django 模型对象.它们不应该作为任务的参数传递.当任务运行时从数据库重新获取对象几乎总是更好,因为使用旧数据可能会导致竞争条件. 想象一下以下场景,您有一篇文章和一个自动扩展其中一些缩写的任务: ...
- python异步编程之asyncio初识
async await介绍 用asyncio提供的@asyncio.coroutine可以把一个生成器标记为协程类型,然后在协程内部用yield from 等待IO操作,让出cpu执行权. 然而异步的 ...
- 酷表ChatExcel -北大出品免费自动处理表格工具
酷表ChatExcel是通过文字聊天实现Excel的交互控制的AI辅助工具,期望通过对表输入需求即可得到处理后的数据(想起来很棒),减少额外的操作,辅助相关工作人员(会计,教师等)更简单的工作.Cha ...