s有一天,教你开始truts2

s有一天,教你开始truts2

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

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

写在前面

  • 他也是一个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:

一些问题记录:

參考资源

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • latex 参考文献排序_中文参考文献怎么排序

    latex 参考文献排序_中文参考文献怎么排序最近由于需要开始尝试使用LaTeX。瞎忙活了好多天,最近总算有一点点眉目了。由于以前没有接触过LaTeX,而且网上有好多种不同的编译、编辑工具,我也不知道用哪个。偶尔看到LyTeX:LyTeX是一个绿色的中文TeX套装,它包含绿色版还是安装版,无论哪种版本都不会与系统的其它TeX套装冲突。它包含了LaTeX,XeTeX,TeXworks和LyX,特别地包含了绝大部分

    2025年9月7日
    6
  • java微信企业号40029_微信企业号OAuth2接口40029错误解决方案

    java微信企业号40029_微信企业号OAuth2接口40029错误解决方案微信网页授权获取到的code只能使用一次(5分钟内有效),使用一次后,马上失效。页面授权跳转成功,根据code也换取到openid了。此时刷新页面,并不会再次进行授权,而是直接刷新了一下上一次授权跳转后的链接,带的还是上一次的code(如果你复制当前页面的链接,会发现它就是请求授权的链接,然而,刷新的时候,它访问的并不是这个请求授权链接)。因为上一次的code已经使用过,再根据…

    2022年5月1日
    101
  • 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁「建议收藏」

    三、客户端配置  运行“Gpedit.msc”打开组策略编辑器。在组策略编辑器中,依次单击“计算机配置→管理模板→Windows组件→WindowsUpdate”。在右侧双击“配置自动更新”,将自动更新策略设置为“启用”,并设置为“自动下载并计划安装”(图4)。图4双击“指定IntranetMicrosoft更新服务位置”,选择“已启用”项,在“为检测更新设置Intranet夹新服务”下方输入…

    2022年4月18日
    40
  • 广州大学计算机控制实验,计算机网络实验三

    广州大学计算机控制实验,计算机网络实验三

    2021年11月27日
    42
  • 活期存款利息的计算方法包括_活期存款计算利息天数

    活期存款利息的计算方法包括_活期存款计算利息天数因为活期存款的利息很低,所以,人们对活期存款的利息怎样计算,并不是十分在意。我也如是。可是前些日子我陪一位老同事去买国债,在回家的路上我们偶尔谈到了这个问题,有些问题我也不太明白。但是,我还是想把这个

    2022年8月4日
    4
  • javaweb酒店管理系统设计与实现_酒店管理信息系统分析与设计

    javaweb酒店管理系统设计与实现_酒店管理信息系统分析与设计随着人们生活质量的提高和对网络的依赖,对酒店的需求量越来越大并且更需要网络来实现预订酒店等功能,它作为一个服务性行业,从客房的营销即客人的预定开始,到入住登记直到最后退房结账,整个过程应该能够体现以宾客为中心,提供快捷方便服务,给宾客感受一种顾客至上的享受,提高管理水平,简化各种复杂操作,在最短时间内完成酒店业务规范操作,这样才能令旅客舒适难忘。目前,我国酒店服务业信息化管理的进程缓慢,跟国外的酒店相比管理依然落后。在激烈的酒店业竞争中,如何能把握机会,保持自己的优势,立于不败之地呢?这就需要提供最好的服务

    2022年9月14日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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