标签: java-ee

Java EE 6:JSF与Servlet + JSP.我应该学习JSF吗?

我试着通过阅读http://java.sun.com/javaee/6/docs/tutorial/doc/gexaf.html来熟悉Java EE 6 .我对JSF的使用有点困惑.
通常,我开发Web App的方式是,Servlet就像一个控制器,JSP就像一个MVC模型中的View.那么JSF是否试图取代这种结构?以下是上述教程的引用:

Servlet最适合面向服务的App和面向表示的App的控制功能,如调度请求
JSF和Facelet更适合生成像XHTML这样的标记,并且通常用于面向表示的App

不确定我是否理解上述引用,他们没有解释什么是面向服务与面向表达.

JavaServer Faces应用程序可以将HTTP请求映射到特定于组件的事件处理,并将组件作为服务器上的有状态对象进行管理.

任何知识渊博的Java开发人员可以给我一个关于JSF,JSP和Servlet的快速概述吗?我是否将它们全部集成在一起,还是在应用程序中将它们分开使用?如果是这样,那么与Servlet和JSP相比,什么样的应用程序使用JSF

JavaServer Faces应用程序可以将HTTP请求映射到特定于组件的事件处理,并将组件作为服务器上的有状态对象进行管理.

听起来像servlet可以做什么,但不确定manage components as stateful objects on the server.甚至不确定这是什么意思?提前致谢.

java jsf jsp servlets java-ee

33
推荐指数
2
解决办法
3万
查看次数

您在生产Java应用程序中使用JMX监视什么?

这个问题不是关于JMX如何工作或JMX的作用.这个问题是关于JMX在生产中的标准应用程序服务器环境中的应用.它也不适用于特定的服务器.

在运行标准Java EE服务堆栈的生产环境中,您使用JMX监控的是什么:数据库访问(JDBC和JPA),会话EJB,JMS,Web服务器,Web服务,支持AJAX的服务?

java performance monitoring jmx java-ee

32
推荐指数
3
解决办法
9645
查看次数

JAX-RS使用异常映射器

我已经读过,我可以创建一个javax.ws.rs.ext.ExceptionMapper将抛出的应用程序异常映射到Response对象的实现.

我创建了一个简单的示例,如果持久化对象时手机长度超过20个字符,则抛出异常.我期望将异常映射到HTTP 400(错误请求)响应; 但是,我收到HTTP 500(内部服务器错误),但有以下异常:

java.lang.ClassCastException: com.example.exception.InvalidDataException cannot be cast to java.lang.Error
Run Code Online (Sandbox Code Playgroud)

我错过了什么?任何意见是极大的赞赏.

异常映射器:

@Provider
public class InvalidDataMapper implements ExceptionMapper<InvalidDataException> {

    @Override
    public Response toResponse(InvalidDataException arg0) {
        return Response.status(Response.Status.BAD_REQUEST).build();
    }

}
Run Code Online (Sandbox Code Playgroud)

例外类:

public class InvalidDataException extends Exception {

    private static final long serialVersionUID = 1L;

    public InvalidDataException(String message) {
        super(message);
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

实体类:

@Entity
@Table(name="PERSON")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Person {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ID")
    private Long id;

    @Column(name="NAME")
    private String name;

    @Column(name="PHONE")
    private …
Run Code Online (Sandbox Code Playgroud)

java exception-handling jax-rs jersey java-ee

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

当同一个类存在于同一服务器上的不同应用程序中时,类加载如何工作?

我在应用服务器上运行了多个Web应用程序,每个Web应用程序WAR文件都包含相同jar文件的副本.

这是否意味着该jar文件中的一个类将在JVM中多次加载,对于它存在的每个WAR文件一次?接下来,如果我在这样的类中有一个静态同步方法,它是否只在它存在的web-app中的线程之间同步,而不是在不同jar文件中的同一个类中的同一方法同步WAR文件?(希望这个问题有道理,必要时会澄清).

如果是这种情况,我认为最好的解决方案是从每个WAR文件中删除jar文件并将其部署到服务器上的共享类路径文件夹中?

java classloader java-ee war-filedeployment

32
推荐指数
2
解决办法
3万
查看次数

在maven2中编译错误:"无效的CEN标题(错误的签名)"

我正在迁移我们的java-ee项目以使用Maven而不是Ant.

对于以下依赖项

    <dependency>
      <groupId>javolution</groupId>
      <artifactId>javolution</artifactId>
      <version>5.4.2</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

尝试编译时出现以下错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.
3.2:compile (default-compile) on project JAdaptiv: Compilation failure
[ERROR] error: error reading C:\Users\User.IVSTEL1\.m2\repository\javolution\
javolution\5.4.2\javolution-5.4.2.jar; invalid CEN header (bad signature)
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o
rg.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on
 project JAdaptiv: Compilation failure
error: error reading C:\Users\User.IVSTEL1\.m2\repository\javolution\javoluti
on\5.4.2\javolution-5.4.2.jar; invalid CEN header (bad signature)

        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl
eStarter.java:161) …
Run Code Online (Sandbox Code Playgroud)

java maven-2 java-ee maven

32
推荐指数
1
解决办法
7万
查看次数

@PostConstruct&Checked例外

在@PostConstruct文档中,它描述了带注释的方法:

"该方法绝不能抛出已检查的异常."

如何处理例如可以在这种方法中抛出的IOException?只需将其包装在RuntimeException中,让用户担心对象的错误初始状态?或者@PostConstruct是错误的地方来验证和初始化注入了依赖项的对象?

java exception-handling java-ee postconstruct

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

JSF请求作用域bean继续在每个请求上重新创建新的有状态会话bean吗?

我正在使用JSF,PrimeFaces,Glassfish和Netbeans构建我的第一个Java EE应用程序.因为我是新手,所以我可能会接近核心问题.

核心问题:我想安全地维护用户的信息.关于是否应该在JSF会话bean或有状态会话EJB中维护它似乎存在矛盾的想法.我正在尝试使用有状态会话EJB,因为它更安全.

问题是我的应用程序似乎正在创建该bean的多个实例,当我希望它创建一个并重新使用它时.如果我刷新页面它运行@PostConstruct和@PostActivate3次,他们都用不同的实例.然后,当我重新部署应用程序时,它们都会被破坏.

我误解了它应该如何工作或错误配置了什么?

我将尝试显示一个修剪过的代码示例:

basic.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Hello from Facelets
        <c:if test="#{loginController.authenticated}">
            Authenticated
        </c:if>
        <c:if test="#{loginController.authenticated}">
            Authenticated
        </c:if>
        <c:if test="#{loginController.authenticated}">
            Authenticated
        </c:if>
    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

LoginController:

@Named(value = "loginController")
@RequestScoped
public class LoginController implements Serializable {

    @EJB
    private UserBeanLocal userBean;

    public boolean isAuthenticated() {
        return userBean.isAuthenticated();
    }

}
Run Code Online (Sandbox Code Playgroud)

UserBean(不包括UserBeanLocal界面)

@Stateful
public …
Run Code Online (Sandbox Code Playgroud)

java-ee ejb-3.0 jsf-2

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

tomcat:deploy:"无法调用Tomcat管理器:连接被拒绝"

我尝试使用Maven将我的应用程序部署到Tomcat,我发现了这个示例.

这是我的pom.xml的片段:

    <!-- Maven Tomcat Plugin -->
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>tomcat-maven-plugin</artifactId>
        <configuration>
            <url>http://127.0.0.1:8080/</url>
            <server>TomcatServer</server>
        </configuration>
    </plugin>
    <!-- Maven compiler plugin -->
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
        </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

当我跑步时,tomcat:deploy我得到这个错误:Cannot invoke Tomcat manager: Connection refused.这是完整的堆栈跟踪:

[ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (default-cli) on project webapp: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (default-cli) on project webapp: Cannot invoke Tomcat manager
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at …
Run Code Online (Sandbox Code Playgroud)

tomcat java-ee maven maven-tomcat-plugin

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

javax.servlet.ServletException:HV000030:找不到类型的验证程序:java.lang.Integer

我必须更新数据库中的信息.

FacadePatient.java 班级代码:

public Patient update(Patient p) {

    Patient pat = em.find(Patient.class, p.getPatientId());
    p.setPatientPhone(pat.getPatientPhone());
    p.setPatientDateNaiss(pat.getPatientDateNaiss());
    p.setPatientEmail(pat.getPatientEmail());
    p.setPatientJob(pat.getPatientJob());
    p.setPatientSmoking(pat.getPatientSmoking());
    p.setPatientSize(pat.getPatientSize());
    em.merge(pat);
    return p;
}
Run Code Online (Sandbox Code Playgroud)

java-ee hibernate-validator bean-validation

32
推荐指数
2
解决办法
7万
查看次数

JSF控制器,服务和DAO

我正在尝试习惯JSF如何处理数据(来自弹簧背景)

我正在创建一个维护用户列表的简单示例,我有类似的东西

<h:dataTable value="#{userListController.userList}" var="u">
    <h:column>#{u.userId}</h:column>
    <h:column>#{u.userName}</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)

然后"控制器"有类似的东西

@Named(value = "userListController")
@SessionScoped
public class UserListController {
    @EJB
    private UserListService userListService;

    private List<User> userList;

    public List<User> getUserList() {
        userList = userListService.getUsers();
        return userList;
    }
}
Run Code Online (Sandbox Code Playgroud)

而"服务"(虽然看起来更像是DAO)有

public class UserListService {

    @PersistenceContext
    private EntityManager em;

    public List<User> getUsers() {
        Query query = em.createQuery("SELECT u from User as u");
        return query.getResultList();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的做事方式吗?我的术语是对的吗?"服务"感觉更像是DAO?控制器感觉它正在做一些服务工作.

jsf dao ejb jpa java-ee

32
推荐指数
2
解决办法
3万
查看次数