1、jstl的使用

	//c:choose只当做c:when和c:choose的父标签
<c:choose>
//c:choose的子标签,c:when只用来判断条件是否成立
<c:when test="${chanConf.remark!=null && fn:length(chanConf.remark)>'15'}">
<td title="${chanConf.remark}">${fn:substring(chanConf.remark,0,15)}...</td>
</c:when>
//c:choose的字标签,在c:when后边使用,当when判断为false的时候,执行
<c:otherwise>
<td>${chanConf.remark}</td>
</c:otherwise>
</c:choose>

2、转发和重定向

  • 转发
    1.地址栏不发生变化,显示的是上一个页面的地址
    2.请求次数:只有1次请求
    request.getRequestDispatcher(“/地址”).forward(request, response);

3、shiro

Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。
shiro:haspermission是从外部引入的一个标签,执行标签时,标签会根据name属性来判断当前用户是否拥有指定的权限
如果有,就执行shiro标签内的代码,如果没有,就跳过不执行。

4、spring是什么?

容器框架,用来转JavaBean,中间层框架(万能胶),起到连接作用。
Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架

5、对AOP的理解

系统有许多组件构成,每个组件负责一个特定的功能,同时这些组件还会承担着额外的职责,比如日志,事务管理。为分散的对象引入公共的行为,面向对象(OOP)不适合。【从上到下,不适合从左到右】OOP大量代码重复,不利于各个模块的复用

AOP:将程序中的交叉业务逻辑,(安全、日志、事务),封装成一个切面,注入到目标对象。还可以对某个对象或对象功能进行增强。在执行方法之前额外做一些事情,执行方法之后额外做一些。

6、标签通常和标签一起使用

主要作用就是增强用户可用性,用户点击标签中的文本时,浏览器自动聚焦到和该标签关联的控件。

文本内容
关联控件的id一般指的是input元素的id;

springmvc中的文件上传

enctype就是encodetype就是编码类型的意思。

multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。

需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。

application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传。

7、springmvc中的form表单

7.1 form标签

使用Spring的form标签主要有两个作用,第一是它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象,默认是command属性,
这样我们就可以在form表单体里面方便的使用该对象的属性了;第二是它支持我们在提交表单的时候使用除GET和POST之外的其他方法进行提交,包括DELETE和PUT等。

1.1.1 支持绑定表单对象
我们先来看如下使用form标签的一个示例:

<form:form action="formTag/form.do" method="post">
<table>
<tr>
<td>Name:</td><td><form:input path="name"/></td>
</tr>
<tr>
<td>Age:</td><td><form:input path="age"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form:form>

这个时候如果Model中存在一个属性名称为command的javaBean,而且该javaBean拥有属性name和age的时候,在渲染上面的代码时就会取command的对应属性值赋给对应标签的值。如在上面的代码中,假设Model中存在一个属性名称为command的javaBean,且它的name和age属性分别为“Zhangsan”和“36”时,那么它在渲染时就会生成如下一段代码:

<form id="command" action="formTag/form.do" method="post">
<table>
<tr>
<td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
</tr>
<tr>
<td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form>
<form id="command" action="formTag/form.do" method="post">
<table>
<tr>
<td>Name:</td><td><input id="name" name="name" type="text" value="ZhangSan"/></td>
</tr>
<tr>
<td>Age:</td><td><input id="age" name="age" type="text" value="36"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form>

从上面生成的代码中,我们可以看出,当没有指定form标签的id时它会自动获取该form标签绑定的Model中对应属性名称作为id,而对于input标签在没有指定id的情况下它会自动获取path指定的属性作为id和name。我们指定form默认自动绑定的是Model的command属性值,那么当我的form对象对应的属性名称不是command的时候,应该怎么办呢?对于这种情况,Spring给我们提供了一个commandName属性,我们可以通过该属性来指定我们将使用Model中的哪个属性作为form需要绑定的command对象。除了commandName属性外,指定modelAttribute属性也可以达到相同的效果。这里假设上面代码中我们存放在Model中的是user对象而不是默认的command对象,那么我们的代码就可以如下定义了


<form:form action="formTag/form.do" method="post" commandName="user">
<table>
<tr>
<td>Name:</td><td><form:input path="name"/></td>
</tr>
<tr>
<td>Age:</td><td><form:input path="age"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form:form>

8 input标签

SpringMVC的input标签会被渲染为一个type为text的普通Html input标签。使用SpringMVC的input标签的唯一作用就是它能绑定表单数据。SpringMVC表单标签最大的好处就是它支持数据绑定,当我们的表单标签不需要绑定的数据的时候,我们应该使用普通的Html标签。关于input标签绑定表单数据的方法已经在介绍form标签的时候顺带介绍过了,这里就不再过多的赘述了。

<form:form action="formTag/form.do" method="head" modelAttribute="user" methodParam="requestMethod">
<table>
<tr>
<td>Name:</td><td><form:input path="name"/></td>
</tr>
<tr>
<td>Age:</td><td><form:input path="age"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form:form>

2、什么是${CTX}

C

T

X

{CTX} 与

CTX与{pageContext.request.contextPath}的对比

1、${pageContext.request.contextPath}是获取当前根目录。

2、${ctx}通过观察可以知道也是获取当前根目录的意思

不同之处:
${ctx}是

p

a

g

e

C

o

n

t

e

x

t

.

r

e

q

u

e

s

t

.

c

o

n

t

e

x

t

P

a

t

h

i

n

d

e

x

.

j

s

p

<

c

:

s

e

t

v

a

r

=

"

c

t

x

"

v

a

l

u

e

=

"

{pageContext.request.contextPath}的简写版。 同时发现在项目的index.jsp文件内有这样一段话的配置,<c:set var="ctx" value="

pageContext.request.contextPath的简写版。同时发现在项目的index.jsp文件内有这样一段话的配置,<c:setvar="ctx"value="{pageContext.request.contextPath}“/>。
在此值得注意的是,在使用

c

t

x

<

c

:

s

e

t

v

a

r

=

"

c

t

x

"

v

a

l

u

e

=

"

{ctx}的时候一定不要忘记把带有该配置的<c:set var="ctx" value="

ctx的时候一定不要忘记把带有该配置的<c:setvar="ctx"value="{pageContext.request.contextPath}”/>的文件引入到当前页面来。

${pageContext.request.contextPath}等价于<%=request.getContextPath()%> 或者可以说是<%=request.getContextPath()%>的EL版 意思就是取出部署的应用程序名或者是当前的项目名称。
比如我的项目名称是ajax01 在浏览器中输入为http://localhost:8080/ajax01/login.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>
取出来的就是/ajax01,而"/"代表的含义就是http://localhost:8080

所以我们项目中应该这样写
${pageContext.request.contextPath}/login.jsp

3、
一、SpringMVC 表单元素标签 如下:
<form:textarea path=“remarks” htmlEscape=“false” class=“input-xlarge”/>
其中的属性 htmlEscape的作用是? 大致的意思是起转义作用。

二、测试如下
1、htmlEscape=“false” , 输入内容 “<” ;结果如下图
<

2、htmlEscape=“true” , 输入内容 “<” ;结果如下图

<

3、去掉 htmlEscape 属性 , 输入内容 “<” ;结果如下图
      
<

三、 总结
1、htmlEscape 属性作用理解为:是否转义字符, 默认为 true ,若要设置不对特殊字符进行转移,需设置为 false 。
2、转义字符为: < > " & ( 转义字符是 XML中5个预定义的实体引用)

实际上也没有多大的作用啦 自己太好奇而已

4、

定义和用法
required 属性规定必需在提交之前填写输入字段。

如果使用该属性,则字段是必填(或必选)的。

注释:required 属性适用于以下 类型:text, search, url, telephone, email, password, date pickers, number, checkbox, radio 以及 file。

HTML 4.01 与 HTML 5 之间的差异
required 属性是 HTML5 中的新属性。

语法:

5、常用的正则表达式

1、
匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。

2、
[A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。

3、
正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢?

我们先来看下面一个例子:

let name = ‘ye wen jun’;
let ans = name.replace(/\s/g, ‘’); // ‘yewenjun’
let ans2 = name.replace(/\s+/g, ‘’); // ‘yewenjun’
从上面那个例子我们看到结果没有区别,那我们在换个例子看看

let name = ‘ye wen jun’;
let ans = name.replace(/\s/g, ‘#’); // “ye###wen####jun”
let ans2 = name.replace(/\s+/g, ‘#’); // “ye#wen#jun”
现在可以很清楚的可以看到,+的意思就是从遇到第一个匹配的字符起,继续匹配,直到匹配失败,把这段匹配到的字符替换为#,

而不带+的是把匹配到的字符一个一个替换为#

this.value=this.value.replace(/\s+/g,‘’)
当输入值的键盘抬起时触发这个事件。this.value表示此输入框的值,/\s/g为正则表达式,目的均是找出目标字符串中的所有空白字符

6、js中var a=new Object()和var a={}有什么区别吗?

应该是没有区别的,两者都是生成一个默认的Object对象。js和其它语言一样,一切对象的基类都是Object,所以,new Object()和简易的{}是同样的空对象,就是默认的对象。
本来我以为{}应该是一个没有任何属性和方法的对象,但事实证明,var a = {},a.toString()等Object对象所具有的方法,a都具有。
由此也可以判断,其实a = {}就是a = new Objcet()的简单实现。就像在java语言中,String str = ""和String str = new String()都是创建String的对象一样。

jstl的使用 转发和重定向(做项目遇到的一些问题总结)的更多相关文章

  1. Java项目案例之---加法计算器(转发和重定向)

    加法计算器(转发和重定向) 运行显示: 转发 重定向 代码: index.jsp <%-- Created by IntelliJ IDEA. User: Administrator Date: ...

  2. JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

    1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...

  3. 关于request、response转发与重定向的简述

    在做页面的请求与响应的时候我们多用request与response进行操作,而我们大家也知道,request是表示用户发向服务器的请求,而response是对用户请求的一个响应. 关于转发和重定向,通 ...

  4. Servlet(四):转发与重定向、路径问题

    在上次的小案例中用到了转发的技术,今天来仔细聊聊转发和重定向的问题,以及一些小知识的汇总. 一.转发 1.转发的概念 转发主要是将浏览器的请求交给另外一个servlet或jsp来处理,借助reques ...

  5. Django之转发和重定向

    https://blog.csdn.net/gscsd_t/article/details/79389167 转发和重定向: 转发:一次请求和响应,请求的地址没有发生变化,如果此时刷新页面,就会出现重 ...

  6. servlet转发与重定向区别

    servlet转发与重定向   HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParam ...

  7. servlet转发与重定向

    HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParameter()获取请求参数 get ...

  8. SpringMVC中使用forward和redirect进行转发和重定向以及重定向时如何传参详解

    转自:http://blog.51cto.com/983836259/1877188 2016-11-28 09:45:59   如题所示,在SpringMVC中可以使用forward和redirec ...

  9. Java中转发与重定向的区别

        转发与重定向的区别 转发是服务器行为,重定向是客户端行为 1.转发在服务器端完成的:重定向是在客户端完成的2.转发的速度快:重定向速度慢3.转发的是同一次请求:重定向是两次不同请求4.转发不会 ...

随机推荐

  1. JVM内存模型和结构详解(五大模型图解)

    JVM内存模型和Java内存模型都是面试的热点问题,名字看感觉都差不多,实际上他们之间差别还是挺大的. 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关@mi ...

  2. Java中list集合自定义排序-2022新项目

    一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...

  3. 从 React 原理来看 ahooks 是怎么解决 React 的闭包问题的?

    本文是深入浅出 ahooks 源码系列文章的第三篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本文来探索一下 ahooks 是怎么解决 React 的闭包问题的 ...

  4. day25--Java集合08

    Java集合08 15.HashTable 15.1HashTable的基本介绍 存放的元素是键值对:即K-V HashTable的键和值都不能为null HashTable的使用方法基本上和Hash ...

  5. 对DDD使用的一些建议

    群里经常看到类似于"看了DDD之后就不会写代码了"的情况,趁最近学车的间隙,写写我的看法. 关于这个事儿,我是觉得:当没有DDD的时候,如果你知道怎么做,那就那么做好了,不要考虑D ...

  6. java数组---多维数组

    多维数组 多维数组可以看成是数组的数组 比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组. 二维数组 public static void main(String[] args) { ...

  7. OpenDrop 这样的应用程序以及与当今流行的替代品的比较

    由安全移动网络实验室 OpenDrop 创建的用 Python 编写的开放 Apple AirDrop 实现是一个命令行工具,允许直接通过 Wi-Fi 在设备之间共享文件.它的独特之处在于它与 App ...

  8. KingbaseES 中可以通过构造一个聚集函数来实现mysql的any_value功能。

    示例 创建函数 create function coalesce_("anyelement","anyelement") returns "anyel ...

  9. KingbaseES R6 通过脚本构建集群案例

      案例说明: KingbaseES V8R6部署一般可采用图形化方式快速部署,但在生产一线,有的服务器系统未启用图形化环境,所以对于KingbaseES V8R6的集群需采用手工字符界面方式部署,本 ...

  10. LIKE与等式查询比较

    我们知道 char 是定长类型的数据,如果数据长度小于定义的长度,会在字符串尾部加上空格.而对于空格的处理,对于等式匹配,或length等,会忽略空格.而对于like 或模式匹配,空格不能忽略. 一. ...