一、request.getParameter();
1)request.getParameter() 取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
(2)request.getParameter() 方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。
它是一种取参数的方法。把jsp文件中的数据读取到出来,经过封装利用起来。
//JSP中的代码
<form action="xxxxxx"> //在JSP中设置form表单
账号:<input type="text" name="account"/> //在JSP中设置其账号的输入框
密码:<input type="password" name="password"/> //在JSP设置其密码的输入框
<input type="submit" value="提交"> //定义提交按钮
</form>
Servlet中通过JSP中的name属性来获取account 和 password
//获取name="account"
String account=request.getParameter("account");
//获取name="password"
String password=request.getParameter("password");
//将上述输入的账号密码传参到login属性中
Login login=new Login(account,password);
//这样就可以判断您自己输入的账号密码是否与数据库中的账号密码相符
boolean legal=loginService.legal(login);
二、request.setAttribute的用法
request.getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型 。
request.getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型。
setAttribute的参数是String 和 Object ,
1.放的时候:Double res = new Double(result);//包装
request.setAttribute("result", res);//再设置进去
2.取的时候:Double res = (Double)request.getAttribute("result");
double result = res.doublue();
另外,需要注意的是使用request.setAttribute时不能使redirect而是forward。即是将请求转发而不是重定向.
三、Cookie和Session
1.什么叫Cookie,什么叫Session Cookie:Cookie是保存在浏览器端的以键值对形式存在的一个临时的文件,cookie默认情况下关闭浏览器就销毁了,实际的作用就是用来保存 一些临时的信息 Session:Session叫做会话,实际上是维持了浏览器和服务器之间的一段时间的连接状态,在浏览器第一次访问到服务器的时候,服务器就会在 服务器的内存中开辟一段控制来存放这个浏览器和服务器之间通信的一些信息。Session最重要的用途就是做用户身份验证。 Cookie只是实现Session的一种方式,只要我们浏览器可以向服务器发送SessionID,就可以找到本次会话的session空间:比如,在URL后面跟SessionID 2.Tomcat中处理Session的具体方式: 1.浏览器第一次访问服务器的时候,服务器就会开辟本次会话的session,这个session空间有一个id叫 JSESSIONID -> TOMCAT中叫这个 2.放服务器结束处理以后,会将response对象转发给servlet容器进行处理,在servlet容器中,会设置一个cookie键值对,键为JSEESIONID,值为本次会话的session这个id 3.浏览器接收到响应以后,发现响应报文中有cookie键值对,于是就将这个cookie键值对保存在浏览器的cookie文件中 4.浏览器第二次访问服务器的时候,就会将这个cookie键值对添加到请求头(说白了就是将JSESSIONID带上) 5.服务器接收到浏览器的第二次请求的时候,servlet容器就获取到了这个 JSESSIONID:XXXXX,于是就去服务器空间中找到了这个对应的session,添加到本次的request对象中 6.在servlet中,就直接通过request.getSession()获取到这个session对象 3.Session和Cookie的生命周期: cookie:默认情况下在浏览器关闭以后,cookie就销毁了 ps:反正浏览器第一次访问的时候都会创建session,有一个SessionID,所以只要我们能够在cookie中设置这个sessionID,就能访问到其他浏览器的会话 (所以会造成安全问题) session:在服务器内session的默认过期时间是30min(即30min以后,seesion所在的空间就被销毁了)
public class Cookie_Session extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//获取参数值
String username = req.getParameter("username");
String password = req.getParameter("password");
//创建Session对象
HttpSession httpSession = req.getSession();
//把获取到的参数值封装到Session对象里面
httpSession.setAttribute("username",username);
httpSession.setAttribute("password",password);
resp.sendRedirect("/XXX.login_page");
}
}
@WebServlet(urlPatterns = "/XXX.login_page",loadOnStartup = 1)
public class login_page extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//用HttpSession().getAttribute()获取Session里面封装好的参数值
HttpSession httpSession = req.getSession();
resp.getWriter().println("欢迎登录,您的用户名是:"+httpSession.getAttribute("username")+"您的密码是:"+httpSession.getAttribute("password"));
}
}