分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
前言
从零开始一步一步的搭建一个Struts2的web项目。
工具:eclipse
搭建过程
首先,创建一个动态的Web工程,结构如下:
然后我们加入一些项目所需的jar包,将其放入WEB-INF下面的lib目录下面,然后加入到项目中:
jar包下载地址:http://mirrors.hust.edu.cn/apache/struts/2.5.13/struts-2.5.13-all.zip
这里包含了基本的所有需要的jar包,我们选取一些我们这个最简单的项目需要的。
接着我们来配置 web.xml
我们再这里配置一个权限过滤器,过滤所有的路径,加入如下代码:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>HelloStruts2</display-name> <filter> <filter-name>hellostruts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>hellostruts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
web.xml配置完成之后,我们来进行一些struts的配置。
在 src 目录下创建 struts.xml,加入如下代码:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts></struts>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在 src 目录下面创建一个 Struts2 的 Action(下图中的HelloStrutsAction),继承ActionSupport基类。
Action中加入如下代码:
package com.struts.trio;import com.opensymphony.xwork2.ActionSupport;public class HelloStrutsAction extends ActionSupport { @Override public String execute() throws Exception { // TODO Auto-generated method stub return "index"; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
上面的代码中我们重写了基类中用以处理用户请求的execute()
方法。
上述方法的返回值为index
,那么程序要怎样识别并返回相应的界面呢?
所以就需要定义逻辑视图与物理资源之间的映射
在struts.xml
中增加如下代码:
<struts> <!-- 定义逻辑视图与物理视图之间的联系 --> <package name="trio" extends="struts-default"> <action name="index" class="com.struts.trio.HelloStrutsAction"> <!-- 将index映射到物理地址 --> <result name="index">/index.jsp</result> </action> </package> <!-- end --></struts>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
这时候就会返回WebContent
目录下面的index.jsp
文件了。
我们新建这个index.jsp
文件,加入如下代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h1>hello struts2 login success!</h1></body></html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
到这里,一个Struts2的项目就完成了,放在服务器上面跑一下,如果最终结果如下,说明你也创建成功了!
上面主要是一个Struts2
的大致模型,关于这个Action
的用法见下面:
数据交互
现在就会用到上面刚搭建的那个架构来进行数据的交互。
我们来设计一个应用场景,定义需求如下:
- 这是一个用户登录的页面(用户名,密码)
- 登录成功,跳转到
success.jsp
- 登陆失败,跳转到
failure.jsp
我们就在上面的基础上来完成这个需求:
首先我们将index.jsp
改成一个含有登录表单的文件:
引入Struts2
的标签库:
<!-- 引入struts的标签库--><%@ taglib uri="/struts-tags" prefix="s"%>
- 1
- 2
最后代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- 引入struts的标签库--><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登录</title></head><body> <s:form action="index"> <s:textfield name="username" key="用户名"></s:textfield> <s:textfield name="password" key="密 名"></s:textfield> <s:submit key="登录"></s:submit> </s:form></body></html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
注1:更多有关Struts2
标签的可以参考:Struts2标签
注2:表单中的提交地址(index),与struts.xml
中此处的配置相对应:
说明,点击按钮,数据会传到com.struts.trio.HelloStrutsAction
这个Action
中。
接下来我们来接受前台传过来的数据:
当用户名为:admin,密码为:123456 时候登录成功,反之失败。
则,Action
中的代码修改为如下:
package com.struts.trio;import com.opensymphony.xwork2.ActionSupport;public class HelloStrutsAction extends ActionSupport { //定义请求参数的 username 和password //与前台jsp中表单中的name属性相同 private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() throws Exception { // TODO Auto-generated method stub String userName=this.getUsername(); String userPassword=this.getPassword(); if(userName.equals("admin")&&userPassword.equals("123456")){ ActionContext.getContext().getSession() .put("user", userName); //用户名存储在 session 用于返回界面显示 return "success"; } return "failure"; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
因为Action
的返回值发生了改变,则struts.xml
中的相应的映射改为:
<struts> <!-- 定义逻辑视图与物理视图之间的联系 --> <package name="trio" extends="struts-default"> <action name="index" class="com.struts.trio.HelloStrutsAction"> <result name="success">/jsp/success.jsp</result> <result name="failure">/jsp/failure.jsp</result> </action> </package> <!-- end --></struts>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
接下来我们创建两个返回界面相应的 jsp 文件:
在登陆失败界面直接显示:登陆失败
在登录成功界面显示:XXX(用户名)登录成功
对应的failure.jsp
就不过多说明,那么success,jsp
文件该怎样输出后台存入 session
的用户名呢?
ActionContext.getContext().getSession() .put("user", userName); //用户名存储在 session 用于返回界面显示
- 1
- 2
上面就是存储用户名的代码了,可知存储的key为”user”
我们使用JSP中的EL表达式获取session中的值,部分代码如下:
</head><body><h1>${session.user} 登录成功</h1></body>
- 1
- 2
- 3
- 4
好了,这个简单的实例就算是写完了,查看一下自己的项目是否能正确的跑起来吧!
项目测试
运行项目,输入用户名密码
点击登录
显示登录成功,至此,实例完成!
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to- HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 是通过欧拉积分
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram functionality to mermaid
section 现有任务
已完成 :done, des1, 2014-01-06,2014-01-08
进行中 :active, des2, 2014-01-09, 3d
计划一 : des3, after des2, 5d
计划二 : des4, after des3, 5d
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎