标签: java-ee

在Java Web应用程序(WAR)中存储配置文件的最佳位置是什么?

我创建了一个Web应用程序(WAR)并将其部署在Tomcat上.在webapp中,有一个页面,其中包含管理员可以输入某些配置数据的表单.我不想将这些数据存储在DBMS中,而只是存储在文件系统上的XML文件中.在哪里放?

我想将文件放在部署应用程序本身的目录树中的某个位置.我的配置文件应该在WEB-INF目录中吗?或者把它放在别的地方?

什么是在servlet中使用的Java代码来查找目录的绝对路径?或者可以通过相对路径访问它?

java tomcat web-applications java-ee

55
推荐指数
4
解决办法
6万
查看次数

使用枚举类型作为@ RolesAllowed-Annotation的值参数

我正在开发一个Java企业应用程序,目前正在使用Java EE安全性来限制特定用户对特定功能的访问.我配置了应用程序服务器和所有内容,现在我使用RolesAllowed-annotation来保护方法:

@Documented
@Retention (RUNTIME)
@Target({TYPE, METHOD})
public @interface RolesAllowed {
    String[] value();
}
Run Code Online (Sandbox Code Playgroud)

当我使用这样的注释时,它工作正常:

@RolesAllowed("STUDENT")
public void update(User p) { ... }
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的,因为我必须在这里使用String,重构变得困难,并且可能发生拼写错误.因此,我想使用Enum值作为此注释的参数,而不是使用String.Enum看起来像这样:

public enum RoleType {
    STUDENT("STUDENT"),
    TEACHER("TEACHER"),
    DEANERY("DEANERY");

    private final String label;

    private RoleType(String label) {
        this.label = label;
    }

    public String toString() {
        return this.label;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用Enum作为这样的参数:

@RolesAllowed(RoleType.DEANERY.name())
public void update(User p) { ... }
Run Code Online (Sandbox Code Playgroud)

但是后来我得到了以下编译器错误,虽然Enum.name只返回一个String(它总是不变的,不是吗?).

注释属性RolesAllowed.value的值必须是常量表达式`

我尝试的下一件事是在我的枚举中添加一个额外的最终字符串:

public enum RoleType {
    ...
    public static final String STUDENT_ROLE = STUDENT.toString();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但这也不能作为参数,导致相同的编译器错误:

// The …
Run Code Online (Sandbox Code Playgroud)

java enums annotations java-ee java-ee-6

55
推荐指数
4
解决办法
3万
查看次数

如何强制浏览器下载文件?

一切正常,但只有文件很小,大约1MB,当我尝试使用更大的文件,比如20MB我的浏览器显示它,而不是强行下载,到目前为止我尝试了很多标题,现在我的代码看起来:

PrintWriter out = response.getWriter();
String fileName = request.getParameter("filename");

File f= new File(fileName);

InputStream in = new FileInputStream(f);
BufferedInputStream bin = new BufferedInputStream(in);
DataInputStream din = new DataInputStream(bin);

while(din.available() > 0){
    out.print(din.readLine());
    out.print("\n");
}

response.setContentType("application/force-download");
response.setContentLength((int)f.length());
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition","attachment; filename=\"" + "xxx\"");//fileName);


in.close();
bin.close();
din.close();
Run Code Online (Sandbox Code Playgroud)

java servlets java-ee

54
推荐指数
2
解决办法
10万
查看次数

将JSF理解为MVC框架

我正在阅读JSF,我觉得为什么JSF是一个MVC框架(或者至少哪个部分属于哪个"字母")我感到很困惑.

我看了一下这个问题:JSF MVC框架中哪些组件是MVC?

我在那里阅读如果你不在聚合视图中查看模型是你的实体,视图是你的XHTML代码而控制器是托管bean.嗯......好的,但视图通常不依赖于执行进一步的业务逻辑调用,这些调用返回一组实体,例如,描述是否仍然适合?

我读过的一本书将其描述为托管bean,是Faces Servlet(Controller)用于调用业务层(Model)的某种"消息"bringer,然后XHTML代码就是视图.

有太多的解释和差异,所以我不知道哪个或如何理解它.

java model-view-controller jsf java-ee

54
推荐指数
3
解决办法
5万
查看次数

我可以使用Java EE webapp中的Windows身份验证连接到SQL Server吗?

我目前正在研究如何使用Windows身份验证而不是SQL Server身份验证从我的Java EE Web应用程序连接到SQL Server数据库.我从Tomcat 6.0运行此应用程序,并使用Microsoft JDBC驱动程序.我的连接属性文件如下所示:

dbDriver              = com.microsoft.sqlserver.jdbc.SQLServerDriver
dbUser                = user
dbPass                = password
dbServer              = localhost:1433;databaseName=testDb
dbUrl                 = jdbc:sqlserver://localhost:1433
Run Code Online (Sandbox Code Playgroud)

使用SQL Server身份验证时,以这种方式连接到SQL Server数据库时没有任何问题.

有什么方法可以检索用户的Windows身份验证的凭据并使用该身份验证的SQL Server?

更新:我知道在ASP.net中有一种方法来设置Windows身份验证以访问webapp,这正是我正在寻找的,除了我想将该令牌传递给SQL Server以访问数据库.

java sql-server tomcat jdbc java-ee

53
推荐指数
4
解决办法
19万
查看次数

当表单作为multipart/form-data发布时,UTF-8文本会出现乱码

我正在将文件上传到服务器.文件上载HTML表单有2个字段:

  1. 文件名 - 一个HTML文本框,用户可以使用任何语言提供名称.
  2. 文件上传 - 一个HTMl'文件',用户可以在其中指定要上载的磁盘文件.

提交表单时,将正确接收文件内容.但是,当读取文件名(上面的第1点)时,它会出现乱码.ASCII字符正确显示.如果用其他语言(德语,法语等)给出名称,则存在问题.

在servlet方法中,请求的字符编码设置为UTF-8.我甚至尝试过如上所述的过滤器 - 如何让这段代码提交一个带有jQuery/Ajax工作的UTF-8表单textarea? - 但它似乎不起作用.只有文件名似乎是乱码.

文件名所在的MySQL表支持UTF-8.我给了随机的非英文字符,它们被正确存储/显示.

使用Fiddler,我监视请求并正确传递所有POST数据.我正在尝试确定数据如何/在哪里出现乱码.任何帮助将不胜感激.

java java-ee

53
推荐指数
5
解决办法
13万
查看次数

在JBoss上进行热部署 - 如何让JBoss"看到"这一变化?

我正在开发一个Java EE应用程序,我在开发期间在本地JBoss安装上反复部署.我希望通过将我的应用程序直接热部署到[JBOSS]/server/default/deploy/myApp来加速构建

它似乎有效 - 但是在硬部署和JBoss开始使用新类之间似乎也有一些任意的延迟.我对JBoss不太熟悉,但我认为它会缓存类,这就是导致问题的原因.

我是否正确,如果是这样,我如何让JBoss刷新它的缓存?

deployment jboss java-ee

53
推荐指数
3
解决办法
13万
查看次数

JavaEE中的"Facet"是什么?

我不仅想知道什么是Facet,还有什么是Facet'在物理层面'(据我所知,它不是一个单独的罐子,而是什么?)?

我也想知道在部署之后它如何影响我的应用程序.我会解释一下真实的例子:

我有2个方面(由IDE创建):Spring Facet和Web Facet(用于jsf).我将它部署到Tomcat,我的应用程序运行正常.

然后我(通过IDE)添加了一个方面 - JPA Facet.我重新部署了应用程序,它仍然工作正常:)

所以,我只是好奇这是什么,为什么我们需要它?

java ide terminology facet java-ee

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

"jta-datasource"和"resource-local"数据源之间的区别?

术语"jta-datasource"和"resource-local datasource"对我来说有点模糊.我正在放下我理解(或假设)的内容,我希望你能说出我对错的地方.

  • 相同的数据库可以称为jta-datasource或资源本地数据源
  • 如果提到jta-datasource,则bean /其他类可以使用JTA.因此,UserTransaction接口
  • 如果数据源是本地资源,则无法使用CMT/BMT
  • 如果提到资源本地数据源,则事务不能识别JTA.代码可以使用EntityTransaction接口,但不能使用UserTransaction接口

谢谢!

java jpa jta java-ee ejb-3.0

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

当用户登录Web应用程序时,如何实现"保持登录状态"

在大多数网站上,当用户即将提供登录系统的用户名和密码时,会出现一个"保持登录状态"的复选框.如果选中该复选框,它将使您在同一Web浏览器的所有会话中登录.如何在Java EE中实现相同的功能?

我正在使用基于FORM的容器管理身份验证和JSF登录页面.

<security-constraint>
    <display-name>Student</display-name>
    <web-resource-collection>
        <web-resource-name>CentralFeed</web-resource-name>
        <description/>
        <url-pattern>/CentralFeed.jsf</url-pattern>
    </web-resource-collection>        
    <auth-constraint>
        <description/>
        <role-name>STUDENT</role-name>
        <role-name>ADMINISTRATOR</role-name>
    </auth-constraint>
</security-constraint>
 <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbc-realm-scholar</realm-name>
    <form-login-config>
        <form-login-page>/index.jsf</form-login-page>
        <form-error-page>/LoginError.jsf</form-error-page>
    </form-login-config>
</login-config>
<security-role>
    <description>Admin who has ultimate power over everything</description>
    <role-name>ADMINISTRATOR</role-name>
</security-role>    
<security-role>
    <description>Participants of the social networking Bridgeye.com</description>
    <role-name>STUDENT</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)

forms-authentication java-ee stay-logged-in

53
推荐指数
2
解决办法
4万
查看次数