小编Pau*_*lor的帖子

为什么UTF-8编码的字符仅在远程计算机上无法正确显示

当我查看这个物理编码为UTF-8并且在我的PC上使用UTF-8指定为charset(使用firefox)的网页时,它不会显示需要正确编码多个字节的字符,例如Björk中的ö ,请点击链接,然后打开B部分,看看我的意思

http://www.jthink.net/songkong/reports/FixSongsReport00084/FixSongsReport00084_index.html

(该页面使用jakarta-tomcat托管在linux服务器上)

但是,当我在硬盘上存储为文件时,原始文件在Firefox中显示完全正常.我甚至将文件从远程站点复制回我的本地PC以确保具有相同的文件,它仍然显示正常.

那怎么会在网站上显示不好,这可能是一个tomcat问题吗?

编辑 在第一个答案的评论中,它说我需要确保我需要正确设置响应编码,我该怎么做 - html页面不是由代码生成的tomcat只是提供的页面提供

注意我不要将uri参数解析为utf8,并且我不希望我创建的jsp页面编码为UTF8,这些都会像ISO-8859-1一样处于罚款状态,如果我更改它们可能会中断.我只想将.html页面显示为UTF8,并且仅针对此应用程序,我在webapps文件夹中有多个应用程序,我使用的是Tomcat 7

编辑

因此,正如下面的答案所示,我已添加到我的web.xml文件中

 <filter>
    <filter-name>CharacterEncoding</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<mime-mapping>
  <extension>html</extension>
  <mime-type>text/html;charset=UTF-8</mime-type>
</mime-mapping>
Run Code Online (Sandbox Code Playgroud)

和那种工作,网址现在正确显示,但链接不起作用.

当我查看源它似乎使用正确的链接,但错误消息显示它是扩展表示法而不是UTF8.

她的整个报告,所以你可以点击左侧的链接,并在右侧看到结果

http://www.jthink.net/songkong/reports/FixSongsReport00084/FixSongsReport00084.html

即使我复制链接和粘贴它也不起作用,因为链接似乎被粘贴是错误的,虽然它然后纠正自己

html tomcat utf-8

5
推荐指数
1
解决办法
9784
查看次数

如何使用Java邮件发送html消息

我一直在发送来自Java的最好的电子邮件没有问题,但我现在正在尝试发送一个html如下:

        MimeMessage message = new MimeMessage(Email.getSession());
        message.setFrom(new InternetAddress("support@jthink.net"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to, true));
        message.setSubject(subject);
        message.setContent(msg, "text/html");
        message.setText(msg);
        message.saveChanges();
        Transport.send(message);
Run Code Online (Sandbox Code Playgroud)

然而,当我在我的客户端收到它时,它接收它作为纯文本电子邮件,即它显示所有的html标签而不是它们用于格式化,我检查了电子邮件标题,它确实说

Content-Type: text/plain; charset=us-ascii
Run Code Online (Sandbox Code Playgroud)

在邮件标题中

但为什么因为我将"text/html"传递给setContent()方法,这似乎是你唯一要做的事情.

java jakarta-mail

5
推荐指数
1
解决办法
5092
查看次数

如何在自动调整的(多实例)Elastic Beanstalk(Tomcat)应用程序(AWS)中配置数据文件?

我目前有一个Elastic Beanstalk实例运行部署到Tomcat的Java应用程序.我使用Web界面部署应用程序,但应用程序使用web.xml中引用的数据文件(Lucene索引),通过ssh-ing到EC2并从我的S3存储桶获取数据文件,我将其复制到底层EC2实例.

到现在为止还挺好.

但是,如果我将EB更改为可自动缩放的环境,以便它根据需要自动创建新实例,那么这些EC2实例将没有数据文件,我该如何处理.

  1. 我可以在实际使用之前用数据文件预先配置每个EC2实例吗?
  2. 我可以拥有每个服务器可以引用的共享fs(数据文件是只读的)吗?

*更新*

我想我已经原则上解决了这个问题.我是从我的本地计算机上传我的应用程序,然后从亚马逊添加大数据文件.我需要做的是在我的数据处理EC2实例上构建我的战争,在某处将数据文件添加到war,然后将此战争放到S3上,然后当我创建我的EB时,我需要从S3存储桶加载WAR.

因此,只需要确定数据文件在战争中的位置以及如何通过Maven构建过程进行创建.

*更新2*

实际上还不清楚数据文件应该放在WAR文件中,我看不到放在哪里,应用程序希望它们是真实的文件,所以如果包含在WAR中并且WAR没有扩展/未调整(我不知道)什么EB)应用程序无论如何都不会工作.

*更新3*

我当然可以把数据放在S3中(事实上它可能会在那里开始)所以我想知道在服务器初始化我是否可以获取s3数据并将其放在某处然后使用它?请指导.

*更新4*

所以使用s3的想法我几乎让它工作,在servlet init()方法中我得到压缩文件,将它保存到当前工作目录(/ usr/share/tomcat7 /)然后解压缩它.麻烦的是压缩文件是2.7GB,它解析的未压缩文件夹是5GB,EB使用的次要实例提供8GB,其中2GB使用.所以我有6GB这是足够的空间用于未压缩文件,但不保存压缩文件,然后解压缩,因为在解压缩过程中我需要2.7 GB + 5 GB.

我将压缩版本加载到S3,因为原始数据不是单个文件,而是一个文件夹,它很难作为文件列表进行管理.我无法在EB中更改根目录的大小,我可以尝试更改为一个功能强大的实例,但这样会非常昂贵,并且不清楚ECB使用的实例提供了什么磁盘空间.有任何想法吗 ?

这些是我添加到我的maven repo的依赖项

  <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.rauschig</groupId>
        <artifactId>jarchivelib</artifactId>
        <version>0.6.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

这是代码

@Override
public void init()
{
        try
        {
            log.severe("Retrieving Indexes from S3");
            AWSCredentials credentials      = new BasicAWSCredentials("***********", "***********");
            AmazonS3Client ac = new AmazonS3Client(credentials);

            log.severe("datalength-testfile:"+ac.getObjectMetadata("widget","test.txt").getContentLength());
            File testFile = new File("test.txt");
            ac.getObject(new GetObjectRequest("widget", "test.txt"), testFile);
            log.severe("datalength-testfile:retrieved");

            log.severe("datalength-largefile:"+ac.getObjectMetadata("widget","indexes.tar.gz").getContentLength());
            File largeFile = new File("indexes.tar.gz");
            ac.getObject(new GetObjectRequest("widget", "indexes.tar.gz"), largeFile); …
Run Code Online (Sandbox Code Playgroud)

tomcat amazon-web-services amazon-elastic-beanstalk

5
推荐指数
1
解决办法
1910
查看次数

如何在AWS EC2上增加我的根磁盘大小以便与Elastic Beanstalk一起使用?

在部署时,我将数据文件从S3复制到我的根驱动器以供Tomcat应用程序使用.这是完美的工作,麻烦是根磁盘只有8GB,我的数据文件将很快大于那个.我想稍微增加根磁盘的大小(15GB应该可以再使用一年)而无需转移到更大的更昂贵的EC2实例,我现在正在使用m3.medium.

由于EB使用我需要正确的EC2配置以根据需要启动,我无法通过手动添加另一个磁盘来修改已在运行的实例.我正在使用EB负载平衡,因此实例可能会来满足需求.

amazon-ec2 amazon-web-services amazon-elastic-beanstalk

5
推荐指数
1
解决办法
1633
查看次数

如何将Jira问题导出到BitBucket

我刚把我的项目代码从java.net移到了BitBucket.但我的jira问题跟踪仍然托管在java.net上,虽然BitBucket确实有一些链接到外部问题跟踪器的选项我不认为我可以将它用于java.net,尤其是因为我没有管理员权限需要安装DVCS连接器.

所以我认为另一种选择是导出然后将问题导入BitBucket问题跟踪器,这可能吗?

到目前为止的进展 所以我尝试使用下面的OSX来完成两个信息性答案中的步骤但我遇到了一个问题 - 我对这个脚本实际被调用的内容感到困惑,因为在答案中它讨论了export.py但是没有这样的脚本存在用这个名字,所以我重命名了我下载的那个.

  • sudo easy_install pip(OSX)
  • pip安装jira
  • pip install configparser
  • easy_install -U setuptools
  • 转到https://bitbucket.org/reece/rcore,选择下载选项卡,下载zip并解压缩,然后重命名为reece(由于某种原因,git clone https://bitbucket.org/reece/rcore失败并出现错误)
  • cd reece/rcore
  • 在rcore子文件夹中将脚本另存为export.py.
  • 用import.py中的项替换iteritems
  • 用类型/ immutabledict.py替换iteritems
  • 在rcore文件夹中创建.config

  • 创建包含的.config/jira-issues-move-to-bitbucket.conf

    JIRA-用户名= paultaylor

    jira-hostname = https://java.net/jira/browse/JAUDIOTAGGER

    JIRA密码=密码

  • 运行python export.py --jira-project jaudiotagger

macbook:rcore paul$ python export.py --jira-project jaudiotagger
Traceback (most recent call last):
  File "export.py", line 24, in <module>
    import configparser
ImportError: No module named configparser
- Run python export.py --jira-project jaudiotagger
Run Code Online (Sandbox Code Playgroud)

我需要像root一样运行pip insdtall

  • sudo pip install configparser

那很有效

但现在

  • python …

import export jira bitbucket

5
推荐指数
1
解决办法
1326
查看次数

如何自动构建此Winrar Sfx文件

在使用Maven(和一点点蚂蚁)在Windows上构建应用程序之后,我手动创建了Winrar Sfx安装程序,如下所示:

  • 选择文件,右键单击并选择添加到存档
  • 使用浏览..在上面的文件夹中创建档案
  • 将存档格式更改为Zip
  • 启用创建存档格式
  • 选择高级选项卡
  • 选择SFX选项
  • 选择设置标签
  • 在提取后运行字段中输入setup.exe
  • 选择模式选项卡
  • 启用“ 解压缩到临时文件夹”
  • 选择文本和图标选项卡
  • 输入新标题
  • 从我们从中调用winrar的文件夹中选择setup.ico
  • 选择确定
  • 选择确定

但是我可以使用Windows批处理文件/ Maven或ant自动执行部分/全部操作吗?

sfx winrar maven

5
推荐指数
1
解决办法
3180
查看次数

从表中删除没有唯一键的重复行

如何在Postgres 9表中删除重复行,每个字段上的行完全重复,并且没有单独的字段可以用作唯一键,所以我不能只GROUP BY使用列并使用NOT IN语句.

我正在寻找一个单独的SQL语句,而不是一个需要我创建临时表并将记录插入其中的解决方案.我知道如何做到这一点,但需要更多的工作来适应我的自动化过程.

表定义:

jthinksearch=> \d releases_labels;
Unlogged table "discogs.releases_labels"
   Column   |  Type   | Modifiers
------------+---------+-----------
 label      | text    |
 release_id | integer |
 catno      | text    |
Indexes:
    "releases_labels_catno_idx" btree (catno)
    "releases_labels_name_idx" btree (label)
Foreign-key constraints:
    "foreign_did" FOREIGN KEY (release_id) REFERENCES release(id)
Run Code Online (Sandbox Code Playgroud)

样本数据:

jthinksearch=> select * from releases_labels  where release_id=6155;
    label     | release_id |   catno
--------------+------------+------------
 Warp Records |       6155 | WAP 39 CDR
 Warp Records |       6155 | WAP 39 CDR
Run Code Online (Sandbox Code Playgroud)

sql postgresql duplicates duplicate-removal

5
推荐指数
2
解决办法
5426
查看次数

在框架内打开https页面是否有问题

我以编程方式创建一个html报告,分为两个框架.如果用户然后单击右侧框架上的超链接,则该框架将替换为该页面的内容.

这工作正常,但现在当我尝试链接到任何Discogs发布页面,如这个它不加载它

我注意到Discogs已经转移到安全的http,我想知道这是否是问题.虽然我可以毫无问题地去其他https页面,例如这个Acoustid .

如果我使用target ="_ blank"打开新选项卡中的第一个链接,那么它可以正常工作,但这不是我想要的.

java url https hyperlink

5
推荐指数
1
解决办法
1402
查看次数

尝试使用com4j将文件中的图稿添加到iTunes IITrack对象时出现灾难性错误

将Com4j与iTunes一起使用,将各种文本值添加到IITrack对象没有问题,但是如果我尝试添加艺术作品

if(iTunesTrack.artwork().count()==0)
{
  String path = new File(new File(song.getFilename()).getParent(),"folder.jpg").getPath();
  if(Files.exists(Paths.get(path)))
  {
      iTunesTrack.addArtworkFromFile(path);
  }
}
Run Code Online (Sandbox Code Playgroud)

它失败了

11/05/2017 18.24.56:BST:com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges:updateITunesLibTrackFromSong:SEVERE:无法更新ItunesTrack C:\ Users\Paul\Desktop\TestMusic\WAV\Music \唱片三一学院\ Carols来自Trinity\27 - 在Dulci Jubilo(管风琴独奏).wav:8000ffff灾难性失败:灾难性失败com4j.Com例外:8000ffff灾难性失败:灾难性失败:.\ invoke.cpp:517 at com4j.Wrapper.invoke(Wrapper.java: 187)at com.sun.proxy.$ Proxy57.addArtworkFromFile(Unknown Source)at com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges.updateITunesLibTrackFromSong(WindowsUpdateItunesWithChanges.java:611)at com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges.addEditedTrack(WindowsUpdateItunesWithChanges .java:646)com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges.analyseFiles(WindowsUpdateItunesWithChanges.java:277)at com.jthink.songkong.ituneshelper.WindowsUpdateItunesWithChanges.updateItunes(WindowsUpdat)eItunesWithChanges.java:180)at com.jthink.songkong.ituneshelper.UpdateItunesWithChanges.call(UpdateItunesWithChanges.java:182)at com.jthink.songkong.ituneshelper.UpdateItunesWithChanges.call(UpdateItunesWithChanges.java:32)at java.util.concurrent来自java.util.conc.Thread上的java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)的.futureTask.run(未知来源)java.lang.Thread.run上的java.man.run(未知来源)$(未知来源)引起:com4j.ComException:8000ffff灾难性故障:灾难性故障:.\ invoke.cpp:517 at com4j.Native.invoke(Native Method)at com4j.StandardComMethod.invoke(StandardComMethod.java:35)at com4j.Wrapper $ InvocationThunk .call(Wrapper.java:356)at com4j.Task.invoke(Task.java:50)at com4j.ComThread.run0(ComThread.java:172)at com4j.ComThread.run(ComThread.java:153)

COM4j接口是从我的iTunes版本构建的,所以它们存在,我不知道我做错了什么或者它是否坏了,我已经尝试过一些具有相同结果的jpogs.我检查文件是否存在,如果尝试添加不存在的文件,确实错误是不同的.

java com itunes com4j

5
推荐指数
0
解决办法
174
查看次数

如果取消了SwingWorker任务,我怎么知道中断方法何时完成

如果SwingWorker任务被取消,我如何知道中断方法何时完成.

我简化了代码.FixSongsController.start()在后台运行.完成后,将创建一个报告,完成后,将使用该done()方法显示报告.

有一个进度对话框运行,如果用户选择取消(同时FixSongsController.start()运行),这则调用cancel(true)SwingWorker导致被发送到一个中断FixSongsController.start().麻烦的是,一旦它被发送,它就会调用createReport().

我不想在FixSongsController.start()实际完成之前开始创建报告.我看不出如何确定何时发生.

如果我createReport从修复歌曲中删除代码FixSongsDialogisCancelled()检查问题更糟,因为然后FixSongsDialog尝试在创建之前显示报告.

我以为我可以使用SwingWorker.getState()但是一旦cancelTask被调用的doInBackground()任务被中断并且即使FixSongsController方法仍在整理之后不久就完成.

然后我想我可以在其块SwingWorker.setProgress()中的FixSongsController.start()方法中使用finally并添加一个只showReport在进度值发生变化但是setProgress受到保护时才会调用的侦听器,因此我无法在FixSongs类本身之外访问它.

SwingWorker

public class FixSongs extends SwingWorker<String, Object>
    {
        @Override
        public String doInBackground() throws Exception
        {
            try
            {
                new FixSongsController().start();
                if (!isCancelled())
                {
                    new FixSongsReportCreator().createReport();
                }
                return ""; …
Run Code Online (Sandbox Code Playgroud)

java swingworker

5
推荐指数
0
解决办法
199
查看次数