点击项目右键,选择第二个添加依赖 ,选择如下图
将Tomcat集成到项目中
1.将工具栏设置显示
2.点击长方形框
进行命名
选择到配置Tomcat的根目录
之后可自行设置端口,在进行项目的部署
最下面便是访问的地址,名字自己取,然后点击应用
通过配置的地址进行访问后端
设置后,代码如果修改会自动更新过去
-
- <servlet>
- <servlet-name>loginservlet-name>
-
- <servlet-class>com.ffyc.webback.servlet.LoginServletservlet-class>
- <load-on-startup>1load-on-startup>
- servlet>
-
- <servlet-mapping>
- <servlet-name>loginservlet-name>
- <url-pattern>/loginurl-pattern>
- servlet-mapping>
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
-
- /*
- 后端用来处理登录请求的servlet
- 1.继承HttpServlet
- 2.重写方法
- Servlet接口,是javaWeb最顶级接口,定义servlet中的方法
- abstract GenericServlet implements Servlet
- destroy();
- init();
- abstract class HttpServlet extends GenericServlet
- service();
- LoginServlet extends HttpServlet 也就遵循servlet规范,请求到服务器时.服务器也要遵照servlet规范调用对应的方法
- */
- public class LoginServlet_back extends HttpServlet {
-
- /*
- 创建阶段
- serlvet对象不由我们创建,是由服务器创建的,创建有两种情况:
- 1.默认的,在第一访问对应的servlet时创建.
- 2.
1 >=0 就会在服务器启动时将servlet创建并初始化. - 服务器为每个servlet只创建一个对象(单例的),
- */
- public LoginServlet(){
- System.out.println("LoginServlet无参构造方法");
- }
-
- /*
- 初始化阶段:
- 在servlet创建成功后,执行完构造方法后,会立即调用init(),来实现一些初始化操作(只执行一次)
- */
- @Override
- public void init(ServletConfig config) throws ServletException {
- System.out.println(config.getServletName());
- System.out.println("init"+config);
- }
-
- /*
- 服务阶段:
- 对象创建,初始化完成后,一旦有客户端请求,就会执行service(),提供服务.
- HttpServletRequest req,(表示请求)
- HttpServletResponse resp(表示响应)
- */
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("service");
- System.out.println("service"+req);
- System.out.println("service"+resp);
- }
-
- /*
- 销毁阶段: 当服务器关闭,servlet在真正的销毁之前,服务器会调用destroy(),掉用的是已经生成的servlet对象的destory()方法执行一些最终的操作
- 例如打印日志,例如将内存数据保存到硬盘
- */
- @Override
- public void destroy() {
- System.out.println("destroy");
- }
-
-
- }
HttpServlet类中具有servic方法和doGet和post方法,系统会自动调用service方法,在service方法中会自动识别前端发来的请求,可以通过请求的类型去判断请求的方式,掉用doGet或者Post方法,我们需要在继承HttpServlet类的子类中去重写我们需要的doGet方法或者Post方法
- @WebServlet("/lg") //通过该标签可以快速配置该类的访问地址,不用再去web.xml中进行配置
- public class LoginServlet_2 extends HttpServlet {
-
-
- /*
- 处理doGet方式请求
- */
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("doGet");
- System.out.println(req.getParameter("name"));
- System.out.println(req.getParameter("age"));
- }
-
- /*
- 处理post方式请求
- */
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("doPost");
- req.setCharacterEncoding("UTF-8");
- String account = req.getParameter("account");
- String password = req.getParameter("password");
- System.out.println(account);
- System.out.println(password);
- System.out.println(req.getParameter("xb"));
- System.out.println(Arrays.toString( req.getParameterValues("ck")));//在接收多选框的时候使用getParameterValues
-
-
- //响应
- resp.setContentType("text/html;charset=utf-8");
- PrintWriter printWriter = resp.getWriter();
- printWriter.print("
登录成功
"); - //printWriter.print("账号或密码错误");
- }
- }
1.防止在使用请求时出现乱码,在使用请求前先进行处理
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
前端可以接收后端通过添加gson.jar包,将后端数据转换成json格式的字符串供后端进行接收处理
核心代码如下:
- Gson gson=new Gson(); //创建转换类
- String ad=gson.toJson(admin); //通过该方法可以将对象转换为json的字符串
- printWriter.println(ad); //传入前端
在前端有两种接收后端返回值后存储数据的方法:
- window.localStorage//本地存储,在浏览器中存储,浏览器关闭也还存在
- Window.sessionStorage //会话键存储,浏览器关闭会话结束,数据清除
使用第二种方法进行使用
- window.sessionStorage.setItem("admin",resp.data.name); //存入需要使用的数据
-
- var ac=window.sessionStorage.getItem("admin"); //通过键名存储时接收到存储在Window对象中的数据
-
- window.sessionStorage.clear(); //清除存储的用户数据
在前端进行页面跳转的时候需要进行判断是否是满足条件的跳转有两种方式
1.在前端进行设置路由跳转设置
this.$router.push("/main");//进行路由跳转,跳转到指定的路由界面
- //路由导航守护 一旦发生路由跳转就会执行该函数 to到哪里去 from是从哪里来 next放行
- rout.beforeEach((to,from,next)=>{
- if(to.path=='/login'){
- //如果用户访问的登录页,直接放行
- return next(); }
- else{
- var token = window.sessionStorage.getItem("admin");
- if(token==null){ //为空表示没有登录 返回到登录界面
- return next("/login");
- }else{
- next();
- }
- }
- })
1.浏览器第一次向后端只提交数据。没有会话id
2.浏览器就id号返回
3.之后浏览器的请求都含有id号
在main.js中设置
-
- import javax.servlet.*;
- import javax.servlet.annotation.WebFilter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
-
- @WebFilter(urlPatterns = "/*")
- public class CorsFilter implements Filter {
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
- throws IOException, ServletException {
- HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
- HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
- System.out.println("跨域过滤器");
- //允许携带Cookie时不能设置为* 否则前端报错
- httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域
- // 在使用时将origin替换成信任的IP
- httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等
- httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头
- httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookie
-
- filterChain.doFilter(servletRequest, servletResponse);
- }
- }
-
- import javax.servlet.*;
- import java.io.IOException;
-
- public class EncodFilter implements Filter {
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- System.out.println("编码过滤器");
- servletRequest.setCharacterEncoding("utf-8");
- servletResponse.setCharacterEncoding("utf-8");
- filterChain.doFilter(servletRequest,servletResponse);//向下执行
- }
- }
-
- import com.ffyc.webback.model.Admin;
- import javax.servlet.*;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpSession;
- import java.io.IOException;
- import java.io.PrintWriter;
-
- public class IsLoginFilter implements Filter {
-
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- HttpServletRequest request=(HttpServletRequest)servletRequest;
- HttpSession session=request.getSession();
- System.out.println("登录权限");
- Admin admin=(Admin) session.getAttribute("admin");
- if(admin==null){ //后端验证失败
- PrintWriter printWriter=servletResponse.getWriter();
- printWriter.print(201); //告诉后端验证失败
- }else{
- filterChain.doFilter(servletRequest,servletResponse);//向下执行
- }
- }
- }
在web.xml中配置上述三个过滤器
-
-
-
corsFilter -
com.ffyc.webback.filter.CorsFilter -
-
-
-
corsFilter -
/* -
-
-
-
encodFilter -
com.ffyc.webback.filter.EncodFilter -
-
-
encodFilter -
/* -
-
-
-
isLoginFilter -
com.ffyc.webback.filter.IsLoginFilter -
-
-
isLoginFilter -
/back/* -