首页 > 编程语言 >JavaWeb开发

JavaWeb开发

时间:2024-10-15 11:46:40浏览次数:3  
标签:http JavaWeb resp req 开发 import userNo out

JavaWeb开发

1、程序架构
1.1 软件类型

按照软件性质划分系统软件,应用软件

应用软件按照架构来分:

C/S架构(Client/Server模式,特征:需要下载客户端【安装包来进行安装到设备上】)

B/S架构 (Broswer/Server模式)特征:基于浏览器来运行的各种软件,通过http【超文本传输协议】来进行网络通信。

1.2 B/S程序的执行流程

本地浏览器通过在网址栏中输入(URL:统一资源定位符)域名或者IP地址,进行服务器信息的请求,首先会访问DNS服务器,进行域名和服务器的匹配,DNS服务器会把请求转发给IP地址的服务器,由这台服务器给客户端一个响应,会返回一堆(js+css+html)代码交由浏览器进行解释执行。

特征:一次客户端浏览器的请求对应着一次服务器端的响应。

2、搭建Web环境
2.1 安装配置Tomcat步骤
tomcat如何配置环境变量
一、配置Tomcat环境变量
1,新建变量名:CATALINA_BASE,变量值:C:\tomcat
2,新建变量名:CATALINA_HOME,变量值:C:\tomcat
3,打开PATH,添加变量值:%CATALINA_HOME%\lib;%CATALINA_HOME%\bin
二、启动Tomcat服务
方法两种:
1,方法一:在CMD命令下输入命令:startup即可启动服务。
2,方法二:右键点击桌面上的“我的电脑”->“管理”->“服务和应用程序”->“服务”,找到“Apache     Tomcat”服务,右键点击该服务,选择“属性”,将“启动类型”由“手动”改成“自动”。
三、测试Tomcat
打开浏览器,在地址栏中输入http://localhost:8080回车,如果看到Tomcat自带的一个JSP页面,说明你的Tomcat已搭建成功。
2.2 IDEA创建web项目

idea中选择File,点击New project,选择Java Enterprise,右侧配置Application Server,然后勾选Web Application就可以创建java web项目,目录会多一个web的目录,这个目录会存放web项目运行所需要的资源,比如web.xml及默认的index.jsp页面。

IDEA2023创建项目,先创建JavaSE项目,然后在项目上右键,点击add freamwork support,勾选Web Application选项,然后手动再配置tomcat即可。

2.3 Servlet

是一个特殊的Java类,如果继承了此类(实现了接口),则普通的Java类也可以接收web请求。

HttpServlet Java类 继承
Servlet 接口 实现
-----------------------------------------------
HttpServletRequest 请求对象,里面内置了请求中所包含的所有信息,请求参数等,请求头,请求体。
HttpServletResponse 响应对象,给客户端浏览器返回数据的时候,可以把一些信息放入响应对象中,客户端就可以获取到服务器端返回的结果数据

doGet()方法,可以处理客户端发送的get方式的请求
doPost()方法,可以处理客户端发送的post方式的请求

web.xml中配置Servelt的映射信息:

<servlet>
    <servlet-name>/hello</servlet-name>
    <servlet-class>cn.hxzy.Product</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>/hello</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
3、数据的传递及保存
3.1掌握request和response的使用
String userNo = req.getParameter("userNo"); //获取参数信息
3.2 解决页面中出现的中文乱码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8"); 
resp.setContentType("text/html;charset=utf-8");
3.3掌握session存取数据

session中存值:

String userNo = req.getParameter("userNo");
HttpSession session = req.getSession();//session对象,服务器的会话对象
session.setAttribute("userNo",userNo);

作用域:在一次客户端与服务器的会话中

session取值:

HttpSession session = req.getSession();
Object uno = session.getAttribute("userNo");
String userNo = "";
if (uno != null) {
    userNo = (String) uno;
}
PrintWriter out = resp.getWriter();
out.write(userNo);
out.flush();

现象:

服务器端是如何知道浏览器是否关闭的呢?

session是私有的

3.4 理解application

application是公有的,说的是作用域,全局的(服务器不停止,就会一直存在)

存值:

ServletContext application = req.getServletContext();
application.setAttribute("count",10086);

取值:

ServletContext application = req.getServletContext();
Object count = application.getAttribute("count");

统计网站访问量:

ServletContext application = req.getServletContext();
Object count = application.getAttribute("count");
System.out.println(count);
PrintWriter out = resp.getWriter();
out.print(count);
out.flush();

获取IP地址:

String localAddr = req.getLocalAddr();
String remoteAddr = req.getRemoteAddr();
System.out.println("localAddr:"+localAddr);
System.out.println("remoteAddr"+remoteAddr);
4、Fastjson插件

fastjson是阿里巴巴研发的一个开源的技术插件,主要的作用就是可以把数据格式化为json格式。

5、跨域
Access to XMLHttpRequest at 'http://localhost:8090/hello' from origin 'http://127.0.0.1:8848' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

阻止了一个跨越资源共享请求

CORS全称Cross-Origin Resource Sharing,即跨域资源共享

Servlet解决跨域,配置响应头:

 resp.setHeader("Access-Control-Allow-Origin","http://127.0.0.1:8848");
6、分层开发及MVC

三层:表示层、业务逻辑层、数据访问层。三层之间是互相调用,互相依赖。

MVC模式:

M:model,指的是模型,包含业务逻辑层,数据访问层,实体类

V:view ,指的是视图,包含表示层

C:Controller,指的是控制器:Servlet

控制器做了什么事情:

1、接收前端请求,把请求交由模型来处理

2、把模型返回的数据提供给视图来展示

模型做了什么事情:

1、负责处理控制器交付的任务

2、把处理结果交给控制器

视图做了什么事情:

1、用来展示数据

2、接收用户输入的数据,交给控制器

控制器可以理解为是视图与模型中间的连接桥梁。

7、过滤器
package cn.hxzy.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
@author:mengshujun
@createTime: 2024-03-13 10:22:29 星期三
*/
@WebFilter("/*")
public class ASetCharacterFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入charset过滤器....");
        HttpServletRequest req=(HttpServletRequest)servletRequest; //向下转型
        HttpServletResponse resp=(HttpServletResponse)servletResponse;
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        resp.setHeader("Access-Control-Allow-Origin","http://127.0.0.1:8848");
        //放行
        filterChain.doFilter(req,resp);

    }

    @Override
    public void destroy() {

    }
}
8、设置运行前端页面携带cookie

1、前端设置:axios

axios.defaults.withCredentials=true

注意:发送axios请求的时候,不要写localhost,不识别,必须写成本机IP地址(127.0.0.1)

2、后台设置允许cookie等身份凭证信息

resp.setHeader("Access-Control-Allow-Credentials","true");
9、资源保护
package cn.hxzy.filter;

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.io.PrintWriter;

/**
@author:mengshujun
@createTime: 2024-03-13 22:23:59 星期三
*/
@WebFilter(value = {"/app/getMessage","/app/*"})
public class LoginStatusFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入LoginStatusFilter过滤器....");
        HttpServletRequest req=(HttpServletRequest)servletRequest; //向下转型
        HttpServletResponse resp=(HttpServletResponse)servletResponse;
        resp.setHeader("Access-Control-Allow-Origin","http://127.0.0.1:8848");
        resp.setHeader("Access-Control-Allow-Credentials","true");
        HttpSession session = req.getSession();
        Object userNo = session.getAttribute("userNo");
        if(userNo==null){
            //证明没有登录,则拦截
           //jsp页面,异步请求
            PrintWriter out = resp.getWriter();
            out.print("未登录,无权访问!");
            out.flush();
            return;
        }
       filterChain.doFilter(req,resp);
    }

    @Override
    public void destroy() {

    }
}

标签:http,JavaWeb,resp,req,开发,import,userNo,out
From: https://blog.csdn.net/2301_80402969/article/details/142943093

相关文章

  • 鸿蒙NEXT开发声明式UI是咋回事?
    大家好,我是V哥,ArkTS是HarmonyOS优选的主力应用开发语言,它在TypeScript的基础上进行了扩展,提供了声明式UI描述、自定义组件和动态扩展UI元素的能力。这些能力与ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。ArkTS还提供了多维......
  • jsp电网运行信息检索系统813hp--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表员工,变电站,运行信息,维修信息开题报告内容一、项目背景与意义随着电力行业的快速发展,电网规模不断扩大,电网运行信息的管理与检索变得日益重要。传统的电网信......
  • jsp电脑配件销售网站的设计与实现qrl6o(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商品分类,商品品牌,商品信息开题报告内容一、课题名称电脑配件销售网站的设计与实现二、研究背景与意义随着互联网技术的快速发展,电子商务已成为现代商......
  • jsp电动车停放与充电系统113k1(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,充电桩,充电信息,完成订单开题报告内容一、选题背景与意义随着电动车的普及,其停放与充电问题日益凸显。传统的停放与充电方式存在诸多不便,如停车场地有限......
  • 中小型医院网站开发:Spring Boot入门
    2相关技术简介2.1Java技术Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任何地方都可以运行。除此之外,它还拥有简单的语法和实用的类......
  • 中电金信:用了这套方案,全国产化移动端开发一个字:快!
    ​随着越来越多的金融机构拥抱鸿蒙生态,开启全国产化系统开发,更多创新产品及解决方案也逐步落地。移动端作为连接用户与金融服务的桥梁,自然成为鸿蒙原生开发工作的关键。 中电金信推出的金融业鸿蒙原生开发方案,可实现全国产化移动端的快速开发,为金融机构提供低成本、高效率、优......
  • 基于javaweb(springboot)城市地名地址信息管理系统设计和实现
    基于javaweb(springboot)城市地名地址信息管理系统设计和实现......
  • 注册小程序开发账号
    https://mp.weixin.qq.com 点击右上角立即注册 ......
  • 【子项目:命令系统(Command System)】C++自制命令系统( 开发ing | 踩坑记录 )
    项目背景在某一项目中,遇到了需要自制命令系统的需求,而这个模块的复用性很高,因此单独拉出来做一个子项目更新日志[2024.10.15-10:00]增项目进度----[2024.10.1510:00]----首先实现最基础的输入输出功能,用std::getline读入行再分割成字符串数组-main.cpp#include......
  • Android开发滑动悬停效果
    Android开发滑动悬停效果Android开发滑动悬停效果,有点难度,但源码中我已经加入相应注释,你只要修改布局即可。很常见的需求一、思路:自定义悬停控件LetterStickyNavLayout,它是继承LinearLayout二、效果图:看视频更直观点:Android开发教程实战案例源码分享-滑动悬停效......