`

基于BS模式的航材电子商务交易平台(2)

阅读更多

4) 查看报价草稿时,系统将根据报价单代码查找报价单对象和对应的询价单对象。其时序图如图4-14所示:



 

4-14  查看报价草稿时序图

 

 

4.3.6  实时消息时序图

 

    用户在聊天窗口内输入相应的聊天内容,系统将会处理将其反馈给其他用户,其时序图如图4-15所示:



 

4-15  实时消息时序图

 

4.3.7  在线支付时序图

    用户在确认订单后,就可以选择在线支付了。其时序图如图4-16所示:

 



 

4-16  在线支付时序图

 

4.4  系统数据库设计与实现

根据系统的需要建立如下的表:

企业实体表(Corp):如表4-17所示:

4-17  Corp

 

列名

类型

长度

corpid

varchar

5

corpname_cn

varchar

50

corpname_en

varchar

50

nation

varchar

15

mad_cn

varchar

100

mad_en

varchar

100

telnum

varchar

15

faxnum

varchar

15

contact

varchar

20

postcode

double

10

email

varchar

30

corptype

varchar

3

ncorpcode

varchar

20

 

用户信息表(User):如表4-18所示:

4-18  User

 

列名

类型

长度

Usernbr

varchar

20

Ast

varchar

1

Auth_code

varchar

8

Cdate

date

 

Claim_txt

longtext

 

Email

varchar

30

Faxnum

Int

10

Fname

varchar

20

Funame_cn

varchar

20

Inq_claim

longtext

 

Lname

Varchar

20

Mphone

Int

15

Password

varchar

10

Postcode

int

7

Quote_claim

longtext

 

Role

varchar

20

Sale_claim

longtext

 

Sur_claim

longtext

 

Telnum

int

10

Uadd

varchar

100

Udate

date

 

Corp_id

varchar

5

 

企业认证的供应商表(Corp_Spl):如表4-19所示:

4-19  Corp_Spl

 

列名

类型

长度

Corp_id

varchar

5

Spl

varchar

5

Ldate

date

 

Notes

longtext

 

 

询价记录表(Inq)如表4-20所示:

4-20  Inq

 

列名

类型

长度

Iid

Varchar

20

Oic

Varchar

20

Buyerid

Varchar

20

Cdate

Date

 

Ifn

Varchar

20

Qfn

Varchar

20

Rem

Longtext

 

Status

Varchar

2

 

询价航材项次表(Inq_Parts)如表4-21所示:

4-21  Inq_Parts

 

列名

类型

长度

Iid

varchar

20

Iin

int

11

Bqu

int

11

Cert

varchar

45

Cnd

varchar

2

Kwd

varchar

30

Kwd_cn

varchar

30

Ltm

varchar

3

Mfr

varchar

8

Pnr

varchar

32

Pri

varchar

2

Rem

longtext

 

Unt

varchar

2

 

供应商收到的询价记录表(Inq_Spl)如表4-22所示:

4-22  Inq_Parts

 

列名

类型

长度

Iid

varchar

20

Seller_id

varchar

20

Buyer_id

varchar

20

Qid

varchar

20

Rdate

date

 

Resp_status

varchar

2

Sdate

date

 

 

 

 

第五章  航材电子商务系统的实现

    本章主要针对用户注册模块、找回密码模块、公告板模块、实时消息模块、用户登录模块、询价管理模块、邮件发送模块、报价管理模块和用户支付模块进行了系统的分析与实现。

5.1  用户注册模块

1)用户通过点击首页页面左边的“注册”按钮,通过阅读系统的“隐私声明”(claim_for_privacy_cn_2.htm),点击“我同意”进入注册页面,点击“我不同意”返回首页。

2)在同意系统的隐私声明后,通过MycountManager/USERREC.actionMycountManagerstruts2的命名空间)进行数据提交处理,在action注解中,将其返回到MyCountManager/USERREG.jsp页面,页面中会显示已经注册的航空公司、制造商、供应商以及维修商。

3)如果用户所在的企业并没有在系统中注册,那么首先要让用户注册其企业账户,系统将请求提交给REG_CORP_ADMIN.action,进行数据处理后,将页面返回到MyCountManager/REG_CORP_ADMIN.jsp

其中返回字符串为“next”时,将数据提交到MyCountManager/REG_CORP_ADMIN1.action;返回字符串为“input”时,则将页面返回到MyCountManager/REG_CORP_ADMIN.jsp

 

33到呢公路效果4)例如,在REG_CORP_ADMIN.jsp页面中,用户注册的企业代码为a3333,地址为zhejiangsheng,邮政编码为321004等等,通过点击“下一步”,将数据提交到MyCountManager/REG_CORP_ADMIN1.action,将页面返回到管理员注册界面MyCountManager/REG_CORP_ADMIN1.jsp。在这个action中,将会对企业信息和管理员信息进行保存,之所以没有在REG_CORP_ADMIN.action中对企业信息进行保存,就是为了保证在注册了管理员的同时,也注册了公司。

5)如果用户所在的企业已经在本系统中注册过,那么点击“我要注册个人用户”,页面则跳转到AEP_User_Reg.jsp

用户在个人注册时,需要通过自身企业管理员的审核(批准),在注册时需

填写公司管理员的代码和管理员的登录口令。

   系统在经过验证后,将把页面信息提交给MyCountManager/AEP_User_Reg.action,在返回“next”后,把信息提交给REG_CORP_USER.action处理,再把管理员信息反映在用户的注册界面中。

REG_CORP_USER.action的另外一个功能是保存MyCountManager/REG_CORP_USER.jsp中,用户输入的注册信息。

最后,用户注册成功后,还会像企业管理员注册那样,收到一封系统自动发出的电子邮件。

其流程活动图如图5-1所示:



 

5-1  用户注册活动图

 

5.2  找回密码模块

用户首先点击首页的“忘记密码”,则页面跳转到找回密码界面MyCountManager/AEP_User_getpass.jsp

用户输入相关信息,密码将以电子邮件的方式发送至用户邮箱。

此页面将用户输入的信息提交给MyCountManager/AEP_User_GetPass.action。之所以在信息提交给action之后,返回AEP_User_getpass.jsp页面,为的是将用户输入错误的信息经过action处理以后,能够及时反映给用户,增强用户的体验性。

其流程活动图如图5-2所示:



 

 

 

5-2  用户找回密码活动图

 

5.3  公告板模块

为了满足客户将自己产品信息公布出来的需求,有一个更好市场,公告板是必不可少的。其主页面为MessageBoard/BC_LISTAjax.jsp

用户通过点击页面的“发布公告”按钮,将会弹出一个填写具体需求信息的对话框,用户填写相应信息即可。

用户点击“发布”按钮以后,将信息提交给MessageBoard/AEPMessage.action进行保存,使得需求信息发布成功。

用户需要查询自己所需要的航材时,在相应的查询条件中输入相应内容,系统将显示其查询结果。

本模块的信息查询采用了ajax分页的技术,在使用中应该注意“中文”参数的传递,在客户端需要进行两次加密的过程,在服务器端需要进行两次解密的过程,以本系统为例:

客户端url进行两次加密:

var url="../MessageBoard/aepMessage.action?page="+page+"&ajax=yes&tag=list&sbj="+sbj+"&mty="+mty;

1) url = encodeURI(url);

2) url = encodeURI(url);

服务器端进行两次解密:

1) String type = ServletActionContext.getRequest().getParameter("mty");

2) type = URLDecoder.decode(type, "UTF-8");

5.4  实时消息模块

该模块采用了返回DWR的反向AJAX技术来实现这一功能。反向AJAX的基本概念是客户端不必从服务器端获取信息,服务器会把相关的信息直接推送到客户端。

处理轮询请求的过程通常是在服务器端编写一些代码,以更新附加到服务器端的每个客户端的会话。DWR会记录与之联系的每个客户端,分别存储每个客户端的会话。这一点与通常的HTTP会话不同。借助于此,可以调用javascript代码,下一个轮询请求会通知这些调用。

这里主要通过WebContext类获得DWR应用的web上下文,用ServetContext获得DWRServlet的上下文,以及通过web上下文获取访问本应用的客户端浏览器的ScriptSession。一旦获得当前页面的名称,就可以获取当前连接到这个页面的所有回话列表。然后,启用监听客户端当前页进程,把数据添加到客户端调用的方法中1

5.5  用户登录模块

4-23的左上角为用户登录区域,用户在输入了相关信息后,将信息提交给logonAction.action进行处理,在系统验证所输信息正确后,会在页面中显示出登陆效果。

在用户登录之后可以点击“退出”按钮,其处理方式是通过页面中传递一个用户退出的参数,传递到后台action中。在用户登录看不清验证码时,通常会点击“看不清,在换一张”这类的按钮,这就需要动态刷新验证码的技术,本系统也不例外。

在使用action进行验证码动态刷新时,验证码并不能按照规定显示出来,测试了很久也没有发现可靠的解决办法,故在本系统中采用了servlet的方法。图片路径定位选择了用servlet进行,但缺点是servlet被执行了两遍,在以后寻求变化。

servlet配置中为了防止被action过滤,要把原来系统自动添加的配置信息改为VImage.jsp,在JavaScript中的src定义图片路径时用“servletVImage.jsp + ? + Math.random();”(使用随机数是为了保证刷新出来的图片不一样)。

5.6  询价管理模块

1)用户通过点击首页中的“我的供应商联系人”链接,将请求提交给MyOrderParts/BUYSPLLIST.action,在action中把页面所需的显示信息储存在相应的 requestsession对象中,方便页面的调用,处理后将页面返回到MyOrderParts/BUY_SPL_LIST.jsp页面。

用户通过点击BUY_SPL_LIST.jsp页面中的“增加联系人”按钮,将弹出添加联系人对话框。

MyOrderParts/BUYSPLLIST.action中,不但要处理用户所有联系人的显示信息,还要处理在用户选择了相应的联系人后,进行保存的信息,这都需要页面向后台传递不同的参数,在后台进行判断后处理。

2)用户通过点击首页中的“我公司认证的供应商”链接,将页面信息提交给MyOrderParts/BUYCERSPL.action进行处理,同样在action中把页面所需要显示的信息保存在requestsession对象中,方便在对象页面的调用显示,处理后返回到MyOrderParts/BUY_CER_SPL.jsp页面中。

BUYCERSPL.action中,不但要处理对用户所在企业所有认证供应商的显示信息,还要处理在用户选择了相应的供应商后,进行保存的信息,这都需要页面向后台传递不同的参数,在后台进行判断后处理。

3)所有关于询价单信息的处理,都是用户在客户端通过将相应的请求提交给MyOrderParts/BUYINQEDIT.action来进行的。

用户将请求提交给MyOrderParts/BUYINQEDIT.action进行处理,在此action中可以根据用户不同的需求进行信息的处理,例如:增加新的询价单、发送询价单,查询所有询价单,查询一份具体询价单信息等。此类处理,都是根据请求参数的不同来进行判断处理的。

为了实现用户发布询价单的需求,用户只需点击“询价管理”中的新询价单链接,将请求提交给BUYINQEDIT.action之后返回到MyOrderParts/BUY_INQ_EDIT.jsp页面,便可以方便地按照系统给出的模板进行询价单的发送。

    用户在/BUY_INQ_EDIT.jsp中需填写相应的询价信息,选择发送的对象,添加需要询价的器材。点击“增加所涉及的器材”时会弹出对话框,用户只需填写相应的信息即可。

用户点击“发送”按钮后,系统将会自动的将询价单发送给相应的供应商,以便供应商能够及时的将报价单发送给用户。

    当用户想查询自己发送的询价单时,可以点击“我发出的询价单”按钮,同样客户端将把相应的信息提交给MyOrderParts/BUYINQEDIT.action进行处理,返回后页面跳转到MyOrderParts/BUY_SEND_INQ_LIST.jsp

用户可以点击相应的询价单代码,来查看询价单具体的内容,将相应信息提交给后台进行处理后,返回到MyOrderParts/VBUY_SENDINQ_EDIT.jsp页面。

询价单代码的生成规则为:生成询价单号,编码规则为:【企业代码/5+【年月日/8+【序列/7】。

其流程活动图如图5-3所示:



 

5-3  询价活动图

 

5.7  邮件发送模块

邮件发送的协议3

1)利用SMTP协议发送e-mailSMTP( Simple Mail Transfer Protocol ) TCP/ IP 协议的一部分,用于在Internet上对电子邮件进行路由传送,是Internet上应用最广泛的上层协议。

2)利用POP3协议发送EmailPOP3(Post Office Protocol 3)TCP/IP网络经常使用的邮政协议标准的最新版本。POP3协议允许客户通过暂时的TCP/IP 连接,从POP主机上取得电子邮件。POP协议最大的优点是不需要与网络保持不间断的连接,就可收取电子邮件。

在默认情况自下,POP3的端口号是110

其工作流程流程分为下面几步:

    1)  客户机发出请求,请求和服务器连接;

    2)  POP3 服务器应答,连接建立;

    3)  客户机和服务器交互命令/ 应答和数据;

    4)  结束连接。

登录邮件服务器有几个必要条件,首先要通过POP3邮件服务器和SMTP发信服务器的地址,还要提供登录服务器用户名和密码。先通过指定POP3服务器和SMTP服务器的网址属性创建一个session对象,然后再session对象中取得邮件存储对象,再利用用户名和密码通过store对象的connect方法进行连接,就可以对服务器上的邮件进行操作了。

    在邮件发送时需要保存用户当前发送或接受邮件的全部信息,包括用户名、口令、邮件发送和接收服务器名称、验证信息等,这些信息封装在MailUser类中。

Session中,有时需要对邮件的属性进行安全验证,这就需要一个安全验证类MailAuthenticator,其实现代码如代码5-4所示:

public class MailAuthenticator extends Authenticator{

       protected PasswordAuthentication getPasswordAuthentication() {

       return new PasswordAuthentication(MailUser.getUserName(), MailUser.getPassWord());

       }

}

代码5-4  MailAuthenticator.java

 

邮件发送模块增强了与用户的信息交流,增加了用户的体验,在前文中也展示了相关信息,只需在提交的action中调用相应的SendMail的方法便可以实现邮件的发送,这里不再赘述。

5.8  报价管理模块

1)用户在首页中通过点击报价管理中“收到的询价单”链接,将请求提交给MySaleparts/SALERECINQLIST.action,返回到MySaleparts/SALE_REC_INQ_LIST.jsp页面。

页面中显示出报价单代码,报价单号编码规则为:B_"企业代码_"+【询价单号】。如果询价单没有生成报价单,则可以通过点击“生成报价单”来生成报价草稿。

2)用户点击“生成报价单”来生成该询价单的报价草稿,将提交请求交由

SALERECINQLIST.action进行处理,最终将报价模板的页面MySaleparts/SALE_REC_INQ_EDIT.jsp显示出来。

        3)用户在SALE_REC_INQ_EDIT.jsp中输入相应航材的单价,总价,优惠价后,点击左下角的“生成报价草稿”,将请求再一次提交给SALERECINQLIST.action,处理后,页面返回到MySaleparts/SALE_REC_QFN_LIST1.jsp

页面中将显示航材对应的价格,用户也可以直接在文本框中进行航材价格的更改,点击“发送报价单”,将此报价单发送给相应客户。

4)用户通过点击首页中的“发出的报价单(草稿)”链接,可以查询用户所发出的所有报价单草稿,页面为MySaleparts/SALE_QFN_LIST.jsp

通过点击页面中的报价单代码,便可以对报价单进行编辑,页面为MySaleparts/SALE_REC_QFN_LIST1.jsp

        用户对页面中的数据加以更改后,便可以发送报价单了。

5)用户通过点击首页中的“我发出的报价记录”链接,可以查询用户所发出的所有报价记录,页面为MySaleparts/SALE_QFN_LIST.jsp

点击相应报价单代码后,用户仅能查看相应的报价单,“发送报价单”按钮不可用,页面为MySaleparts/SALE_REC_QFN_LIST2.jsp

6SALERECINQLIST.action的业务控制逻辑处理较为复杂,跟报价相关的用户请求都由其进行控制处理,通过页面中参数的传递来对请求信息进行处理,返回不同的页面。

其流程活动图如图5-5所示:



 

 

5-5  报价活动图

 

5.9  用户支付模块

    用户在确认订单后,通过点击订单界面的“支付宝即时到账”按钮,系统将会根据请求调用支付宝所提供的网络接口,从而完成此次在线交易。

 

 

第六章  测试与总结

前几章已经详细介绍了航材电子商务系统的各个功能模块,本章将对已经实现的功能进行功能和性能方面的测试。

6.1  测试方案概述

对系统进行测试时,主要是采用以黑盒法设计基本的测试方案,再用白盒法补充一些必要的测试方案的方法。

6.2  测试方法

对系统进行测试时,使用得最多的是黑盒测试的边界值分析方法。首先确定边界情况,选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值的数据。同时,应该即包括输入数据的边界情况又包括输出数据的边界情况。

等价划分法和错误推测法也是测试中使用到的黑盒测试技术。等价划分法是将输入输出数据划分为若干个等价类,再选取等价类中的一组数据进行测试。错误推测法是列举出程序中可能有的错误和容易发生的错误来进行测试。

6.3     功能测试

登录功能的测试报告见下表6-1

6-1  登录功能测试报告

 

测试项目

AEP站点

功能模块名

Login

测试目的

验证是否输入合法的信息,允许合法登陆,阻止非法登陆

测试数据

用户名=tom,密码=dddddd,验证码根据提示输入

序号

操作描述

数据

测试状态

1

直接点击“登录”按钮。

用户名为空

密码为空

 

返回登陆页面,让用户重新输入。

与预期结果相同。

正常

2

输入用户名。点击“登录”按钮。

用户名=tom

密码为空

 

返回登陆页面,让用户重新输入。

与预期结果相同。

正常

3

输入用户密码。点击“登录”按钮。

用户名为空

密码=dddddd

 

返回登陆页面,让用户重新输入。

与预期结果相同。

正常

4

输入用户名和密码,点击“登录”按钮。

用户名=aaa

密码=dddddd

 

显示警告信息:“您输入的用户ID不存在”。

与预期结果相同。

正常

5

输入用户名和密码,点击“登录”按钮。

用户名=tom

密码=aaaaaa

 

显示警告信息:“您输入的密码有误”。

与预期结果相同。

正常

6

输入用户名和密码,点击“登录”按钮。

用户名=tom

密码=dddddd

验证码输入有误

显示警告信息:“您输入的验证码有误”。

与预期结果相同。

正常

 

 

7

 

输入用户名和密码,点击“登录”按钮。

用户名=tom

密码=dddddd

验证码输入正确

进入AEP操作首页。

与预期结果相同。

正常

是否发现其它异常情况

无其它异常情况

是否清除

 

出现频率

错误等级

                 

 

6.4     性能测试

连接速度的测试报告见下表6-2

6-2  连接速度测试报告

 

测试项目

AEP站点

参考信息

需求分析中关于性能需求的说明

测试目的

验证系统响应速度能否达到性能需求

试步骤

序号

操作描述

测试状态

1

打开系统

1s-1min时间内得到服务器的响应。

3s时间进入打开系统。

正常

2

输入正确的管理员名,密码和验证码,登录。

1s-1min时间内进入AEP操作首页。

1s时间进入操作首页。

正常

5

在首页中点击“新询价单”。

1s-1min时间内进入新询价单页面。

2s时间进入新询价单页面。

正常

6

在首页中点击“我发出的询价单”。

1s-1min时间内进入询价单查询页面。

2s时间进入询价单查询页面。

正常

7

在首页中点击“我的供应商联系人”。

1s-1min时间内进入显示页面。

2s时间进入显示页面。

正常

8

在首页中点击“我公司认证的供应商”。

1s-1min时间内进入显示页面。

1s时间进入显示页面。

正常

9

在首页中点击“收到的询价单”。

1s-1min时间内进入收到询价单查询页面。

2s时间进入显示页面。

正常

10

在首页中点击“发出的报价单(草稿)”。

1s-1min时间内草稿报价单页面。

3s时间进入草稿报价单页面。

正常

11

在首页中点击“我发出的报价记录”。

1s-1min时间内进入报价单记录查看页面。

2s时间进入报价单记录查看页面。

正常

12

在首页中点击“发布信息(浏览)”。

1s-1min时间内进入信息发布(浏览)页面。

3s时间进入信息发布(浏览)页面。

正常

13

在首页中点击“查看/发送实时消息”。

1s-1min时间内进入查看/发送实时消息页面。

1s时间进入查看/发送实时消息页面。

正常

有无异常

无其它异常情况

是否清除

 

出现频率

错误等级

               

 

其它系统性能的测试过程与此相似,测试报告略。

6.5  测试结论

作者对此系统的功能、性能,以及可用性均进行了测试,通过对测试结果的分析总结得出:此系统的功能基本满足用户需求,性能基本达到需求,具有可用性和友好性。

但是测试用例有一定的局限性,测试环境和实际运行环境也存在着一定的差异,所以不能完全地、准确地测试出系统存在的问题,还需要在后期的维护过程中,对系统暴露出来的问题进行纠正和更新。

 

 

第七章  总结

通过本次的毕业设计(论文),使我对开发电子商务平台这门技术有了更深入的了解。在此次毕业设计中,我在学习掌握了计算机技术技术与应用、软件工程、SSH架构应用的基础上,综合运用了JSP动态网页制作,SSH框架,AJAX,DOJODWR,反向AJAXMySql数据库构建等技术,设计开发出了一个比较理想的航材交易电子商务平台,达到了预期的设计效果与目的,也掌握了如图7-1所示的控制器设计模型的思想。每个系统网站开发的建设一般都分为三个阶段,分别是网站规划和设计、网站的建设和网站的维护阶段。其中,网站的规划和设计阶段又分为确定建站目标、组织站点结构设计、外观与导航方案和收集资料四个步骤。



 

 

7-1  控制器设计模型

 

对一个系统的开发而言,它所包含的设计思想,并发处理有着不可估量的作用,这也是衡量一个系统优良的重要标志。生动的系统需要一些亮点来点缀,好比“万花丛中一点绿”一样,好的亮点设计可以让我们设计开发出的系统看起来充满生气且更有吸引力,从而牢牢抓住使用者的目光;相反,糟糕的亮点设计只会让浏览者感到厌烦。

在系统的开发过程中,我也曾遇到过一些棘手的问题,有时候也会犯一些常识性的(低级)错误。问题虽小,但我们绝不能忽视它,为避免和减少我们所犯常识性错误的概率,现总结如下:

1)      hibernate HQL语言 hql = "from Boards where bdid=" + boardId; boardIdint类型所以和String类型的属性值写法上有区别:hql = "from Users as b where b.username='" + userName + "'"; userNameString类型。

2)      hibernate延迟加载的异常:“no session or session is closed”。关于这个异常,是在延迟加载中,简单的理解就是当session已经关闭后,又出现了hibernate试图通过session从数据库中加载实际的数据集,所以报出session已关闭的错误。但是如果我们采用了延迟加载机制,希望在一些情况下,实现非延迟加载时的功能,在提供一个完整的AEPinq对象时,把所关联的AEPInqParts 信息在session关闭之后仍然可以使用。这就要采用hibernate.initialize方法,可以通过强制加载关联对象来实现这一功能。 Hibernate.initialize(inq.getAEPInqParts());Session.close(); 即可。

3)      遇到了String为空的情况,在执行时虽然有ifstring == “”)的判断,但是仍然不能符合需求,需加入ifstring == “” || string == null)。

4)      项目有几张表中定义了“双主键”,其中的数据在单个主键中出现了重复的现象,数据仍可保存,个人认为双主键可以看作是一个大的整合主键,仍不违背主键不重复的原则。例如:

    Idname 两个都是主键(双主键)

1   小明

1   小军

这样的数据是可以进行保存的。

5)      hibernate 加入注解时应加入的jar包:(过时了,3.5开始支持注解,不用再加入以下三种jar包了,但是需要hibernatevalidation产品,才能对属性进行非空、长度等等的约束验证)。

6)      htmlform表单的action="/url"(/开头的url地址),其会从http:// 127.0.0.1:8080这个根开始附加,我们要访问具体信息必需要加上项目的上下文(context),就是tomcat安装目录下wepapps/context(具体是你工程名字)这个文件夹名字,像这样<form action="/Struts2Study/namespace/test.jsp" method="post"> strutsform标签的action="/url"(/开头的url地址),struts2帮我们作了优化,他会自动为我们在htpp://127.0.0.1:8080/后面加上 项目的上下文,再附加action后的url,而这也是我们开发时想要的本意,象这样<s:form action="/namespace/test.jsp"> 其余的都是一样的 action="url" action="./url" 都表示当前路径 action="../" 表示上级路径。

7)        Ajax url传值乱码:

    两次加密和两次解密的过程:

客户端url要经过两次加密:

var url="../MessageBoard/aepMessage.action?page="+page+"&ajax=yes&tag=list&sbj="+sbj+"&mty="+mty;

1 url = encodeURI(url);  

2 url = encodeURI(url);  

服务器端经过两次解密:

1 String type = ServletActionContext.getRequest().getParameter("mty");

                2 type = URLDecoder.decode(type, "UTF-8");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 34.6 KB
  • 大小: 12 KB
  • 大小: 15.4 KB
  • 大小: 23 KB
  • 大小: 16.5 KB
  • 大小: 25.2 KB
  • 大小: 18.5 KB
  • 大小: 52.4 KB
  • 大小: 18.5 KB
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics