s有一天,教你开始truts2

s有一天,教你开始truts2

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

s有一天,教你开始truts2此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

写在前面

  • 他也是一个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依赖的库文件
    说明:
    • project依赖org.json库。採用的是:org.json ,下载的是源码。能够打包成json.jar,更方便的使用
    • project依赖httpclient。下载地址:httpclient ,使用能够查看它提供的手冊
    • project还依赖struts2提供的某些jar包,记得加入

终于效果

主页面
查询页面

PS:

一些问题记录:

參考资源

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117844.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • matlab中fmincon函数求最大值,matlab fmincon函数用法

    matlab中fmincon函数求最大值,matlab fmincon函数用法满意答案ufm427242013.09.07采纳率:55%等级:12已帮助:8663人你的代码中调用fmincon函数中@total1不应该是@myfun目标函数吗,后面的那个@total1应该是@mycon为非线性约束functionf=myfun(x)f=0.192457*1e-4*(x(2)+2)*x(1)^2*x(3);function[c,ceq]=mycon(x…

  • 上位机软件开发入门

    上位机软件开发入门上位机是指:人可以直接发出操控命令的计算机,一般是PC,屏幕上显示各种信号变化(液压,水位,温度等)。下位机是直接控制设备获取设备状况的的计算机,一般是PLC/单片机之类的。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般模拟量),转化成数字信号反馈给上位机。上下位机都需要编程,都有专门的开发系统。

  • J2ME开发专题[通俗易懂]

    J2ME开发专题[通俗易懂]http://www.csdn.net/subject/j2meTools/ 

  • docker(9)Dockerfile制作镜像[通俗易懂]

    docker(9)Dockerfile制作镜像[通俗易懂]前言如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本Dockerfile编写

  • 第一个汇编程序「建议收藏」

    第一个汇编程序「建议收藏」本文将开始编写完整的汇编语言程序,用编译器将它们编译成为可执行文件(如:*.exe文件),在操作系统中运行。本文地址:http://www.cnblogs.com/archimedes/p/assem

  • CentOS7 64位安装mysql教程,亲测完美

    CentOS7 64位安装mysql教程,亲测完美从最新版本的linux系统开始,默认的是Mariadb而不是mysql!这里依旧以mysql为例进行展示1、先检查系统是否装有mysqlrpm-qa|grepmysql1这里返回空值,说明没有安装这里执行安装命令是无效的,因为centos-7默认是Mariadb,所以执行以下命令只是更新Mariadb数据库yuminstallmysql1删除可用yumremovemysql12、下

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号