JSP_MVC_AJAX

1. ServletContext对象

ServletContext对象(接口—代表整个web application : 全局对象)
web应用程序启动的时候就会创建ServletContext对象
四个作用
(1) 获取上下文路径

public String getContextPath()

(2) 获取web.xml中的全局参数

<!--全局参数-->
    <context-param>
        <! --参数名称-->
        <param-name>encoding</param-name>
        <!--参数值-->
        <param-value>utf-8</ param-value>                 
    </context-param>

//获取全局对象
    ServletContext servletContext = this.getServletContext();
// String getInitParameter(String var1); 通过初始化全局参数名称获取参数值
// Enumeration<String> getInitParameterNames();:全局对象获取所有初始化的参数名称
String encoding = servletContext.getInitParameter("encoding");

(3) 可以去作为请求转发

//1)先获取全局对象
	ServletContext servletContext = this.getServletContext();
//2)获取分发器对象
	public RequestDispatcher getRequestDispatcher(String path);
//path参数:要转发的路径  不需要携带上下文路径  (属于服务器行为)
	RequestDispatcher rd = servletContext.getRequestDispatcher("/adv.html");
//RequestDispatcher 请求转发器对象中 ----
//public void forward(ServletRequest request, ServletResponse response)
	rd.forward(request,response);

(4)可以作为域对象

就是在不同servlet之间进行数据传输


请求转发特点:
1)地址栏没有变化,永远是后端地址
2)请求转发可以访问WEB-INF资源文件
3)实际业务中,如果后端需要跳转到前端页面 jsp页面—jsp页面想要获取后端的数据,此时必须使用请求转发

2. JSP

Java Servlet Page: Java服务器页面 可以响应客户端发送的请求

它可以被可以翻译成.java文件—(web容器进行翻译)
.java—(jvm编译为.class文件)

<% %> : jsp脚本
<%= %> : jsp输出表达式

2.1 JSP的三大指令

1. page指令

page指令常见属性
    contextType="text/html;charset=UTF-8"  当前页码编码类型
    language="java"  支持的语言
    buffer="8kb"  jsp使用流的方式将内容写入浏览器,默认缓冲区大小为8kb
    errorPage="指定错误页面"  出现异常后,自定跳转到错误页面
    isErrorPage="false"  指定当前页面是否为错误页面
    isELIgnored="true"  是否启用EL表达式  默认为true 启用${}
    autoFlush="true"  是否自定刷新  默认true
    import="java包名"  导入Java包

2. include指令

<%@include file="指定页面"%>
    静态包含:jsp页面使用的时候,将一些公共页面导入到指定页面
    file属性:导入指定的页面路径

3. taglib

引入核心库
prefix="前缀名称"
uri:c标签的网络地址
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

2.2 JSP的九大内置对象

PageContext: pageContext 在某个jsp页面中有效
HttpServletRequest: request 请求对象:在一次请求中有效
HttpSession: session 在一次会话中有效
ServletContext: application 全局对象,在整个web application有效

HttpServletResponse: 响应对象 给浏览器响应数据
ServletConfig : servlet配置对象
JspWrite: Jsp的输出流 可以给浏览器中写入内容
Object page : 代表jsp对象
Throwable t : jsp的异常对象

2.3 JSP的EL表达式

EL(是Expression Language的缩写),使用EL对JSP输出进行优化,可以使得页面结构更加清晰,代码可读性高,也更加便于维护。
使用EL表达式的目的:从作用域中获取指定属性名的共享数据

 <%@ page isELIgnored="true"%>  表示是否禁用EL语言, TRUE 表示禁止.。FALSE 表示不禁。

EL表达式的语法 : ${EL表达式}
内置对象
pageScope PageContext域
requestScope HttpServletRequest域
sessionScope HttpSession域
applicationScope ServletContext域

2.4 JSP核心标签库以及常用标签

<c:if test="${}"> --->相当于java中if语句,如果成立,执行语句体
</c:if>

<c:choose> 类似 Java语言 选择结构语句
	<c:when test="<boolean>">
		...
	</c:when>
	<c:when test="<boolean>">
		...
	</c:when>
		...
		...
	<c:otherwise>
		...
	</c:otherwise>
</c:choose>

<c:forEach items="获取的数据">
</c:forEach>
	items属性:从后端集合数据 ${域对象中存储属性名称}
	var属性:循环中的变量名
	varstatus: 内置的循环中变量名的状态属性
	属性值.index :获取到的角标 (从0开始)
	属性值.count :获取到的序号(从1开始)

<%--el表达式 有关键字 empty
${empty 域对象属性名称}
--%>

<c:if test="${not empty list}">
<h3>list集合不为空</h3>
</c:if>--%>

3. 域对象

  1. page域 PageContext 在某个jsp页面有效

  2. request域 HttpServletRequest 在一次请求中有效

  3. session域 HttpSession 在一次会话中有效

  4. application域 ServletContext 全局对象在整个web application有效

//通用方法
public void setAttribute("属性名称", 实际内容Object obj);  //给域对象中存储属性以及对应的内容

public Object getAttribute("属性名称"); //通过域对象中保存的属性名称获取内容

public void removeAttribute("属性名称"); //移除域对象中的数据

4. 重定向以及重定向和请求转发的区别

1)浏览器发送请求到服务器端,服务器端接收---解析某个Servlet
    设置响应头“location",以及location对应的内容“/上下文路径/web目录资源文件"
    response.setHeader("location", "上下文路径")
    设置响应状态码 302---"进一步请求"
    response.setStatus(302);
2)将location头以及302状态码---响应给浏览器,浏览器接收到之后,看到302状态码----
	"再一次请求",请求地址就是location对应的内容
3)最终完成页面跳转


简写格式HttpResponse对象--->void sendRedirect(String var1) throws IOException;重定向
response.sendRedirect(request.getContextPath()+" /adv.jsp");

请求转发和重定向的区别

  1. 地址栏是否有变化
    请求转发地址栏不变化
    重定向地址栏会变化

  2. 整个过程中request对象是否一致
    请求转发整个过程一致,所以使用request域存储数据,请求转发都某个jsp页面可以从request域中取出数据${域中的属性名称}
    整个过程两次request对象不一致,使用request域存储数据,重定向到页面在request域中获取不到,仅仅是完成页面跳转

  3. 是否能够访问WEB-INF下的资源文件
    请求转发可以访问WEB-INF下的文件(只能请求转发访问)重定向访问不到

5. MVC三层架构思想

M:model 业务模型
最基本的业务模型: 实体类 com.x.pojo
com.x.service—>业务代码,完成业务逻辑
com.x.dao—>持久层代码,完成对数据库的crud
V:view 视图层
目前技术就是使用jsp的jstl标签库展示数据
C:controller 控制器
前端请求后端的连接器(中间层)

6. Boot Strap前端框架

常用样式组件
生产环境—官网下载boostrap.css/bootstrap.js/字体等等
在某个html/jsp使用boostrap—需要先导入jQuery

全局CSS样式
    栅格系统   网页布局
    表单
        class="form-group" 将label元素和input/select标签 放在表单控件中
        水平排列表单 <form class="horizontal">
    按钮
        class="btn btn-default" 默认预定义样式按钮
        class="btn btn-primary"   首选项
        class="btn btn-danger"    危险信息类的按钮
        class="btn btn-success"   成功标识
        class="btn btn-info"   一般信息样式
        class="btn btn-warning"    警告类的 
    表格
        响应式表格  div class="table-responsive"
            基本表格样式 class="table"
            条纹状表格样式  .table-striped
            带边框   .table-border
            鼠标悬停响应   .table-hover
            紧缩表格   .table-condensed
    图片
        响应式图片  class="img-responsive"
        class="img-rounded"   圆角
        class="img-circle"     圆形
        class="img-thumbnail"   相框样式
组件
    按钮式下拉菜单
        <div class="btn-group">
            
    分页组件
        <div>
            <nav>
        <div/>
    导航条组件

7. Maven

maven项目---- 简称 “POM” Project Object Model
针对 项目–清除clean 编译compile deploy 部署, package 打包(打成war包)
install 安装项目到本地仓库上
目前主要作用:
管理jar包的版本号, jar包坐标地址

8. Ajax

原生ajax四个操作步骤
1) 创建浏览器代理对象
	var xhttp;
	if (windows.XMLHttpRequest) {
		xhttp = new XMLHttpRequest();
	} else {
		//code for IE6, IE5
		xhttp = new ActiveXObject("Microsoft.XMLHttp")
	}
2)建立连接
	open(method, url, async)
	参数1:请求方式
	参数2:请求的后端地址 get提交可以在url后加?key=value
	参数3:是否是异步   默认值为true(异步)
	xhttp("GET", "url", true)

	post提交必须设置请求头
	xhttp.setRequestHeader("Content-type " ,"application/x-wwW-form-urlencoded");
3)发送
	send()  用于GET
	send(String) 用于POST
4)服务器响应数据
	每当readyState 发生变化时就会调用onreadystatechange函数。
	readyState 为4 , status 为200时,响应就绪:
	// onreadystatechange :服务器响应到前端的回调函数
	xhttp. onreadystatechange = function() {
	//只要判断响应状态readyState以及服务器响应的状态码200响应完成
	if(this.readyState==4 && this.statusF=200){
			//responseText:服务器响应过来的字符串文本格式
			var content = this.responseText ;
			//服务器响应过来的字符串数据弹框
			alert(content) ;
		}
	}




jQuery的ajax方法
$.ajax(){
	url::一个用来包含发送请求的URL字符串。
	settings:ajax请求设置。所有选项都是可选的。
	//url: "/day49_ajax_war/ajaxServlet?username=赵又廷" , //访问后端接口地址
    url: "/day49_ajax_war/ajaxServlet" ,
  	//type:"get", //请求的方式 默认是get  可以url地址后面携带请求参数
    type:"post",
    data:  {username:"xxx},  //  json格式{"key":value}  ,  //给服务器发送的数据  post提交  发送的数据
    success:function(responseData){ //响应成功的回调函数  responseData服务器给响应的过来数据
        alert(responseData) ; //
    },
    error:function (responseData) {//响应失败的回调函数
        //完成响应失败的逻辑
    },
    dataType: "text" //服务器响应过来的数据格式  json/html/text文本/xml...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现三级联动的基本思路是通过Ajax技术实现异步请求后端数据,然后动态生成页面元素实现级联效果。下面是一个Spring MVC+JSP实现三级联动的示例代码: 1. 前端JSP页面 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>三级联动示例</title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ // 加载省份列表 $.ajax({ url: "${pageContext.request.contextPath}/province", type: "GET", success: function(data){ var provinceList = JSON.parse(data); var html = ""; for(var i=0; i<provinceList.length; i++){ html += "<option value='"+provinceList[i].id+"'>"+provinceList[i].name+"</option>"; } $("#province").html(html); } }); // 根据省份id加载城市列表 $("#province").change(function(){ var provinceId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/city/"+provinceId, type: "GET", success: function(data){ var cityList = JSON.parse(data); var html = ""; for(var i=0; i<cityList.length; i++){ html += "<option value='"+cityList[i].id+"'>"+cityList[i].name+"</option>"; } $("#city").html(html); } }); }); // 根据城市id加载区县列表 $("#city").change(function(){ var cityId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/district/"+cityId, type: "GET", success: function(data){ var districtList = JSON.parse(data); var html = ""; for(var i=0; i<districtList.length; i++){ html += "<option value='"+districtList[i].id+"'>"+districtList[i].name+"</option>"; } $("#district").html(html); } }); }); }); </script> </head> <body> <select id="province"> <option value="">请选择省份</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="district"> <option value="">请选择区县</option> </select> </body> </html> ``` 2. 后端Controller代码 ```java @Controller public class RegionController { @Autowired private RegionService regionService; @RequestMapping(value="/province", method=RequestMethod.GET) @ResponseBody public String getProvinceList(){ List<Province> provinceList = regionService.getProvinceList(); return JSON.toJSONString(provinceList); } @RequestMapping(value="/city/{provinceId}", method=RequestMethod.GET) @ResponseBody public String getCityList(@PathVariable("provinceId") String provinceId){ List<City> cityList = regionService.getCityList(provinceId); return JSON.toJSONString(cityList); } @RequestMapping(value="/district/{cityId}", method=RequestMethod.GET) @ResponseBody public String getDistrictList(@PathVariable("cityId") String cityId){ List<District> districtList = regionService.getDistrictList(cityId); return JSON.toJSONString(districtList); } } ``` 3. Service层代码 ```java @Service public class RegionServiceImpl implements RegionService { @Autowired private RegionDao regionDao; @Override public List<Province> getProvinceList() { return regionDao.getProvinceList(); } @Override public List<City> getCityList(String provinceId) { return regionDao.getCityList(provinceId); } @Override public List<District> getDistrictList(String cityId) { return regionDao.getDistrictList(cityId); } } ``` 4. DAO层代码 ```java @Repository public class RegionDaoImpl implements RegionDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public List<Province> getProvinceList() { String sql = "select province_id, province_name from tb_province"; List<Province> provinceList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Province>(Province.class)); return provinceList; } @Override public List<City> getCityList(String provinceId) { String sql = "select city_id, city_name from tb_city where province_id=?"; List<City> cityList = jdbcTemplate.query(sql, new Object[]{provinceId}, new BeanPropertyRowMapper<City>(City.class)); return cityList; } @Override public List<District> getDistrictList(String cityId) { String sql = "select district_id, district_name from tb_district where city_id=?"; List<District> districtList = jdbcTemplate.query(sql, new Object[]{cityId}, new BeanPropertyRowMapper<District>(District.class)); return districtList; } } ``` 其中Province、City和District是数据实体类,包含id和name两个属性。以上代码只是一个简单示例,实际项目中需要根据具体需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值