당시 발생한 몇 가지 기술적 문제는 다음과 같습니다.
1. 웹에서 애플리케이션으로 관련 매개변수를 전달합니다.
해결 방법: 동적 jnlp 파일(jnlp 구현을 위해 jsp)을 사용하고 다음 매개변수 전달 방법을 사용합니다.
application-desc
ElementDataOutputStream dos=null;The application element indicates that the JNLP file is launching an application (as opposed to an applet). The application element has an optional attribute, main-class, which can be used to specify the name of the application's main class, i.e., the class that contains the public static void main(String argv[]) method where execution must begin.
The
applicationmain-class
attribute can be omitted if the first JAR file specified in the JNLP file contains a manifest file containing themain
요소는 JNLP 파일이 애플리케이션(애플릿과 반대)을 시작함을 나타냅니다. 애플리케이션 요소에는 main-라는 선택적 속성이 있습니다. class는 애플리케이션의 메인 클래스 이름을 지정하는 데 사용할 수 있습니다. 즉, 실행이 시작되어야 하는
public static void main(String argv[])메소드를 포함하는 클래스입니다.
private String getStringPostRequest(String command) throws Exception {main- JNLP 파일에 지정된 첫 번째 JAR 파일에 <code>main
클래스가 포함된 매니페스트 파일이 포함된 경우 class 속성을 생략할 수 있습니다.인수는 하나 이상의 중첩된 항목을 포함하여 애플리케이션에 지정할 수 있습니다.
argument 요소 >arg2argument> ;
application-desc>2. 애플리케이션 처리 결과를 웹 서버로 다시 보내는 방법
해결 방법은 URLConnection을 사용하여 전달된 웹 URL을 결합하는 것입니다. jnlp(백그라운드 처리 서블릿 주소), sessionID(현재 사용자, 권한 등을 식별하는 데 사용)를 사용하여 새 URL 객체를 생성하고 이를 통해 애플리케이션과 웹 서버 간에 데이터를 전달합니다. 백그라운드 서블릿에서 sessionid를 통해 세션 리스너에서 현재 사용자를 찾습니다.ObjectInputStream dis=null;
try {URLConnection urlConn = new URL ( webServerStr).openConnection();
urlConn.setDoOutput(true);urlConn.setDoInput(true);
new ObjectInputStream(urlConn.getInputStream());
urlConn.setAllowUserInteraction(false);
urlConn.setUseCaches(false);
urlConn.setRequestProperty(
"Content-Type " ,
"application/x-www-form-urlencoded");
dos = new DataOutputStream(urlConn.getOutputStream());
dos.writeBytes(command + "&sessionId=" + this.sessionId);
dos. close ();
// servlet에서 입력 읽기
dis =String ret = dis.readObject().toString();
HttpSession hSession = request.getSession();
dis.close();
return ret;
} catch (예외 e) {
throw e;
} 마침내{
if ( dos!=null) dos.close();
if ( dis!=null) dis.close();
}
}
백엔드 servlet:
public void doGet(HttpServletRequest 요청, HttpServletResponse 응답)
throws IOException, ServletException
{System.out.println("Application:" + hSession.getId()) ;
if(MyListener.getSessionById(request.getParameter("sessionId")) != null)hSession = MyListener.getSessionById(request.getParameter("sessionId"));
import java.util.Map;
System.out.println("OK" + hSession ) ;
.............}
sessionlistener:
import java.util.HashMap;import javax.servlet.ServletContextEvent;
import javax . Servlet.servletContextListener;import javax.servlet.http.*;
Public 클래스 sessionLisions
구현 서비스, httpsessionListener
{ static map map = new hashmap ();
Public sessionSlistener () public void contextInitialized(Servletcontextevent)}
{
public void contextDestroyed(ServletContextEvent servletcontextevent)}
public void sessionCreated(HttpSessionEvent httpsessionevent)
map.put( httpsession.getId(), httpsession) ;
{
HttpSession httpsession = httpsession event.getSession();}
{
public void sessionDestroyed(HttpSessionEvent httpsessionevent)HttpSession httpsession = httpsessionevent.getSession();
map.remove(httpsession.getId());
}public static HttpSession getSessionById(String s)
}
{
return (HttpSession)map.get(s);
}http://forum.java.sun. com/thread.jspa?forumID=38&threadID=556847
3.jar 패키지 디지털 서명 문제
4.java webstart 캐시 문제: JNLP 파일 캐싱1.5.0은 여전히 캐시합니다. 하지만(2)생성된 JNLP 파일에 문제가 있는 것 같습니다.다음을 시도해 보세요.response.addDateHeader("Date", Calendar.getInstance().getTime().getTime ());
(1)
jnlp 태그에서 href= 매개변수를 제거하면 Java Web Start 1.4.2는 jnlp 파일을 캐시하지 않습니다.response.addDateHeader("Last-Modified", Calendar.getInstance().getTime().getTime());
문제가 해결된 것 같습니다
위 내용은 Java webstart 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!