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)
上一篇 2021年12月17日 下午7:00
下一篇 2021年12月17日 下午7:00


相关推荐

  • stringstream的用法如何会出现-1为ffff的情况_string读取文件指定长度

    stringstream的用法如何会出现-1为ffff的情况_string读取文件指定长度【本文来自】http://www.builder.com.cn/2003/0304/83250.shtmlhttp://www.cppblog.com/alantop/archive/2007/07/10/27823.html使用stringstream对象简化类型转换C++标准库中的提供了比ANSIC的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库

    2022年5月3日
    73
  • 数据源odbc oracle,ODBC数据源连接Oracle数据库示例

    数据源odbc oracle,ODBC数据源连接Oracle数据库示例配置 ODBC 数据源 1 选择 MicrosoftODB 2 数据源名 连接字符串中的名字 用户名 数据库名字 SID 名 服务器名 数据库服务器 IP 地址 usingSystem Data Odbc privatevoidM stringcontec DSN DSN NAME UID USERNAME Pwd PASSWOR

    2026年3月18日
    2
  • mysql怎么退出命令行_linux退出数据库命令

    mysql怎么退出命令行_linux退出数据库命令linux下fdisk命令的使用方法关于fdisk-l一些数值的说明Disk/dev/hda:80.0GB,80026361856bytes255heads,63sectors/track,9729cylindersUnits=cylindersof16065*512=8225280bytes这个硬盘是80G的,有255个磁面;63个扇区;9729个磁柱;…

    2025年7月27日
    5
  • sleep和wait区别

    sleep和wait区别sleep 方法我们首先要知道该方法是属于 Thread 类中的 而 wait 方法 则是属于 Object 类中的 sleep 方法导致了程序暂停执行指定的时间 让出 cpu 该其他线程 但是他的监控状态依然保持者 当指定的时间到了又会自动恢复运行状态 在调用 sleep 方法的过程中 线程不会释放对象锁 wait 方法而当调用 wait 方法的时候 线程会放弃对象锁 进入等待此对象的等待锁定池 只有针对此对象调用 notify 方法后本线程才进入对象锁定池准备获取对象锁进入运行状态

    2026年3月20日
    3
  • java postconstruct_SpringBoot @PostConstruct原理用法解析

    java postconstruct_SpringBoot @PostConstruct原理用法解析前言本节我们将学习一下 PostConstruc 的用法 概述 PostContruct 是 spring 框架的注解 在方法上加该注解会在项目启动的时候执行该方法 也可以理解为在 spring 容器初始化的时候执行该方法 项目启动时 初始化定时器 PostConstruc ListjobList jobDao selectJobAll for

    2026年3月26日
    1
  • 机器人展亮点:各类机器人齐聚

    机器人展亮点:各类机器人齐聚

    2026年3月13日
    1

发表回复

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

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