相关疑难解决方法(0)

servlet如何工作?实例化,会话,共享变量和多线程

假设,我有一个拥有大量servlet的Web服务器.对于在这些servlet之间传递的信息,我正在设置会话和实例变量.

现在,如果有2个或更多用户向此服务器发送请求,那么会话变量会发生什么?它们对所有用户都是通用的,或者对于每个用户而言都是不同的.如果它们不同,那么服务器如何区分不同的用户?

还有一个类似的问题,如果有n用户访问特定的servlet,那么这个servlet只在第一个用户第一次访问它时实例化,或者是否为所有用户单独实例化?换句话说,实例变量会发生什么?

java multithreading servlets session-variables instance-variables

1105
推荐指数
6
解决办法
28万
查看次数

Servlet中的doGet和doPost

我已经开发了一个将信息发送到Servlet的HTML页面.在Servlet中,我使用的方法doGet()doPost():

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException  {

     String id = req.getParameter("realname");
     String password = req.getParameter("mypassword");
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

    String id = req.getParameter("realname");
    String password = req.getParameter("mypassword");
}
Run Code Online (Sandbox Code Playgroud)

在调用Servlet的html页面代码中:

<form action="identification" method="post" enctype="multipart/form-data">
    User Name: <input type="text" name="realname">
    Password: <input type="password" name="mypassword">
    <input type="submit" value="Identification">
</form> 
Run Code Online (Sandbox Code Playgroud)

当我method = "get"在Servlet中使用时,我获得了id和password的值,但是在使用时method = "post",id和password被设置为null.为什么我不能在这种情况下获得值?

我想知道的另一件事是如何使用Servlet生成或验证的数据.例如,如果上面显示的Servlet对用户进行身份验证,我想在HTML页面中打印用户ID.我应该能够将字符串'id'作为响应发送,并在我的HTML页面中使用此信息.可能吗?

java servlets

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

有时我看到JSF URL是*.jsf,有时是*.xhtml,有时是/ faces/*.为什么?

一直试着学习JSF,有时候我看到的URL *.jsf有时是*.xhtml或者/faces/*.请问有人填写我的知识吗?当我使用Facelet创建JSF时,文件扩展名是.xhtml,所以.jsfURL扩展来自哪里?

jsf web.xml facelets url-pattern

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

使用web.xml进行Servlet映射

我对servlet映射的web.xml结构感到困惑,执行它没有任何问题,但我试图弄清楚为什么我们在部署描述符中有这样的模式.

<web-app>
    <servlet>
         <servlet-name>Servlet1</servlet-name>
         <servlet-path>foo.Servlet</servlet-path>
    </servlet>
    <servlet-mapping>
         <servlet-name>Servlet1</servlet-name>
         <url-pattern>/enroll</url-pattern>
    </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

现在只要我理解url-pattern"/ enroll"的请求,servlet容器就会将servlet-name与url-pattern匹配,并尝试查找相应的servlet-path并转发控件to foo.Servlet.所以基本上会有两个传递一个用于查找servlet-name而另一个用于servlet-path,我的问题是如果容器设计为以下列方式工作

<web-app>
        <servlet>
             <servlet-name>foo.Servlet</servlet-path>
             <url-pattern>/enroll</url-pattern>
        </servlet>
</web-app>
Run Code Online (Sandbox Code Playgroud)

如果我们使用以下方法会有什么缺点.这不会更有效,响应时间也会很快.

java servlets web-applications java-ee-5

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

在Java中,如何确保我的Web应用程序是线程安全的?

如何确保我的java servlet Web应用程序是线程安全的?关于会话变量,类的静态变量或其他任何可能是线程安全问题的问题,我需要做些什么?

java servlets java-ee

14
推荐指数
2
解决办法
9342
查看次数

Java Servlet中的静态变量行为

我正在开发一个java servlet,在运行时,在新线程中启动不同的对象方法.这些线程应该访问描述特定servlet实例的变量,比如jobId.出于这个原因,我将jobId变量声明为static.servlet构造函数正在为每个servlet实例(调用)计算此值.如果servlet同时被调用几次,我就会徘徊,静态jobId变量在调用之间共享,这意味着一些线程将获得错误的jobId,或者每次调用都计算一次 - 所以线程是启动的特定servlet将使用为此特定servlet计算的jobId(这是我希望它工作的方式).有任何想法吗?非常感谢!

java static multithreading servlets

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

我想使用一个在部署到Server后只调用一次的方法

我是Servlets的新手.我想使用一个在部署到服务器后只调用一次的方法.我看了看HttpServlet#init().但我发现每个请求都会调用它.我误解了吗?有什么替代方案init()

java servlets initialization

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

了解servlet和多线程

所以我读了这个很棒的线程:servlet的每个实例和servlet中每个servlet线程之间的区别?

它说"servletcontainer为每个请求重用相同的servlet实例."

所以我们假设我们有一个servlet:

public class MyServlet extends HttpServlet {



    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object thisIsThreadSafe;

        thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
    } 
}
Run Code Online (Sandbox Code Playgroud)

servlet容器初始化时也会在内部调用:

MyServlet myServlet = new MyServlet(....);
Run Code Online (Sandbox Code Playgroud)

然后,当请求与web.xml中的内容匹配时,它将返回此实例myServlet.

我需要帮助理解的是,当致电:

myServlet.doGet(..)
Run Code Online (Sandbox Code Playgroud)

当只有一个实例时,多线程如何工作?这不是特定于servlet的,我只是不能理解这是如何工作的.

假设网站上有10个并发用户在同一时间点击同一个servlet,这个实例在所有这些实例中共享,为什么它不会以串行方式阻塞和工作,它是如何同时执行此操作的呢?

java multithreading servlets

2
推荐指数
1
解决办法
2332
查看次数