将object类型的对象转为int
Integer.valueOf(sumNumb.toString())
在页面中画一条直线
创建不带 accordion 标记的简单的可折叠组件(collapsible)
<button type="button" class="btn btn-primary" data-toggle="collapse"
data-target="#demo">
简单的可折叠组件
</button>
<div id="demo" class="collapse in">
hello
</div>
Integer.valueOf(sumNumb.toString())
在页面中画一条直线
<div style="border:1px solid #CCC"></div>
创建不带 accordion 标记的简单的可折叠组件(collapsible)
<button type="button" class="btn btn-primary" data-toggle="collapse"
data-target="#demo">
简单的可折叠组件
</button>
<div id="demo" class="collapse in">
hello
</div>
由于输入型控件的默认宽度是父元素宽度的 100%,因此可以使用栅格系统中的列来包裹表单控件或其任何父元素,来间接的为控件设置宽度。如:
<div class="col-md-6">
<input type="text" name="queryString" id="queryString" value="${queryString}" class="form-control">
</div>
c:foreach输出序号,需要使用varStatus属性,如:
<p style="font-size: medium" data-toggle="collapse" data-target="#${status.count}">
<small>${status.count}</small> ${item.file}<span class="caret"></span>
</p>
IDEA选中要包围的代码块按下ctrl+alt+t可以设置捕获异常
<select>
下拉菜单,刷新后保持上一次的值。
<select class="form-control" name="powerStation">
<option value="*" <c:if test="${powerStation == '*'}">selected</c:if>>电厂不限</option>
<option value="秦一厂" <c:if test="${powerStation == '秦一厂'}">selected</c:if>>秦一厂</option>
<option value="秦二厂" <c:if test="${powerStation == '秦二厂'}">selected</c:if>>秦二厂</option>
<option value="秦三厂" <c:if test="${powerStation == '秦三厂'}">selected</c:if>>秦三厂</option>
<option value="方家山" <c:if test="${powerStation == '方家山'}">selected</c:if>>方家山</option>
</select>
配置IK分词器的useSmart="true"
,非smart模式所做的就是将能够分出来的词全部输出;smart模式下,IK分词器则会根据内在方法输出一个认为最合理的分词结果,这就涉及到了歧义判断
我们在用到下拉列表框select
时,需要对选中的<option>
选项触发事件,其实<option>
本身没有触发事件方法,我们只有在select
里的onchange
方法里触发
Visual C++ Redistributable for Visual Studio 2015下载地址
freemarker/thymeleaf/velocity
solrCloud多个collection联合查询,使用别名即可。
#先指定别名
http://localhost:8180/solr/admin/collections?action=CREATEALIAS&name=collection1U2&collections=collection1,collection2
然后在搜索前指定默认搜索xollection为指定的别名
cloudSolrServer.setDefaultCollection("collection1U2");
特点
简单快速,发送请求时,只需传送请求方法和路径
灵活,允许传说任意类型的数据对象,正在传输的类型有Conten-Type加以标记
无连接
- 无状态,对于事务处理没有记忆能力,意味着如果后续处理需要前面的信息,则它必须重传,这样导致每次连接传送的数据量增大,另一方面再服务器不需要先前信息时它的应答就较快
请求行
请求方法 URL 协议版本
请求头
键值对
空行
请求内容
请求方式
HTTP1.0 定义了三种请求方法 GET POST HEAD
HTTP1.1新增了五种 OPTIONS PUT DELETE TRACE CONNECT
HTTP协议之响应
响应行
HTTP版本、状态码、状态消息
响应头
消息报头 客户端使用的附加信息
空行
响应实体
正文 服务器返回给浏览器的信息
服务器的概念和作用:
问题:
目前编写的代码,只有一次性,也就是运行完毕后,如果需要再次运行则需要再次手动启动代码的执行。但是我们无法提前预知用户合适发送请求,也就无法决定我们编写的Java代码应该什么时候启动运行。而且手动运行也变得不显示。
解决;
使用代码编写一个容器(对象),该容器可以根据用户的请求来启动并运行我们编写的数据逻辑代码。
实现:
服务器
解释:
所谓服务器其实就是代码编写的一个可以根据用户请求实时的调用执行对应的逻辑代码的一个容器。从用户角度看就是一个应用程序而已。我们将自己编写的逻辑代码放入服务器程序中的指定位置后,当浏览器发送请求给服务器时,服务器就会调用并执行对应的逻辑代码进行请求处理。
问题:
服务器再接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求处理。但是逻辑代码是由程序员编写并放到服务器中,那么服务器时怎么知道该怎么调用并调用哪个类和哪个方法进行请求处理
解决;
按照指定规则编写代码,请求时按照指定规则请求
使用:
<!--配置servlet-->
<servlet>
<servlet-name>my</servlet-name>
<servlet-class>com.bjsxt.servlet.MyServlet</servlet-class>
</servlet>
<!--配置访问方式-->
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/my</url-pattern>
</servlet-mapping>
servlet request respons对象
请求转发
问题:
服务器在接收到浏览器的请求后,仅仅使用一个servlet进行处理,会造成不同的servlet逻辑代码冗余,servlet的职责不明确。
解决:使用请求转发
特点:依次请求 地址栏信息不改变
req.getRequestDispatcher(“page”).forward(req,resp);
重定向
问题:
如果当前的请求,servlet无法进行处理。淘宝付款时需要跳转支付宝
如果使用请求转发,造成表单重复提交怎么办
response.sendRedirect(“路径”)
request session servletContex cookie
问题:
servlet的作用是针对浏览器发起的请求,进行请求的处理。通过servlet技术我们可以灵活的进行请求的处理,但是我们不但要对请求进行处理,我们还需要对服务器的资源进行统一的管理,比如情趣编码格式的统一设置,资源的统一分配等等,这个时候该怎么办呢?
解决:
在servlet技术中我们学习了request、session、application作用域对象,其主要作用是实现数据的在不同场景中的灵活流转。但是数据的具体流转过程我们是看不到的,不如作用域对象是什么时候创建和销毁的,数据是什么时候存取、改变和删除的。因为具体的流转国臣更看不到,所以也就无法在指定的时机对数据和对象进行操作,比如session销毁的时候,在线人数-1.
M 模型层
service + dao + entity jdbc|Mybatis
V 视图层
webapp页面 html/jsp
C 控制器层
action servlet|struts2
存在问题
定义:软件开发过程中的半成品,用来解决软件开发过程中的通用问题,用于提高开发效率。
半成品:就是人家开发了一半,使用时必须在基于这个框架做二次开发
开源组织apache提供,典型的MVC框架,提供了一个新的控制器Action,替换原有项目中servlet控制器,解决原有项目中使用servlet作为控制器存在的问题。
1. 创建普通的java类并继承HttpServlet,并覆写service方法
public void service(request, response){
//1.收集数据
//2.调用业务对象
//3.流程跳转
}
2. 在webRoot下的WEB-INF文件夹下的web.xml文件中配置servlet
<!--配置servlet-->
<servlet>
<servlet-name>my</servlet-name>
<servlet-class>com.bjsxt.servlet.MyServlet</servlet-class>
</servlet>
<!--配置访问方式-->
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/my</url-pattern>
</servlet-mapping>
3. 访问
http://localhost:端口/项目名/my
0.引入struts2依赖和struts.xml配置文件,并在web.xml中预先配置web.xml,拦截所有请求交给struts管理
<!--配置servlet-->
<filter>
<filter-name>my</filter-name>
<filter-class>com.bjsxt.servlet.MyServlet</filter-class>
</filter>
<!--配置访问方式-->
<filter-mapping>
<filter-name>my</filter-name>
<url-pattern>/my</url-pattern>
</filter-mapping>
1. 创建类实现Action,覆写execute()方法
public String execute(){
//1.收集数据
//2.调用业务对象
//3.流程跳转
return "ok|error";逻辑名 跳转流程
}
2. 配置struts.xml
<package name="day1" extends="struts-default">
<action name="aa" class="***.TestAction">
<result name="ok">/index.jsp</result>
<result name="ok">/error.jsp</result>
</action>
</package>
3. 访问路径
http://localhost:端口/项目名/aa
struts2中获取request对象
HttpServletRequest request = servletActionContex.getRequest();
HttpServletResponse response = servletActionContex.getRequest();
ServletContext sc = ServletActionContext.getServletContext();
0.引入struts2依赖和struts.xml配置文件,并在web.xml中预先配置web.xml,拦截所有请求交给springMVC管理
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--指定springmvc配置文件位置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
1. 创建类实现Action,覆写execute()方法
public String execute(){
//1.收集数据
//2.调用业务对象
//3.流程跳转
return "ok|error";逻辑名 跳转流程
}
2. 配置springmvc.xml
3. 访问路径
http://localhost:端口/项目名/aa