一天教你入门struts2
写在前面
- 自己也是一个java和java web的菜鸟。之前没有接触过java web方面的开发
- 想通过一个小项目,来熟悉struts2的开发流程
- 一个有趣的想法源于教研室项目上的一个功能实现–自己主动识别运营商,去做不同的处理。项目上採用的是IP地址库的方式,在本地做处理。这里为了简单就採用了淘宝提供的接口服务
- 已经将该项目作为开源项目放在:IP地址仓库 欢迎大家前来点赞
能够学到什么
- struts2的基本执行流程
- HttpClient和org.json库的使用
- 前端採用了bootstrap和ajax,做到了网页的自适应,后端返回json数据和前端交互
步入正题
- 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>
<!-- 设置常量实现动态调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- 名字必须唯一相应模块 -->
<package name="hello" extends="json-default">
<default-action-ref name="index" />
<action name="index" class="action.IPSearchAction" method="index">
<!--为了安全将其放在、WEB-INF/pages 不明确的也可放在webRoot 根文件夹下-->
<result name="success">/WEB-INF/pages/ip.jsp </result>
</action>
<action name="search" class="action.IPSearchAction" method="search">
<!--为了安全将其放在、WEB-INF/pages 不明确的也可放在webRoot 根文件夹下-->
<result name="success" type="json">
<param name="root">responseMap</param>
</result>
</action>
</package>
</struts>
- 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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/pages/ip.jsp</welcome-file>
</welcome-file-list>
</web-app>
- action文件
package action;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
public class IPSearchAction {
String ip;
Map<String, Object> responseMap; //查询的结果为json数据。struts2自己主动做序列化的工作
public Map<String, Object> getResponseMap() {
return responseMap;
}
public void setResponseMap(Map<String, Object> responseMap) {
this.responseMap = responseMap;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
System.out.println("input ip is: "+ip);
this.ip = ip;
}
public String search(){
setOutputValue();
return "success";
}
public String index(){
return "success";
}
public void setOutputValue() {
HttpClient httpclient = HttpClients.createDefault();
System.out.println("the input ip is" + ip);
URI uri = null;
try {
uri = new URIBuilder()
.setScheme("http")
.setHost("ip.taobao.com")
.setPath("/service/getIpInfo.php")
.setParameter("ip", ip)
.build();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpGet httpget = new HttpGet(uri);
HttpResponse response = null;
try {
response = httpclient.execute(httpget);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == HttpStatus.SC_OK) { //状态==200,返回成功
String result = null;
try {
result = EntityUtils.toString(response.getEntity());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(result);
JSONObject resultJson = new JSONObject(result);
int code = resultJson.getInt("code");
String country = null;
String region = null;
String city = null;
String county = null;
String isp = null;
if(code == 0) {
country = resultJson.getJSONObject("data").getString("country");
region = resultJson.getJSONObject("data").getString("region");
city = resultJson.getJSONObject("data").getString("city");
county = resultJson.getJSONObject("data").getString("county");
isp = resultJson.getJSONObject("data").getString("isp");
System.out.println("code is: "+ code + "country is: " + country + "area is "+region+"county is "+county+
"isp is "+isp);
}
responseMap = new HashMap<String, Object>();
responseMap.clear();
responseMap.put("country", country);
responseMap.put("region", region);
responseMap.put("city", city);
responseMap.put("county", county);
responseMap.put("isp", isp);
}
}
}
- 依赖的库文件
说明:- project依赖org.json库,採用的是:org.json ,下载的是源码,能够打包成json.jar,更方便的使用
- project依赖httpclient,下载地址:httpclient ,使用能够查看它提供的手冊
- project还依赖struts2提供的某些jar包,记得加入
终于效果
PS:
一些问题记录:
- struts2的静态资源的放置问题。參考:静态资源放置
- struts2更改项目名称,參考myeclipse更改项目名称 记得又一次部署tomcat和重新启动myeclipse
參考资源
一天教你入门struts2的更多相关文章
- 入门struts2.0
框架是什么? 1.应用程序的半成品. 2.可重用行公共的结构. 3.按一定规则组织的一组组件. model2 其实并不是一种全新的概念,很对人指出model2其实正好是经典的"模型(mode ...
- ●杜教筛入门(BZOJ 3944 Sum)
入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...
- Git从零教你入门(4):Git服务之 gogs部署安装
Git从零入门系列4: 先看上一篇文章: http://www.51testing.com/index.php?uid-497177-action-viewspace-itemid-3706817 今 ...
- 入职第一天:前端leader手把手教我入门Vue服务器端渲染(SSR)
继前段时间西安电面之后顺利拿到了OFFER,今天(5月2号)是我入职第一天,在简短的内部培训了一上午后,前端leader让我先了解下什么是vue的服务器端渲染(SSR). SSR,英文全称叫 Serv ...
- struts2系列(一):struts2入门(struts2的产生、struts2的工作流程、搭建struts2开发环境)
一. struts2的产生 struts1的缺点: 1. ActionForm过多,而且这个ActionForm在很大程度上又和VO(POJO)重复 ...
- web 08 struts2入门 struts2配置 struts包
电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...
- 阿里云学生机——Mysql配置---教小白入门篇
首先,我的学生机默认配置为:CentOS 7.2 64位 + Tomcat 8 + Jdk8 + MySQL5.7.16 扩展:Linux 如何查看 MySQL 版本号----使用命令 mysql - ...
- SVN入门-2分钟教你入门
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010540106/article/details/37317201 学习SVN首先我们应该知道 ...
- 手把手教你入门Yii2框架-1
前言概述: 我是一名PHP开发工程师,最拿手的是版本2.0的Yii框架,在培训班里老师没教我Yii框架,只是由于我弟弟(同行)擅长Yii框架,所以我用得最多的就是Yii2.0,后台我学了ThinkPH ...
随机推荐
- iptables 防火墙
运行源地址为192.168.10.10-192.168.10.50 这个网段的机器访问本机的20-25还有80.443.6379端口进来的流量 iptables -A INPUT -p tcp -m ...
- QT_1
QT概述 1.1 QT 是一个跨平台的C++图形用户界面应用程序框架 1.2 发展史: 1991奇趣科技 1.3 QT 版本:商业版.开源版 1.4 优点: 1.4.1 跨平台 1.4.2 接口简单 ...
- tensorflow-gpu install check
https://gist.github.com/mrry/ee5dbcfdd045fa48a27d56664411d41c#file-tensorflow_self_check-py-L16
- 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H)
目录 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛链接 竞赛题目 总结 北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H) 竞赛事件相关 竞赛 ...
- hdu5279 YJC plays Minecraft
题目描述 题解: 岛屿之间的边砍/不砍情况有$2^n$种, 但是需要剪掉所有的岛上都首尾相连的情况. $dp$一下对于完全图没有限制($f$)/有限制($g$)的情况数. 方程:$$f[i]=\sum ...
- 查看mysql二进制日志报错问题
在排查网站被黑时想通过Mysql二进制日志找出修改字段时间,但是使用mysqlbinlog报错: [root@zfszsw1 bin]# ./mysqlbinlog /opt/mysql-bin.00 ...
- windows文件备份到linux:windows定时任务+cwrsync+ssh免密码认证
一.安装cwrsync 二.创建密钥对,实现ssh免密码验证 linux服务器上 [root@zabbix ~]# ssh-keygen Generating public/private rsa k ...
- perl学习之:@_ $_
question 1 :数组@xxx调用时,每个元素应该用$xxx[0]/$xxx[1]... 来表示所以$_[0]表示@_的一个元素,和默认缺省变量$_无关,是两个东西请查阅数组元素调用相关章节 ...
- 基于flask的网页聊天室(四)
基于flask的网页聊天室(四) 前言 接前天的内容,今天完成了消息的处理 具体内容 上次使用了flask_login做用户登录,但是直接访问login_requare装饰的函数会报401错误,这里可 ...
- 学渣乱搞系列之扩展KMP的那点事
扩展KMP牵涉了一些相对运动的姿势,比较费解!本学渣看了一天的扩展KMP,打算写点东西...本文看后,出现的后果本人一概不负责.毕竟我不是很会表达. 扩展KMP是搞什么灰机的?本学渣所知道的扩展KMP ...