本文共 10011 字,大约阅读时间需要 33 分钟。
2019年7月15日。
这是我学习JavaWeb的第三天。 这一天,我学到了以下的知识。所有能设置编码的地方都统一设置 : 数据库,数据库字段,Servlet程序,请求,响应 , 前端,浏览器。
获取属性:使用Request对象,可以获取到web项目的相关属性,代码如下:
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class RequestDemo01 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //查看request对象的方式 System.out.println(request.getContextPath()); //获得web项目路径 System.out.println(request.getRequestURI()); //请求的URL路径 //Remote 远程 System.out.println(request.getRemoteUser()); //获得远程的用户名 System.out.println(request.getRequestedSessionId()); //获得SessionId; System.out.println(request.getServletPath()); //请求servlet的url System.out.println(request.getLocalAddr()); //获得本地地址 防火墙 System.out.println(request.getLocalName()); //获得本地名字 System.out.println(request.getLocalPort()); //获得访问的端口号 } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}
接收前端用户提交的参数:通过Request对象,可以获取到用户从前端提交的数据,步骤如下:
${pageContext.request.contextPath}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>注册 <%--JSP的注释--%><%--Form表单 action:代表要提交的路径,表单要提交到哪里 ,可以提交到一个Servlet //提交到Servlet需要,获取到Web项目的路径下的Servlet method: 提交表单的方式--%>注册
request.getParameter("控件的name")
来实现import javax.print.attribute.HashPrintRequestAttributeSet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;//处理前端提交过来的数据public class RequestDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //通过HttpServletRequest获取前端用户提交的信息 //req.getParameterValues(); 获得前端传递的控件信息,通过控件的name;但是可以接受多个参数的控件,比如(多选框....) //req.getParameter(); 获得前端传递的控件信息,通过控件的name; req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); String username = req.getParameter("username"); String password = req.getParameter("password"); //连接数据库,比较数据库中的信息是否匹配 if (username.equals("admin")&&password.equals("1234567")){ System.out.println("登录成功!"); //跳转到成功页面 }else { System.out.println("登录失败!"); //提示重新注册 } System.out.println(username); System.out.println(password); }}
RequsetDemo02 servlet.RequestDemo02 RequsetDemo02 /r2
Request实现请求转发:通过Request对象,可以实现请求转发,代码如下:
import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class FormServlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //处理乱码 req.setCharacterEncoding("UTF-8"); //处理前端的请求 String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println("接收到的用户名:"+username+"\n密码:"+password+"\n爱好:"); String[] hobbies = req.getParameterValues("hobby"); for (String hobby : hobbies) { System.out.println(hobby); } //重定向:服务器告诉客户端你应该请求另外一个地址; (地址栏会变) //resp.sendRedirect("url"); //转发:服务器把这个请求转向另外一个Servlet去处理; (地址栏不会变) //RequestDispatcher ,需要使用RequestDispatcher来进行处理,我们需要获得这个类 //参数就是他要转发到的页面 /* RequestDispatcher requestDispatcher = req.getRequestDispatcher("/success.jsp"); requestDispatcher.forward(req,resp); */ try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } req.getRequestDispatcher("/success.jsp").forward(req,resp); }}
既然提到了转发,就不得不提到转发和重定向的区别,它们的区别如下:
会话字面意思:一次交流或交谈
在Web中,会话表示从浏览器打开某个网站,在这个网站中无论操作了什么,知道关闭浏览器,这一个过程,称之为一个会话。
怎么样算会话结束:
为什么要处理会话:
长期保持会话,无论用户关闭少次浏览器,这个会话都会存在。
比喻:
你昨天来了教室,我今天需要知道你昨天来了教室;
你:客户端
我 :服务器Javaweb中针对这两个不同的端,诞生了两个小机制
cookie :在客户端留下一点东西,客户端下次带过来,我就知道你来过了。
问:我的店铺非常大,怎么证明你来过?
答:你开一个会员吧 , 我给你一张VIP卡,你下次带卡来,我就知道你来过了
Session:在服务器端登记你来过。
问:你去理发店。怎么证明你来过?
答:理发店收会员,在他的笔记本上记录了你的消息,下次你来直接报上大名就可以了。
构造器:
Cookie cookie = new Cookie(String name,String value);Cookie cookie = new Cookie(String name,String value);Cookie cookie = new Cookie(String name,String value);
服务器响应cookie给客户端:
Response.addCookie(Cookie);Response.addCookie(Cookie);Response.addCookie(Cookie);
服务查看用户带来的请求是否有cookie:
Cookie[] cookies = Request.getCookie();//可以使用cookie来验证用户是否来过//判断cookies是否为空,然后遍历即可Cookie.getName();Cookie.getValue();
cookie测试用户是否来过
import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class CookieTest extends HttpServlet { boolean flag = false; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决乱码问题: request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //检查请求的人是否带了Cookie //通过用户的请求,检查它是否有cookie Cookie[] cookies = request.getCookies(); System.out.println("cookie:"+cookies); if (flag){ //如果flag是真,来过 if (cookies!=null){ //你有cookie for (int i = 0; i < cookies.length ; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("lastLoginTime")){ response.getWriter().println("你上一次来的时间为:"+cookie.getValue()); System.out.println("刷新了cookie"); } } } }else { //如果flag是真,没来过 response.getWriter().println("你是第一次来,还想要会员套餐"); System.out.println("给该用户一个cookie"); } //建立一个cookie Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+""); //设置cookie保存的时间 //cookie.setMaxAge(); //把这个cookie发给客户端 response.addCookie(cookie); //response.addCookie(new Cookie("lastLoginTime",System.currentTimeMillis()+"")); flag = true; }}
只要客户端一旦连接上服务器,服务器就会自动产生Session;
一个连接对应一个session,session可以在一个会话中传递信息; 通过setAttribute
设置值。 通过getAttribute
获得值。 由服务器端控制,服务器如果重启了,信息就会丢失! 假设从第一个网页将一个键值对存入到session后,到第二个网页后再从session取出来,示例代码如下:
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;public class SessionTest extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题: req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); //Session由服务器自动创建,如何获得session //HttpSession 得到的sessioin对象 HttpSession session = req.getSession(); //得到sessionID,一次会话,一个seesionID; String id = session.getId(); resp.getWriter().println("获得的sessionId:\n"+id); String name = "qinjiang"; //向session中存入一个值; session.setAttribute("name",name); resp.getWriter().println("存入信息成功:"+name); }}
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;//获得session存入的值public class SessionTest2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题: req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); //获得 HttpSession session = req.getSession(); System.out.println("得到的SessionID:"+session.getId()); String name = (String) session.getAttribute("name"); resp.getWriter().println("得到的session存入的信息"+name); //Servlet < Seesion < WebContext }}
若想要让session失效,就需要让会话注销,方法如下:
session.invalidate();//通过代码注销会话
1
转载地址:http://eicen.baihongyu.com/