Java笔记 | 您所在的位置:网站首页 › java中class重命名 › Java笔记 |
2023.3.30spring-mvc 程序创建流程1. 步骤1.1 maven部分 创建模块(maven模块,选择maven-archetype-webapp) --> 通过pom.xml 文件添加依赖(dependencies) ,即通过maven导入jar包 --> 整理项目文件夹(在mian文件夹新建文件夹java,resource和test/java,test/resource) --> mvc下的web.xml更换成4.0版本(原来是旧版,需要从其他地方复制粘贴4.0版本) --> 给index.jsp添加指令 --> 配置tomcat服务器 1.2 springMvc部分引入spring-webmvc jar包(dependency) --> 在web.xml下配置过滤器负责处理乱码 --> resource资源文件夹下添加spring_mvc.xml 核心配置文件 --> 在web.xml下配置中央处理器DispatcherServlet --> 在WEB-INF创建一个页面用于测试(springmvc中,所有的页面都是放置在WEB-INF文件夹下) --> 在src/java中创建一个Controller(类似于jsp项目中的Servlet) --> 在spring_mvc.xml配置文件中进行相关配置 --> 指定为那些包中的@Controller创建对象(扫包) 配置视图解析器 配置默认的HandlerMapping以及HandlerAdapter 测试 2. 具体步骤2.1 创建模块(maven模块)添加jstl,standard,javax.servlet-api,javax.servlet.jsp-api,spring-webmvc 这些jar包的依赖 jstl jstl 1.2添加完后记得刷新 2.3 整理项目文件夹在src文件夹下新建文件夹main/java,main/resource和test/java,test/resource 将原版本改成4.0版本 2.4.2 index.jsp添加指令将以下指令添加到index.jsp顶部 2.5 配置tomcat服务器选择local --> 重命名 spring_mvc_server --> Deployment添加支持 --> ...... 2.6 web.xml下配置过滤器负责处理乱码 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 forceRequestEncoding true forceResponseEncoding true CharacterEncodingFilter /* 2.7 添加spring_mvc.xml 核心配置文件resource资源文件夹下添加spring_mvc.xml 核心配置文件 在src/java中创建一个Controller(类似于jsp项目中的Servlet) Controller @Controller // @Controller注解表示spring容器需要创建这个Controller对象 @RequestMapping("student") // @RequestMapping注解表示访问我时,使用的url地址 public class StudentController { // 写具体操作的方法,负责跳转到对应页面 @RequestMapping("showStudent") public String showStudent(HttpServletRequest req){ req.setAttribute("name", "关羽"); // 给页面传值 return "student"; // student 返回页面的名称 } }2.11 配置spring_mvc.xml2.11.1 指定为那些包中的@Controller创建对象 2.11.2 配置视图解析器 前缀 后缀 2.11.3 配置默认的HandlerMapping以及HandlerAdapter 2.12 测试2023.3.29 一、添加数据(楼宇)1. 步骤添加数据按钮(超链接跳转到new_building.jsp页面) --> new_building.jsp (通过表单填写相应数据,并提交到sevlet处理) --> sevleAdd(接收来自new_building.jsp的数据,通过 --> service --> dao --> 数据库,执行添加数据操作,请求重定向到servletList) -->servletList(执行相应操作显示页面) 1.1 添加数据按钮 添加楼宇1.2 new_building.jsp(填写对应数据,并将数据提交) ... 1.3 sevleAdd (接收new_building数据,并执行添加相应操作)// 获取new_building提交的数据 String numbers = req.getParameter("numbers"); String units = req.getParameter("units"); String remarks = req.getParameter("remarks"); // 新建对象用于存储数据 Building building = new Building(); // 将获取到的数据存储到building对象中 building.setNumbers(numbers); building.setUnits(units); building.setRemarks(remarks); // 调用service --> dao --> 数据库,执行添加操作 buildingService.add(building); // 添加成功后重定向到/building/list,由其执行对应操作(显示页面list) resp.sendRedirect(req.getContextPath() + "/building/list");二、编辑数据(楼宇)1. 步骤按钮(超链接) --> servlet(根据指定条件通过service --> dao 获取相应数据) --> edit.jsp(用来存储获取到的数据,并执行编辑提交) --> servlet (根据edit提交的数据执行service --> dao 修改数据库数据) --> 显示回点击按钮之前的页面(通过req.getHeader("Referer")获取初始地址,并传递,最后在servlet中直接指向传递的地址) 1.1 按钮(超链接) 编辑1.2 servlet(获取数据)String referer = req.getHeader("Referer"); // 获取请求前页面的链接(地址) int id = Integer.parseInt(req.getParameter("id")); // 获取请求传递的id Building building = buildingService.getById(id); // 通过id一步步到服务器获取对应数据 req.setAttribute("building", building); // 将获取到的数据存储到reque中 req.setAttribute("returnUrl", referer); // 将请求前页面链接存储到reque中 req.getRequestDispatcher("/pages/building/edit.jsp").forward(req, resp); // 将请求转发到edit页面1.3 edit页面显示并编辑数据 其他需要修改的数据通过表单元素显示并修改 ${building.remarks}并将数据通过表单里面显示值的方式显示出来 1.4 servlet (接收edit提交的数据,并执行修改)int id = Integer.parseInt(req.getParameter("id")); // 获取id String numbers = req.getParameter("numbers"); // 获取楼栋号 String units = req.getParameter("units"); // 获取单元号 String remarks = req.getParameter("remarks"); // 获取备注 String returnUrl = req.getParameter("returnUrl"); // 获取最初请求前页面地址 Building building = new Building(); building.setId(id); building.setNumbers(numbers); building.setUnits(units); building.setRemarks(remarks); buildingService.edit(building); //执行数据修改操作 resp.sendRedirect(returnUrl); // 重定向回到最初请求前页面三、Session和CookieSession和Cookie都是Web应用程序中用于在客户端和服务器之间共享信息的机制。它们通常用于存储用户的登录状态,以及其他应用程序数据。 1. CookieCookie是由服务器发送到客户端浏览器的一个小文本文件。当浏览器访问同一服务器时,它会将该Cookie发送回服务器。Cookie可以存储在客户端的本地计算机上,并且在该Cookie的生命周期内可以跨多个请求访问。可以使用Cookie来存储用户的身份验证令牌、喜好设置、购物车等信息。 2. Session2.1 解释Session则是在服务器端存储的一个数据结构,它用于在多个请求之间跟踪用户状态。当用户首次访问Web应用程序时,服务器会创建一个唯一的Session ID,并将该ID存储在一个Cookie中,该Cookie会发送回客户端浏览器。然后,客户端浏览器会将该Cookie存储在本地计算机上,以便在将来的请求中使用。每次客户端发送请求时,服务器都会根据Session ID查找该用户的Session数据,并将其用于处理该请求。Session可以存储各种类型的数据,例如用户身份验证信息、购物车内容、用户喜好等。 2.2 Session的创建Session是处于服务器端内存中的一个对象,创建的时间: 1)如果我们访问的是jsp页面,那么只要请求来到服务器,服务器就会自动为你创建session,同时将这个session的id以cookie的形式保存到客户端 2)如果访问的是servlet,不会自动为你创建session,除非显式调用了req.getSession()方法。 getSession不是createSession,getSession首先会判断当前是否已经创建了Session,如果创建了就返回,如果没有创建则创建再返回 3. Session和Cookie使用的不同虽然Session和Cookie都可以用于存储用户数据,但是它们的使用场景有所不同。Cookie可以在客户端存储信息,因此它们可以跨多个应用程序使用。Session则存储在服务器端,因此它们只能在特定应用程序中使用。通常,Cookie用于存储不太敏感的数据,而Session用于存储敏感数据,例如用户身份验证信息。此外,Cookie的大小通常有限制,而Session的大小则通常更大。 注意:cookie中只能存字符串, session中可以存对象 4. 例子记住用户名和密码: 1)在登陆页面添加一个记住我的复选框 记住我2)修改登录逻辑 原来的获取用户不改动,在登录成功后,我们需要判断rememberMe的值,为true if(user != null){ // user不为null,即登录成功则执行 HttpSession session = req.getSession(); // 获取session,类似于单例模式,如果创建了就返回,如果没有创建则创建再返回 session.setAttribute("user", user); // 将user存储到session域对象,用于后续的过滤 saveUser2Cookie(req, resp); // 保存用户登录数据到Cookie } // 保存用户登录数据到Cookie private void saveUser2Cookie(HttpServletRequest req, HttpServletResponse resp) { String rememberMe = req.getParameter("rememberMe"); // 获取勾选框状态,如果勾选,其结果为“on” if("on".equals(rememberMe) == false){ // 如果不勾选则返回 return; } Cookie[] cookies = req.getCookies(); // 获取现有的所有Cookie for(Cookie cookie : cookies){ // 遍历cookies if(cookie.getName().equals("username")){ // 如果存在username这个cookie则返回(不添加) return; } } // 不存在则创建对应cookie Cookie ckUsername = new Cookie("username", req.getParameter("username")); ckUsername.setMaxAge(7 * 24 * 60 * 60); // cookie的保存时间,单位为s ckUsername.setPath("/"); // cookie的起作用的地址 resp.addCookie(ckUsername); // 添加cookie Cookie ckPassword = new Cookie("password", req.getParameter("password")); ckPassword.setMaxAge(7 * 24 * 60 * 60); ckPassword.setPath("/"); resp.addCookie(ckPassword); }3)修改login.jsp 将用户传递过来的cookie中的username和密码写入到响应的文本框,实现自动填写账号和密码 四、servlet Filter 过滤静态资源也会被filter拦截 // urlPatterns当前过滤器要拦截的目标,"/*"表示拦截一切访问 @WebFilter(filterName = "FilterLogin", urlPatterns = "/*") public class FilterLogin 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 { // request本质上是一个HttpServletRequest对象,所以将它强转成HttpServletRequest,调用更多方法 HttpServletRequest req = (HttpServletRequest) request; String uri = req.getRequestURI(); // 获取请求访问的地址 Object user = req.getSession().getAttribute("user"); // 获取user对象 boolean notCheck = user != null // user不等于null则不检查(用户已登录) || uri.endsWith("login.jsp") // 判断是否为登录页面 || uri.endsWith("user/login"); //判断是否为登录页面的指向的servlet(执行账号校验) if(notCheck){ chain.doFilter(request, response); // notCheck为true(三个条件有一个成立)则不检查 }else{ HttpServletResponse resp = (HttpServletResponse) response; resp.sendRedirect(req.getContextPath() + "/pages/login.jsp"); // 为false则重定向回登录页面 } } } |
CopyRight 2018-2019 实验室设备网 版权所有 |