# 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 :

下载 Tomcat 9
https://tomcat.apache.org/download-90.cgi

解压到 D:\\app目录中
# 启动TOmcat
双击运行: startup.bat
使用浏览器访问 Tomcat
代表本机地址:
- localhost
- 127.0.0.1
- 127.0.0.2
```
http://localhost:8080/
```

- 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
## 创建一个普通项目

## 给项目添加Web支持
settings->Project Structure->Modules
- 设置web资源目录




创建一个测试html文档 test.html
```
Title
测试IDEA TOMCAT
```
## 设置打包环境
设置项目的上下文,其他配置
settings->Project Structure->Artifacts


## 集成TOMCAT并发布
理论上 将web目录复制到TOMCAT下 的webapps的目录中启动就可以访问,比较麻烦,将TOMCAT 集成到IDEA中




# 发布到TOMCAT



### 测试发布的项目
http://localhost:8080/web/test.html

#
# 构造路径
机器(本机)--> 应用(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类库



```
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);
}
}
```

# 处理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
```

## 使用
```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的创建

# 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

## 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

使用
```
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());
```