Servlet常见问题

selvlet 是运行在web服务器上的程序 是流浪其或http客户端的请求和服务器上的数据库或应用程序之间的中间层
cgi公共网关接口效果差不多 selvlet区别是 性能更见好 独立于平台 在web服务器的地址空间执行 没有再创建单独的进程处理客户端请求

说出Servlet的创建方式
第一种实现servlet的接口 重写里面的方法

  public class ServletDemo1 implements Servlet {
 //public ServletDemo1(){} 
 //生命周期方法:当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期中只执行一次
  public void init(ServletConfig arg0) throws ServletException { 	    
           System.out.println("=======init========="); 
      } 
  //生命周期方法:对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法
   public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
          System.out.println("hehe");
     } 
    
     //生命周期方法:当Servlet被销毁时执行该方法
public void destroy() { 
        System.out.println("******destroy**********");
     } 
      //当停止tomcat时也就销毁的servlet。 
public ServletConfig getServletConfig() { return null; } 
public String getServletInfo() { return null; } }

第二种 继承GernicServlet重写里面的service方法

public class ServletDemo2 extends GenericServlet { 
@Override 
      public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { 
        System.out.println("heihei"); 
}
 }

第三种继承httpservlet方法 实现doget dopost

public class ServletDemo3 extends HttpServlet { 
@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
           System.out.println("haha");
 } 
 @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
           System.out.println("ee"); doGet(req,resp); 
  } 
}

说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动
派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服
务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

jsp和servlet之间的相互传值

servlet向jsp

第一种 利用request这个对象在Servlet中设置键值对,在jsp页面通过键获取值,

request.setAttribute("key", value);

key代表键,是一个字符串,jsp页面通过这个字符串可以获取值,注意key一定要一致

    <%
    String s =(String)request.getAttribute( "key ");
    %>

注意通过request获取到的值是Object类型的需要强转,还有就是用这种方法不能用重定向到jsp页面,要用转发

request.getRequestDispatcher("/…….jsp").forward(request, response);

第二种
利用跳转Servlet:

response.sendRedirect("/…….jsp?username="+username);

jsp页面:

<%
        String s = (String) request.getParameter("username");
    %>

jsp向servlet

第一种

通过超链接传值,jsp页面:

<a href="AServlet?password=传输内容">文本</a>

Servlet代码:

String d = request.getParameter("password");

第二种

通过form表单传值:

jsp页面:

<form action="LoginServlet">
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" value="登录">
</form>

Servlet代码:

        String username = request.getParameter("username");
        String password = request.getParameter("password");

servlet之间

通过session对象,一个浏览器就是一个会话,使用两个浏览器无法获得值

        HttpSession session = request.getSession();
        session.setAttribute("user", user);

先获取session对象在把值通过键值对传输

        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");

二、

直接跳转,和Servlet向jsp页面传值一样在跳转文件后面添加值

response.sendRedirect("BServlet?username=qu");

接收:

request.getParameter("username");

jsp向jsp传值:

传输:

<%
request.setAttribute("username","username");
%>
<jsp:forward page="demo2.jsp"/>

接收:

<%
String username = (String)request.getAttribute("username");

servlet处理表单

 Enumeration paramNames = request.getParameterNames();
     while(paramNames.hasMoreElements()) {
            String paramName = (String)paramNames.nextElement();
            String[] paramValues =
            request.getParameterValues(paramName);
            if (paramValues.length == 1) {
            String paramValue = paramValues[0];
            if (paramValue.length() == 0)
                out.println("<td><i>没有值</i></td>");
            else
                out.println("<td>" + paramValue + "</td>");
        } else {
            // 读取多个值的数据
            out.println("<td><ul>");
            for(int i=0; i < paramValues.length; i++) {
            out.println("<li>" + paramValues[i]);
        }
            out.println("</ul></td>");
        }
        out.print("</tr>");
    }
    out.println("\n</table>\n</body></html>");
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是ServletServlet是一种Java编写的服务器程序,运行在支持Java Servlet规范的Web服务器上,用于处理客户端请求并生成响应。 2. Servlet的生命周期是什么? Servlet的生命周期包括:装载、初始化、服务和销毁四个阶段。在装载时,Servlet类被加载到JVM中;在初始化时,Servlet容器创建Servlet实例并调用其init()方法进行初始化;在服务时,Servlet容器调用其service()方法来处理客户端请求;在销毁时,Servlet容器调用其destroy()方法来释放资源。 3. Servlet的线程安全问题如何解决? Servlet是多线程的,因此需要考虑线程安全。常见的解决方案包括使用synchronized关键字、使用线程安全的容器(如ConcurrentHashMap)、使用ThreadLocal等。 4. Servlet如何获取请求参数? Servlet可以通过HttpServletRequest对象的getParameter()方法来获取请求参数。例如: String username = request.getParameter("username"); 5. Servlet如何获取Session对象? Servlet可以通过HttpServletRequest对象的getSession()方法来获取Session对象。例如: HttpSession session = request.getSession(); 6. Servlet如何重定向响应? Servlet可以通过HttpServletResponse对象的sendRedirect()方法来重定向响应。例如: response.sendRedirect("http://www.example.com"); 7. Servlet如何实现文件上传? Servlet可以通过使用Apache Commons FileUpload组件来实现文件上传。具体实现步骤包括:创建Servlet、创建文件上传处理器、解析请求、获取上传文件、保存上传文件。 8. Servlet如何使用过滤器? Servlet可以通过使用过滤器来对请求进行预处理和后处理。具体实现步骤包括:创建过滤器、配置过滤器、编写过滤器代码。 9. Servlet如何使用监听器? Servlet可以通过使用监听器来监听Servlet容器中的事件,如Servlet的生命周期、Session的创建和销毁等。具体实现步骤包括:创建监听器、配置监听器、编写监听器代码。 10. Servlet如何处理异常? Servlet可以通过try-catch语句来处理异常,或者使用Servlet容器提供的异常处理机制。例如,可以通过在web.xml文件中配置error-page元素来指定异常处理页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值