Java笔记 您所在的位置:网站首页 java中class重命名 Java笔记

Java笔记

2023-04-08 01:15| 来源: 网络整理| 查看: 265

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模块)

2.2 添加依赖(dependencies)

添加jstlstandardjavax.servlet-apijavax.servlet.jsp-apispring-webmvc 这些jar包的依赖

jstl jstl 1.2

添加完后记得刷新

2.3 整理项目文件夹

在src文件夹下新建文件夹main/javamain/resourcetest/javatest/resource

2.4 web.xml更换成4.0版本,index.jsp添加指令2..4.1 web.xml更换成4.0版本 ​ Archetype Created Web Application ​

将原版本改成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 核心配置文件

2.8 配置中央处理器DispatcherServlet DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring_mvc.xml DispatcherServlet /

2.9 在WEB-INF创建一个页面用于测试

2.10 创建一个Controller

在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和Cookie

Session和Cookie都是Web应用程序中用于在客户端和服务器之间共享信息的机制。它们通常用于存储用户的登录状态,以及其他应用程序数据。

1. Cookie

Cookie是由服务器发送到客户端浏览器的一个小文本文件。当浏览器访问同一服务器时,它会将该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 实验室设备网 版权所有