将应用程序最终用户映射到数据库用户似乎有三种常用方法.
似乎#3是Web应用程序开发中最常见的. 为什么没有更加强调其他两个选项?
Oracle鼓励像#2这样的技术使用其代理身份验证功能,原因如下:
有限的信任模型 -控制代表中间层可以连接的用户,以及中间层可以为用户承担的角色
可扩展性 - 通过支持轻量级用户会话并消除重新验证客户端的开销
通过将真实用户的身份保存到数据库,并启用对代表真实用户采取的操作的审计来实现问责制
我有一个Servlet,它返回一个在Internet Explorer和Firefox中通过HTTP"工作"的csv文件.当我通过HTTPS执行相同的Servlet时,只有firefox继续通过HTTPS下载csv文件.我认为这不一定是MSDN上描述的Internet 6或7问题:
消息是:
Internet Explorer无法从mydomain.com下载data.csv Internet Explorer无法打开此Internet站点.请求的网站不可用或无法找到.请稍后再试.
请注意,此消息后该网站仍处于"启动"状态,您可以继续浏览该网站,只需下载提示此消息的CSV即可.我已经能够通过IE浏览器从其他j2ee应用程序访问类似的文件,所以我相信这是我们的代码. 我们不应该关闭bufferedOutputStream吗?
UPDATE
是关闭还是不关闭输出流: 我在java团队论坛上问了这个问题,讨论也很有见地.最后,似乎没有容器应该依赖'client'(在这种情况下是你的servlet代码)来关闭这个输出流.因此,如果未能关闭servlet中的流导致问题,则更多地反映了servlet容器的不良实现而不是代码.我选择了来自Sun,Oracle和BEA的IDE和tortortials的行为,以及它们是否在关闭流时也不一致.
关于IE特定行为:在我们的案例中,单独的产品"Oracle Web Cache"引入了额外的标头值,这些标题值仅影响Internet Explorer,因为IE实现了"无缓存"要求(参见MSDN文章).代码是:
public class DownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
ServletOutputStream out = null;
ByteArrayInputStream byteArrayInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
try {
response.setContentType("text/csv");
String disposition = "attachment; fileName=data.csv";
response.setHeader("Content-Disposition", disposition);
out = response.getOutputStream();
byte[] blobData = dao.getCSV();
//setup the input as the blob to write out to the …Run Code Online (Sandbox Code Playgroud) 我有幸不做任何基于cgi-bin .cgi的web开发.但通常那些似乎没有"错过"那些日子的人.
我最近加入的项目在处理需要与具有基于CGI-BIN的API的遗留系统进行通信的页面时存在性能问题.该系统是COGNOS 7.
我收到的反馈是"COGNOS很慢",但其他人报告COGNOS取得了巨大成功,我认为它更多地与通过CGI-BIN的访问有关,而不是COGNOS本身的性能.
所有这些都说明了基于CGI-BIN的Web开发不具备性能,难度等等的主要问题......
我想在内部电子邮件新闻通讯的顶部放置一个目录,让读者可以"跳转"到他们感兴趣的时事通讯部分.就像是:
<ul>
<li><a href="#FUNDING">Funding Opportunities</a></li>
<li><a href="#DEVELOPMENT">Professional Development</a></li>
<li><a href="#BEST">Best Practices</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
然后,电子邮件通讯中的"再往下"有:
<h2><a id="FUNDING">Funding</a></h2>
<!--- news items about funding -->
<h2><a id="DEVELOPMENT">Professional Development</a></h2>
<!--- news items about professional development -->
<h2><a id="BEST">Best Practices</a></h2>
<!--- news items about Best Practices -->
Run Code Online (Sandbox Code Playgroud)
这在基于浏览器的HTML中运行良好,但我没有成功地使它在各种电子邮件客户端(gmail,groupwise,outlook)中工作.但是,我收到了似乎使用上述技术的电子邮件,我可以"滚动"电子邮件.我知道不同客户的支持会有所不同,这不一定是一个"好"的做法,但这是一个内部系统,几乎所有收件人都将使用GroupWise.
任何经验丰富的洞察到所需的特定附加标记(例如基础参考是什么?)将非常感激.
之前:
EUTQQGOPED
Run Code Online (Sandbox Code Playgroud)
后:
EUT-QQG-OPED
Run Code Online (Sandbox Code Playgroud)
下面的示例是我想出的将" - "添加到10个字符的字符串作为可读性要求的一部分.格式化模式类似于美国社会安全号码的格式.
有没有更简单,更简洁的方式来完成额外的格式?
public static void main(String[] args){
String pin = "EUTQQGOPED";
StringBuilder formattedPIN = new StringBuilder(pin);
formattedPIN = formattedPIN.insert(3, '-').insert(7, '-');
//output is EUT-QQG-OPED
println formattedPIN
}
Run Code Online (Sandbox Code Playgroud) 似乎vsize()和length()返回相同的结果.有谁知道何时使用vsize而不是长度的实际例子?
select vsize(object_name), length(object_name) from user_objects
Run Code Online (Sandbox Code Playgroud)
结果:
/468ba408_LDAPHelper 20 20
/de807749_LDAPHelper 20 20
A4201_A4201_UK 14 14
A4201_PGM_FK_I 14 14
A4201_PHC_FK_I 14 14
Run Code Online (Sandbox Code Playgroud) 您将如何编写SQL查询以更可读的形式获取blob的大小?例如,大型word文档存储在表格中的blob中.我想要执行类似的事情:
select fnc_getReadableSize(documents.doc) from documents where id = ?
Run Code Online (Sandbox Code Playgroud)
输出:23.4 MB
在我下面的例子中,我使用的是dijit.form.DateTextBox:
<input type="text" name="startDate" dojoType="dijit.form.DateTextBox" constraints="{datePattern:'MM/dd/yyyy'}" value='<c:out value="${sessionScope.adminMessageForm.startDate}"/>' />
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果用户开始在日期中输入"asdf",则字段变为黄色,并显示弹出错误消息The value entered is not valid..即使我删除constraints="{datePattern:'MM/dd/yyyy'}"它仍然有效.
在不详细说明原因的情况下,我希望能够保留dojoType并在特定情况下仍然阻止验证.
使用下面的例子,Joshua Bloch的防御性复制技术是否有优雅的Java实现?nullChecking确实是我认为的问题,但也许有一种更简单的方法来实现防御性复制.
public class Audit {
private Date dateCompleted;
...
public Audit() {
super();
}
//defensive copy of dateCompleted
public final Date getDateCompleted() {
if (dateCompleted != null){
return new Date(dateCompleted.getTime());
}else{
return null;
}
}
public final void setDateCompleted(Date dateCompleted) {
if (dateCompleted != null){
this.dateCompleted = new Date(dateCompleted.getTime());
}else{
this.dateCompleted = null;
}
}
...
}
Run Code Online (Sandbox Code Playgroud) 目标:
交换两个记录的主键而不会遇到ORA-00001:违反了唯一约束."有效"的解决方案(下面再说)只是一个愚蠢的黑客.在提交事务之前是否存在推迟约束强制执行的功能/技术?
至于动机 - 使用此数据的遗留应用程序存在设计缺陷并依赖于ID顺序和值 - 请求是交换PK值,如下所示:
BEFORE:
388 English
389 French
AFTER:
389 English
388 French
Run Code Online (Sandbox Code Playgroud)
什么不起作用:
BEGIN
UPDATE SPOKEN_LANGUAGES
SET id = 388
WHERE id = 389;
UPDATE SPOKEN_LANGUAGES
SET id = 389
WHERE id = 388;
END;
Run Code Online (Sandbox Code Playgroud)
黑客/解决方案"有效"
DECLARE
V_MAGIC_NUMBER NUMBER := 9999999;
BEGIN
UPDATE SPOKEN_LANGUAGES
SET id = 388 + V_MAGIC_NUMBER
WHERE id = 389;
UPDATE SPOKEN_LANGUAGES
SET id = 389 + V_MAGIC_NUMBER
WHERE id = 388;
UPDATE SPOKEN_LANGUAGES
SET id = id - V_MAGIC_NUMBER
WHERE …Run Code Online (Sandbox Code Playgroud) 这是Oracle的新手,但我不知道为什么这不起作用,我有点疯了.
我的查询工作正常,但只要我添加第三个连接语句,它就会给我以下错误消息:
这是我的查询.一切看起来都拼写正确,表格和列都存在.TS_ORDER_SEC_SPEC目录中只有一条记录
错误:
Number: 904
ErrorMessage: ORA-00904: "OSS"."ORDER_ID": invalid identifier
Run Code Online (Sandbox Code Playgroud)
SQL:
select
o.from_crrncy as from_crrncy
, o.to_crrncy as to_crrncy
, o.trade_date as trade_date
, o.settle_date as settle_date
, o.order_id as order_id
, oa.exec_broker as oaexecbroker
, o.target_crrncy as given_ccy
From ts_order o
inner join ts_order_alloc oa on oa.order_id = o.order_id
inner join TS_ORDER_SEC_SPEC oss on oss.order_id = o.order_id
Run Code Online (Sandbox Code Playgroud)