1. jsp内置对象简介

1、JSP内置对象是Web容器创建的一组对象,【不使用new关键字】就可以使用的内置对象。
2、九大内置对象:
out,request,response,session,application(五大常用对象)
Page,pageContext,exception.config(四个不太常用对象)

2. out对象

缓冲区Buffer:就是内存的一块区域涌来保存临时数据。

out是JspWriter 的实例,是向客户端输出内容的常用对象.
常用方法:

  1. void println() 向客户端打印字符串.
  2. void clear() 清除缓冲区,在flush之后调用会抛出异常.
  3. void clearBuffer() 清除缓冲区,在flush之后调用不会抛出异常.
  4. void flush() 将缓冲区内容输出到客户端.
  5. int getBufferSize()
  6. int getRemaining()
  7. boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
  8. void close() 关闭输出流

3. Get和Post提交方式的区别

表单有两种提交方式:get与post。定义在<form action="dologin.jsp" name="loginForm" method="提交方式***"></form> 动作/名称等顺序无所谓。
1.get:以【明文】方式,通过URL提交数据,数据在URL中【可以看到】。提交数据最多不超过【2KB】。安全性较低,但效率比post方式高。适合提交数据量不大,且安全要求不高的数据:比如:搜索、查询等功能。
2.post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。如:注册、修改、上传等功能。

4. request对象

客户端的请求信息被封装在request对象中,它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:

Read more »

1. JavaBean简介

javaBeans就是符合某种特定的规范的java类。使用JavaBeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的可维护性。

JavaBean的设计原则:

  1. 公有类
  2. 属性私有
  3. 无参的公有构造方法
  4. getter和setter方法

2. JSP动作元素

2.1 什么是JSP动作元素

JSP动作元素(action element),动作元素为请求处理阶段提供信息。动作元素遵循XML语法,有一个包含元素名的开始标签,可以有属性,可选的内容、与开始标签匹配的结束标签。

2.2 JSP动作元素的五大类

第一类是与存取JavaBean有关的,包括:
<jsp:useBean> <jsp:setProperty> <jsp:getProperty>

第二类是JSP1.2就开始有的基本元素,包括6个动作元素:
<jsp:include> <jsp:forward> <jsp:param> <jsp:plugin> <jsp:params> <jsp:fallback>

Read more »

1. JSP简介

JSP页面元素构成:

  1. 静态内容
  2. 注释
  3. 声明
  4. 小脚本
  5. 表达式
  6. 指令

1.1 jsp指令

page指令:通常位于jsp页面的顶端,同一个页面可以有多个page指令。
include指令:将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句。
taglib指令:使用标签库定义心得自定义标签。在jsp页面中启用定制行为

page指令语法:

1
<%@page 属性1="value" 属性2="value1, value2" ... %>
属性 描述 默认值
language 指定jsp页面使用的脚本语言 java
import 通过该属性来引用脚本语言中使用到的类文件
contentType 用来指定jsp页面所采用的编码方式 text/html,ISO-8859-1

1.2 JSP注释

  1. html注释 <!--html注释-->
  2. jsp注释<%--注释--%>
  3. jsp脚本注释 // /**/
Read more »

之前一直用C#比较多,最近开始研究Java,两者之间的库设计差别很大,故再次做个总结。

1. 日期

1.日期格式化

1
2
3
4
5
import java.text.SimpleDateFormat;
import java.util.Date;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
String s = sdf.format(new Date());
  1. 字符串转化为日期
1
2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date d = sdf.parse("2015年04月13日");

2. 泛型

1.新建泛型

可以再new后面直接使用<>来初始化,不需要指定类型,如下所示:

1
ArrayList<Crime> crimes = new ArrayList<>();

1. Tomcat配置

1.1 创建环境变量

创建环境变量CATALINA_HOME,值为Tomcat所在根目录(比如,windows下可能为为C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0).

1.2 启动Tomcat

CATALINA_HOME的bin目录下有startup脚本。

1.3 测试

地址:http://localhost:8080

2. Tomcat目录结构

tomcat

3. 手工编写第一个Java Web应用程序

Read more »

1. 初始化

1
2
3
from flask import Flask

app = Flask(__name__)

__name__的作用是用来给Flask来判断应用的根路径的。

2. 路由和视图函数

1
2
3
@app.route('/')
def hello_world():
return 'Hello World!'

如果要给路由添加参数,可以这样:

1
2


其中<name>就是参数,如果你想给参数加上类型,可以使用/user/<int:id>,Flask支持在路由中使用int, floatpath等类型。path是字符串,但是并不把/当作分隔符,而是把它看作动态组成的一部分。

3. 启动服务器

Flask包含了一个小型的开发服务器,启动它:

Read more »

1. SQL Sever驱动

1.1 安装

mssql数据库 使用django-mssql,依赖pywin32,如果安装时发生错误,请用下面这种方法:

pip install django-mssql --pre 

1.2 配置

在settings.py中,设置:

# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'sqlserver_ado',
        'NAME': 'data_center',
        'USER': 'sa',
        'PASSWORD': 'test',
        'HOST': 'localhost',
    }
}

2. 根据现有数据库生产models

python manage.py inspectdb > models.py
Read more »

Nancy框架

一、创建第一个Nancy应用

  1. 安装Nancy项目模板
  2. 创建Nancy Empty Web Application with ASP.NET Hosting
  3. 添加Nancy module,它是一个标准C#类,通过添加下面几行代码定义了web应用的路由处理方法。
  4. 编译并运行。
1
2
3
4
5
6
7
public class HelloModule : NancyModule
{
public HelloModule()
{
Get["/"] = parameters => "Hello World";
}
}

二、探索Nancy的module

Module继承自NancyModule类。Module是必不可少的.它不仅定义了路由,还提供了许多其他信息,比如请求、上下文、构造响应的辅助方法、视图渲染等等。

1. 模块能够在全局被发现

可以在任意地方定义module,比如外部的dll等,这为代码的复用带来很大的方便。不用担心效率问题,扫描module只在程序启动时发生。

2. 使用模块为路由创建一个根

类似命名空间的概念,在创建构造方法时传给base一个名称。

Read more »

一、 Django Rest Framework介绍

项目地址:http://www.django-rest-framework.org/

Django REST framewrok(简称DRF),强大而且灵活的工具箱,它使创建Web API变得简单。

你需要使用REST框架的一些原因:

  • 基于Web可浏览的API能让你赢得更多开发者
  • 包含OAuth1a和OAuth2的认证机制
  • 序列化同时支持ORM和非ORM的数据源
  • 自定义,如果不想用更为强大的功能,可以只使用常规的函数视图
  • 大量的文档,牛叉的社区支持
  • 大公司比如Mozilla和Eventbrite都用它,靠谱~

Browsable API

二、安装需求

REST框架具有以下要求:

  • Python(2.6.5+, 2.7, 3.2, 3.3)
  • Django(1.4.2+, 1.5, 1.6, 1.7)

下面的包是可选的:

Read more »

原文在此

我的一个同事说他怀念Ruby的正则表达式语法糖。我没有用过Ruby的正则表达式,但是我熟悉Python的,并且知道它的API需要一些语法糖来弥补一下。

首先,从正则表达式中获取分组需要2步。第一步,调用match()或者search(),并且将结果付值给一个变量。然后,需要检察结果是否为None(表示是否有找到匹配)。最后,如果匹配确实存在,你可以安全地取出分组。下面是一个例子:

>>> import re
>>> match_obj = re.match('([0-9]+)', '123foo')
>>> match_obj  # What is `match_obj`?
<_sre.SRE_Match object at 0x7fd1bb000828>
>>> match_obj.groups()('123',)
>>> match_obj = re.match('([0-9]+)', 'abc')
>>> match_objNone

依我来看,如果能像下面这样就更好了:

>>> re.get_matches('([0-9]+)', '123foo')('123',)
>>> re.get_matches('([0-9]+)', 'abc')None

另一个我常遇到的问题是弄混re.sub的参数,re.sub是用来查找和替换用的。所需要的参数按照顺序依次是模式(pattern),替换(replacement),还有字符串。由于更重各样的原因,对我来说search_string放在replacement前面看着更起来更直接。

不幸的是,弄混这些参数将会导致看上去正确的结果。下面是个例子,为了把单词foo用bar来代替。

>>> re.sub('foo', 'replace foo with bar', 'bar')
'bar'
>>> re.sub('foo', 'bar', 'replace foo with bar')
'replace bar with bar'

在上面例子中,有时我们会推测输入的字符串仅仅是foo

Read more »
0%