4 servlet的单例问题
当servlet第一次被访问后,就被加载到内存,以后该实例对各个请求进行服务。即在使用时是单例的:
package com.xy.testServlet;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class MyServlet1 extends HttpServlet { int i=0; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(\ this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { i++; System.out.println(\ response.getWriter().println(\ }}
简单的用户登录,在主界面中可以显示用户名和自己的密码
? 登录界面
package com.xy.testServlet;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(\ response.setCharacterEncoding(\ PrintWriter out = response.getWriter();
}
out.println(\用户登录界面\out.println(\
out.println(\用户名:
\out.println(\密码:
\out.println(\登录'/>
\out.println(\
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }
}
? 处理界面
package com.xy.testServlet;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class LoginClServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType(\ response.setCharacterEncoding(\ PrintWriter out = response.getWriter(); String name=request.getParameter(\ String pwd=request.getParameter(\ System.out.println(\ if(name.equals(\ response.sendRedirect(\ }else{ response.sendRedirect(\这里是我们的项目名字加上我们要跳转的那个servlet的url
} } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.doGet(request, response); } }
? 主界面,有一个超链接可以返回重新登录
package com.xy.testServlet;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class Main extends HttpServlet { /** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get.
* * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType(\ PrintWriter out = response.getWriter();
out.println(\out.println(\重新登录\ } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.doGet(request, response); } }
可以使用我们的java技术来实现
可以使用httpServlet中的sendRedirec来实现 可以使用Session
HttpServletResponse
在我们的HttpServletResponse中有OutputStream和PrintWriter都可以实现向我们的浏览器回送数据不同:PrintWriter向客户端回送字符数据 OutputStream可以回送字符数据,可以回送字节数据 选择: 我们如果回送的是字符数据,就是用PrintWriter,效率高 如果回送的是字节数据就是用OutputStream PrintWriter out = response.getWriter();
out.println(\
OutputStream os=response.getOutputStream();
os.write(\ os.write(\重新登录\注意:不能同时使用这两个
Sendredirect:
package com.xy.testServlet;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class LoginClServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(\ response.setCharacterEncoding(\ PrintWriter out = response.getWriter(); String name=request.getParameter(\ String pwd=request.getParameter(\ System.out.println(\ if(name.equals(\ response.sendRedirect(\ }else{ response.sendRedirect(\ } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
小结:
response.sendRedirect(\优点:传送速度快
缺点:只能传送字符串,不能传送一个对象
注意:在?前面的是我们要跳转的那个页面的url,url和变量之间要有问号,当我们传递多