servlet(3)

• ServletConfig

– 如何给Servlet类配置初始化参数

– 如何在Servlet类中获取它的初始化参数值

• ServletContext

– 如何配置Web应用上下文初始化参数

– 如何在Servlet类中获取Web应用上下文的初始化参数值

• ServletContext的其他用途

– public void setAttribute(String name, Object obj):根据指定名name把对象obj存放到应用上下文范围中。

– public Object getAttribute(String name):根据指定名从应用上下文范围中获取到该属性对象。

– public void removeAttribut(String name):根据指定名从应用上下文范围中移除该属性。

• ServletConfig和ServletContext的区别

– 整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。

– Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。

• 使用synchronized

– 使用synchronized关键字同步操作成员变量和共享数据的代码,就可以防止可能出现的线程安全问题。

• 尽量少使用成员变量和共享数据

– ServletContext是可以多线程同时读/写成员变量和共享数据的,线程是不安全的。

– ServletRequest对象在service方法的范围内是有效的,不要试图在service方法结束后仍然保存请求对象的引用。

– Servlet本身就是多线程的,在Servlet中再创建线程,将导致执行情况复杂化,出现多线程安全问题

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

• //验证用户输入的账号和密码是否是合法的。用户的输入账号和密码怎么获取?验证--admin 1234 把验证的结果发送回客户端

• //用户的输入账号和密码怎么获取:通过request对象来获取

• request.setCharacterEncoding("utf-8");

• String username=request.getParameter("userName");

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

• String str=username+":"+password;

• //验证--admin 1234

• //String result=null;

if("admin".equals(username)&& "1234".equals(password)){

• //result="合法的用户";

• ServletContext context=this.getServletContext();

• context.setAttribute("username",username);

• response.sendRedirect("secuss");//请求的重定向---

• }else{

• //result="非法用户";

• //请求的转发--两个Servlet共享一个Request对象

• request.setAttribute("user_name_password",str);

• request.setAttribute("var1", "var1");

• request.setAttribute("var2", "var3");

• response.setContentType("text/html;charset=utf-8");

• PrintWriter out = response.getWriter();

• out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

• out.println("<HTML>");

• out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");

• out.println(" <BODY>");

• RequestDispatcher rd=request.getRequestDispatcher("fail");

• rd.forward(request, response);

• //rd.include(request,response);

• out.print("用户名为:"+username);

• out.println(" </BODY>");

• out.println("</HTML>");

• out.flush();

• out.close();

• }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值