java web项目入门了解

一、项目流程

1. 使用servle

客户端服务端,客户端和服务端进行交互

  • 客户端的诉求传给服务端,服务端实现诉求,实现的效果在返回给客户端
  • 客户端使用jquery+ajax发起请求request,请求内容:
    • url:请求路径,明确使用那个servlet
    • type:请求方式,有getpost两种请求方式
    • data:参数域
  • 请求传到服务端,使用Tomcatweb容器,servlet操作:
    • 接受参数
    • 逻辑处理
    • 操作数据库
    • 逻辑处理
    • 数据返回response
  • 服务端数据返回response给客户端后,客户端反馈请求是否成功
    • success:请求成功回调函数
    • error:请求失败回调函数
      客户端和服务端流程

问题: servle处理高并发,效率不好;可以使用框架。

2. 使用框架

框架分为三层:

  • 表现层Controller,作用:接受url请求,返回响应结果
  • 业务逻辑层Service,作用:对数据进行逻辑处理,例如:爬虫,数据计算等
  • 持久层Dao,作用:负责与数据库进行操作
  • 这三层也会进行数据交互,使用实体层Entity进行交互
    框架

二、了解java web项目构造

1. 项目目录结构

  • WebContent放置前端内容
  • Java Resources·下的src`放置后端内容
  • 项目运行后,目录上会多一个servers文件夹,这是放置Tomcat的配置文件地方

2. 查看页面访问顺序

WebContent下的WEB-INF下的web.xml配置文件,可以查看页面访问先后顺序,有两种查看方式:

  • 方式一:Design
    方式一
  • 方式二:Source
    方式二

首页起名一般使用的是index,index是默认访问页面

3. 发起请求:jquery+ajax

  • 从官网下载jquery-3.7.1.min.js,在 WebContent 下新建一个 js 文件夹,将jquery文件放置文件夹 js 下
  • 在 WebContent 下新建一个 html 文件
  • ajax基础内容包括:
    • url:请求路径,对应@WebServlet(“/index”)中的路径
    • type:请求方式,get和post两种请求方式,分别对应doGet方法和doPost方法
    • data:参数域,可有可无
    • success:请求反馈 value:后端给前端反馈响应的信息
    • error:初学者可加,有助于判断是否有问题
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Insert title here</title>
      <script src="js/jquery.js"></script>
      <script>
      	$.ajax({
      		url:"index",
      		type:"get",
      		data:{
      			user:"admin",
      			password:"123456"
      		},
      		success:function(value){
      			console.log("请求成功")
      		},
      		error:function(){
      			console.log("出错啦")
      		}
      	})
      </script>
      </head>
      <body>
      hello
      </body>
      </html>
      
      结果:
      运行结果

扩展:Uncaught ReferenceError: $ is not defined ,说明jquery没有引进成功。

4. 接受参数

  • 在 Java Resources 下的 src ,创建包,在包中创建 servlet 的java文件
    名字是否需要一致
  • request:请求
    • getParameter()方法:获取参数
  • equals()方法:相等
  • response:返回,把响应返回到value
    • getWriter().write("")方法:返回内容
    • setContentType()方法:返回格式
  • setCharacterEncoding()方法:设置编码
    /**
     * Servlet implementation class IndexServlet
     */
    @WebServlet("/index")//这个名字与下面的名字可以不一致,不能重名
    public class IndexServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public IndexServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("get请求接受到了");
    		//接受参数
    		String acc = request.getParameter("user");
    		String bcc = request.getParameter("password");
    		
    		String res = "";
    		//判断用户名是否等于admin
    		if(acc.equals("admin")) {
    			System.out.println("登录成功");
    			res = "ok";
    		}else {
    			System.out.println("登录失败");
    			res = "no";
    		}
    		//设置编码
    		response.setCharacterEncoding("UTF-8");
    		//返回
    		response.getWriter().write(res);
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("post请求接受到了");
    	}
    }
    

5. JSON

  • 是javascript对象表示法
  • 是存储和交换文本信息的语法
  • json对象使用大括号{}书写
  • 对象中可包含多个键值对key/valuekey必须是字符串

JSON 数组

  • 数组值为:字符串、数字、对象、数组、布尔值、null,也可以是JavaScript的表达式,包括函数、日期、undefined
  • 语法:{属性1:属性值1, 属性2:属性值2},例如:{"name":"zhangsna", "site":null }

面对大量数据,使用json格式

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println("get请求接受到了");
	//接受参数
	String acc = request.getParameter("user");
	String bcc = request.getParameter("password");
	
	String res = "";
	//判断用户名是否等于admin
	if(acc.equals("admin")) {
		System.out.println("登录成功");
		res = "{\"name\":\"zhangsna\", \"site\":null }";
	}else {
		System.out.println("登录失败");
		res = "no";
	}
	//设置后端给前端返回的信息为json格式
	response.setContentType("text/json;charset=utf-8");
	//设置编码
	response.setCharacterEncoding("UTF-8");
	//返回
	response.getWriter().write(res);
}

注意: 设置response.setContentType("text/json;charset=utf-8");这句话,必须设置json格式,否则报错。

三、get和post请求区别

getpost
主要用途用于获取数据(查询操作)
适合请求不会改变服务器状态的资源
例如:搜索、分页、查看详情
用于提交数据(修改操作)
适合创建、更新、删除数据
例如:登录、注册、文件上传、下单
数据传输方式数据通过 URL的查询字符串(Query String) 传递,例如:/user?id=123&name=zhang
数据可见
受URL长度限制
数据通过 请求体(Request Body) 会暴露在URL中
数据不可见
没有严格长度限制,适合大数据
安全性不安全:数据在URL中明文传输
多次请求结果相同(无副作用)
相对安全:数据在请求体中,适合传输敏感信息
多次提交肯产生不同结果(如重复下单)
缓存适合静态资源请求(如图片、CSS)不适合缓存动态数据
后端接受方式(以Java Serevlet 为例)String id = request.getParameter("id"); // 从 URL 提取参数// 需要设置字符编码(防止中文乱码)request.setCharacterEncoding("UTF-8");String username = request.getParameter("username"); // 从请求体提取参数
使用场景获取数据:页面加载、搜索等
数据量小且不敏感
提交表单,如登录、注册
上传文件或大数据,如照片
修改服务器状态,如删除资源

扩展知识location.href=""跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值