Servlet
前端向其他页面传值的方式
1.通过from表单*向其他页面进行传值
<form action="数据要提交的地址" method="get">
<input type="text" name="username"/>
<input type="submit" value="提交"/>
<form>
2.通过a标签的超链接进行传值
<a href="">点击我进行传值</a>
3.通过localtion.href="login?user=zhangsan"进行传值
4.通过ajax进行传值
设置字符编码
request.setCharacterEncoding("utf8");
// response.setCharacterEncoding("utf8");
response.setContentType("text/html; charset=UTF-8");//这个就包含了上面哪行代码的设置
request 与response
1.request
1.转发地址栏的路径不变
2.转发只能访问当前服务
、器下的资源
3.转发只是一次请求
方法:
request.getParameter("userid");//通过inpu里面的name值来获取传递过来的值
request.getRequestDispatcher("index.jsp").forward(request,response);
2.response
1.重定向地址栏的路径改变
2.重定向可以访问其他服务器下的资源
3.重定向只是两次请求
方法:
response.sendRedirect("login.jsp");//重定向到login.jsp页面
session服务器端会话
//获取用户从界面传过来的值
String userid = request.getParameter("userid");
String pwd = request.getParameter("pwd");
if(userid.equals("admin") && pwd.equals("admin")){
//30分钟之内,会话是有效的,数据共享是全网站,所以在下面可以用重定向的方式
//通过getsession的方式来获取方式来获取session对象
HttpSession session = request.getSession();
//设置session会话的一个有效时间,一般session的默认有效时间是30分钟,过期消失,如果服务器关闭或者重启也会消失
//关闭浏览器或者是写代码注销也会消失
session.setMaxInactiveInterval(20000);
User user=new User();
user.setId(userid);
user.setPwd(pwd);
//设置session会话的值
session.setAttribute("users",user);
//重定向到其他页面,因为session会话是全网站共享的
response.sendRedirect("login.jsp");
cookie客户端会话
String str="12345";
//第一个是cookie的名称,第二个则是cookie的值
Cookie cookie=new Cookie("name",str);
//设置访问那些页面时候可以写入cookie
cookie.setPath("/");
//设置cookie的有效时间
cookie.setMaxAge(180);
//将cookie写入客户端(通过浏览器到硬盘)
response.addCookie(cookie);
//cookie的遍历
Cookie[] cookies = request.getCookies();
for( Cookie coks:cookies){
if(coks.getValue().equals("12345")){
//获取cookie的名称和值
System.out.print(coks.getName()+"----------");
System.out.println(coks.getValue());
break;
}
}
会话概念:一次会话中包含多次请求和响应,一次会话:浏览器第一次给服务器发送请求,会话建立,直到一端结束会话
功能:在一次会话的基础上(请求间)共享数据
session与cookie的区别
session与cookie的区别
1.cookie是存储在客户端的(通过浏览器存储到用户的硬盘上)而session是存储在服务器上的(内存里)
2.cookie时间保留比较久的,session一般没有那么长的时间,用户退出或者时间到了就没了
JSTL表达式的运用
jar包----[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sm0bJA2Y-1623238573075)(C:\Users\Administrator\Pictures\servlet\4.jpg)]
在最上面要导入EL表达式的jar包<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach var="st" items="${user}"> 和java里面的foreach差不多
姓名:${st.id} st.属性
年龄:${st.name}<br>
</c:forEach>
EL表达式的运用
session.setAttribute("name",userid);//通过name的值来获取userID的值 用session数据舒全页面共享,而request的话只有转发的页面能获取数据账号:${name}密码:${pwd}
servlet生命周期
servlet的生命周期一般分为4个步骤:加载》实例化》服务》销毁 1.加载:一般是在Tomcat上运行时完成的,将servlet加载到Tomcat上,或者是客户端请求是也可以 2.实例化:一般是读取配置文件,读取初始化的配置参数,这些基本上在整个生命周期只执行一次inin()方法,构造方法比init方法先执行 3.服务:一般是接收客户端的请求,servlet会创建一个servlet对象处理客户的请求,根据客户的请求方式,来执行不同的请求doGet() doPost() 4.销毁:当服务器重启或者是关闭服务器时会执行销毁的方法的story()
过滤器
作用:防止用户不登录,就直接输入网址即可访问首页的作用
原理:在filter服务器被加载到web容器时,首先调用的是init函数,且只调用一次,如果init方法失败,则filter就会失效,过滤功能是在dofilter函数里面的,每次请求或者响应都会经过过滤器
package com.qs.lianxi0530.Filter; /** * @author 杨忠荣 * @create 2021-05-30-9:10 */import javax.servlet.*;import javax.servlet.annotation.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebFilter(urlPatterns = "/*")public class SessionFilter implements Filter { public void init(FilterConfig config) throws ServletException { } public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { System.out.println("所有请求都会被我拦截"); //将父类的请求对象强转成子类对象,才能获取到session里面的值 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //获取请求的全路径 String requestURI = req.getRequestURI(); //截取请求路径的最后一个斜杠后面的值判断是否是登录界面或者是处理登录界面 String substring = requestURI.substring(requestURI.lastIndexOf("/") + 1); //如果是,则放行 if(substring.equals("index.jsp")||substring.equals("loginServlet")){ //放行 chain.doFilter(request,response); return; } //判断存储的session是否为空,如果为空,说明用户登录错误,返回登录页面 if(req.getSession().getAttribute("username")!=null){ chain.doFilter(request,response); }else { res.sendRedirect("index.jsp"); } // chain.doFilter(request, response); 表示程序在这里设置了放行 // chain.doFilter(request, response); }}
使用第三方的工具包jar来批量获取页面传递过来的值
package com.qs; /** * @author 杨忠荣 * @create 2021-05-31-12:16 */import com.qs.domain.User;import com.sun.org.apache.bcel.internal.generic.NEW;import org.apache.commons.beanutils.BeanUtils;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.*;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.util.Iterator;import java.util.Map;@WebServlet("/loginServlet")public class UserServlet extends HttpServlet { private User User=new User(); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Map<String, String[]> parameterMap = request.getParameterMap();//通过getParameterMap获取前端传递过来的值,存储到map集合里面 try { BeanUtils.populate(User,parameterMap); System.out.println(User); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}