# javaweb **Repository Path**: hrbu-2022/javaweb ## Basic Information - **Project Name**: javaweb - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-12 - **Last Updated**: 2024-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 安装服务器 安装JDK,并且配置JAVA_HOME JAVA_HOME : ![image-20241112093315430](imgs/image-20241112093315430.png) 下载 Tomcat 9 https://tomcat.apache.org/download-90.cgi ![image-20241112085745703](imgs/image-20241112085745703.png) 解压到 D:\\app目录中 # 启动TOmcat 双击运行: startup.bat 使用浏览器访问 Tomcat 代表本机地址: - localhost - 127.0.0.1 - 127.0.0.2 ``` http://localhost:8080/ ``` ![image-20241112090227700](imgs/image-20241112090227700.png) - http://localhost:8080/ 代表的是访问本机 8080(Tomcat) Root的项目 - http://localhost:8080/examples 代表的是访问本机 8080(Tomcat) examples的项目 - http://localhost:8080/manager 代表的是访问本机 8080(Tomcat) manager 的项目 上下文 : manager 访问自己发布的test项目下的index.html http://localhost:8080/test/index.html # 集成到IDEA ## 创建一个普通项目 ![image-20241112095728743](imgs/image-20241112095728743.png) ## 给项目添加Web支持 settings->Project Structure->Modules - 设置web资源目录 ![image-20241112095827271](imgs/image-20241112095827271.png) ​ ![image-20241112095849335](imgs/image-20241112095849335.png) ![image-20241112095943630](imgs/image-20241112095943630.png) ![image-20241112105953486](imgs/image-20241112105953486.png) 创建一个测试html文档 test.html ``` Title 测试IDEA TOMCAT ``` ## 设置打包环境 设置项目的上下文,其他配置 settings->Project Structure->Artifacts ![image-20241112110422252](imgs/image-20241112110422252.png) ![image-20241112110433182](imgs/image-20241112110433182.png) ## 集成TOMCAT并发布 理论上 将web目录复制到TOMCAT下 的webapps的目录中启动就可以访问,比较麻烦,将TOMCAT 集成到IDEA中 ![image-20241112100057807](imgs/image-20241112100057807.png) ![image-20241112100143029](imgs/image-20241112100143029.png) ![image-20241112100207449](imgs/image-20241112100207449.png) ![image-20241112110617182](imgs/image-20241112110617182.png) # 发布到TOMCAT ![image-20241112110701134](imgs/image-20241112110701134.png) ![image-20241112110759452](imgs/image-20241112110759452.png) ![image-20241112110835934](imgs/image-20241112110835934.png) ### 测试发布的项目 http://localhost:8080/web/test.html ![image-20241112110923561](imgs/image-20241112110923561.png) # # 构造路径 机器(本机)--> 应用(Tomcat)-> 上下文(ContextPath) 项目名->具体的资源名称 本机可以使用localhost http://localhost:8080/web/test.html http://127.0.0.1:8080/web/test.html 局域网中使用 http://192.168.84.47:8080/web/test.html # 第一个Servlet - 第一个类 - 继承HttpServlet - 编写业务逻辑 - 发布到 工程里面 - 使用注解声明Servlet (Servlet 3.0 ) - 在web.xml中配置 ## 编写一个类 ## 继承 添加TOMCAT类库 ![image-20241112120127718](imgs/image-20241112120127718.png) ![image-20241112120208950](imgs/image-20241112120208950.png) ![image-20241112120238325](imgs/image-20241112120238325.png) ``` package com.neuedu.web.controller; import javax.servlet.http.HttpServlet; /** * @author 金山 * 项目:javaweb * site: https://blog.fulfill.com.cn * 描述 * @data 2024/11/1211:59 */ public class HelloWorldServlet extends HttpServlet { } ``` > 重写doGet、doPost ```java package com.neuedu.web.controller; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; /** * @author 金山 * 项目:javaweb * site: https://blog.fulfill.com.cn * 描述 * * * 构造的servlet 路径 * http://localhost:8080/web/hello * * * * @data 2024/11/1211:59 */ @WebServlet(urlPatterns = "/hello") public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取服务器时间 String time = new Date().toString(); //通过 resp 给浏览器响应内容 PrintWriter writer = resp.getWriter(); writer.write("server Time :"+time); writer.flush(); writer.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } } ``` ![image-20241112122707299](imgs/image-20241112122707299.png) # 处理IDEA中的 TOMCAT乱码 ``` D:\app\apache-tomcat-9.0.97\conf ``` 修改 logging.properties ``` java.util.logging.ConsoleHandler.encoding = GBK ``` # 传递参数 ``` 从客户端传递的参数 使用 request.getParameter("名称") ``` 验证错误的 路径 ``` http://127.0.0.1:8080/web/second?numa=0&numb=0 ``` # JSON 数据 使用FastJSON - 添加项目类库(lib)-- As Library - ```java String json = JSONObject.toJSONString(xxxx); ``` # 使用Axios - 引入axios - src js - 使用工程化的方式 npm install axios ## 安装 ```bash npm install axios ``` ![image-20241114135506197](imgs/image-20241114135506197.png) ## 使用 ```js import axios from 'axios'; ``` 参考网站: http://www.axios-js.com/zh-cn/docs/index.html#%E5%AE%89%E8%A3%85 ```ts function loadUserList() { // 为给定 ID 的 user 创建请求 axios.get('http://127.0.0.1:8080/web/user_list').then(function (response) { console.log(response.data); tableData.value = response.data }) .catch(function (error) { console.log(error); }); } ``` # Session的创建 ![image-20241115111207273](imgs/image-20241115111207273.png) # session失效实现 Tomcat(web.xml) < 项目中的 Web.xml < session.setMaxInactiveInterval(10); # FIlter - 实现 FIlter接口 - 重写实现 doFilter 的 方法 - 设置拦截的路径 ```java package com.neuedu.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 金山 * 项目:javaweb * site: https://blog.fulfill.com.cn * 描述 * @data 2024/11/1511:49 */ // @WebFilter(urlPatterns = "/*") // @WebFilter(value = "/*") @WebFilter( "/*") public class EncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("EncodingFilter.init"); } /** * 执行的 过滤 核心代码 * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; System.out.println("我是保安,欢迎业主回家"); //Filter 链 方形 filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { System.out.println("EncodingFilter.destroy"); } } ``` # 登录的逻辑: - Session 会话保持 - Filter 过滤器: - CorsFiler - LoginFilter ![image-20241115141307478](imgs/image-20241115141307478.png) ## CorsFilter 设置跨域信息,允许跨域使用session ````java package com.neuedu.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 金山 * 项目:javaweb * site: https://blog.fulfill.com.cn * 描述 * @data 2024/11/1511:49 */ // @WebFilter(urlPatterns = "/*") // @WebFilter(value = "/*") @WebFilter( "/*") public class CorsFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("CorsFilter.init"); } /** * 执行的 过滤 核心代码 * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; // System.out.println("跨域的 设置 Filter"); // 解决跨域的问题 response.setHeader("Access-Control-Allow-Origin", "http://localhost"); //允许跨域的时候 使用 cookie response.setHeader("Access-Control-Allow-Credentials", "true"); //Filter 链 方形 filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { System.out.println("CorsFilter.destroy"); } } ```` ## LoginController ```java package com.neuedu.web.controller; import com.neuedu.web.utils.JSONUtils; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * @author 金山 * 项目:javaweb * site: https://blog.fulfill.com.cn * 描述 * @data 2024/11/158:59 */ @WebServlet("/login") public class LoginController extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Map result = new HashMap(); result.put("success", false); String userName = request.getParameter("userName"); String password = request.getParameter("password"); if ((userName.equals("admin") || userName.equals("root")) && password.equals("123456")) { HttpSession session = request.getSession(); System.out.println(session.getMaxInactiveInterval()); //设置最大存活时间 // session.setMaxInactiveInterval(10); // System.out.println("登录: session.getId() = " + session.getId()); session.setAttribute("userName", userName); result.put("success", true); result.put("msg", "登录成功"); } else { System.out.println("登陆失败"); result.put("msg", "登陆失败"); } JSONUtils.write(response, result); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` ## LoginFilter ````java package com.neuedu.web.filter; import com.neuedu.web.utils.JSONUtils; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * @author 金山 * 项目:javaweb * site: https://blog.fulfill.com.cn * 描述 * @data 2024/11/1511:49 */ // @WebFilter(urlPatterns = "/*") // @WebFilter(value = "/*") @WebFilter( "/*") public class LoginFilter implements Filter { //白名单 String whiteList = "/login"; @Override public void init(FilterConfig filterConfig) throws ServletException { // System.out.println("EncodingFilter.init"); } /** * 执行的 过滤 核心代码 * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; /** * 忽略的白名单 */ //请求路径 String requestURI = request.getRequestURI(); requestURI = requestURI.substring(requestURI.lastIndexOf("/")); System.out.println("requestURI = " + requestURI); boolean isWhiteList = whiteList.indexOf(requestURI) != -1; // 判断是否登录 HttpSession session = request.getSession(); Object userName = session.getAttribute("userName"); if(userName != null || isWhiteList){ //Filter 链 放行 filterChain.doFilter(servletRequest,servletResponse); }else{ Map result = new HashMap(); result.put("success",false); result.put("msg","没登录"); JSONUtils.write(response,result); } } @Override public void destroy() { System.out.println("EncodingFilter.destroy"); } } ```` ## 前端 登录画面 核心代码 ```ts // 配置 axios let instance = axios.create({ withCredentials:true }) ``` ```vue ``` ## 登录成功 验证是否携带sessionid HOME.vue ```` ```` ## axios 封装 request.ts ```ts // 配置 axios import axios from "axios"; export let service = axios.create({ withCredentials:true, baseURL:'http://localhost:8080/web' }) ``` # VO和PO的转换 ```java List userVOList = umsUsers.stream().map(umsUser -> { UserVO vo = new UserVO(); // vo.setUserid(umsUser.getUserid()); vo.setUsername(umsUser.getUsername()); vo.setNickname(umsUser.getNickname()); vo.setExpire(umsUser.getExpire()); vo.setLastLogin(umsUser.getLastLogin()); vo.setDeptId(umsUser.getDeptId()); vo.setDeptName(umsUser.getDeptName()); vo.setRegistLevel(umsUser.getRegistLevel()); vo.setCreatetime(umsUser.getCreatetime()); return vo; }).collect(Collectors.toList()); ``` 使用Beanutils-- apache ![image-20241118165647333](imgs/image-20241118165647333.png) 使用 ``` List userVOList = umsUsers.stream().map(umsUser -> { UserVO vo = new UserVO(); try { BeanUtils.copyProperties(vo,umsUser); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } return vo; }).collect(Collectors.toList()); ```