`
join_18
  • 浏览: 38832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP学习笔记

    博客分类:
  • Java
阅读更多
一、JSP简介
Server.xml----
<Connector port="8888" maxHttpHeaderSize="8192" URLEncoding="UTF-8"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

端口:8888
uri编码的设置: 针对GET请求(支持中文)

Tomcat----http://tomcat.apache.org/

开放目录的列表权限(开发调试阶段):
<init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
       </init-param>



Tomcat所有文档:E:\Tomcat\apache-tomcat-5.5.23\webapps\tomcat-docs\index.html

HTTP报错:
○15XX开头为服务器报错;

如果机器是双核CPU, 可以再在后面追加参数提高垃圾回收性能:
-XX:+UseParallelGC
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>


UTF-8:告知XML编码为UTF-8
UTF-8:告知浏览器编码为UTF-8
UTF-8:告知JSP编码为UTF-8

userName.isEmpty()方法: 判断字符串是否空串, java6新增方法;
if (userName==null || userName.isEmpty()){
        request.setAttribute("error","用户名不能为空.");
        pageContext.forward("index.jsp");
        return;
}

request.setAttribute()方法: 设置和其他页面共享的属性, 该方法类似Map的put方法
pageContext.forward()方法: 转发到其他页面

<%=request.getAttribute("error")==null?"": request.getAttribute("error")%>

request.getAttribute()方法: 获取其他页面共享的属性, 该方法类似Map的get方法

服务器端校验和客户端校验的比较:
• 服务器端校验是必须的, 否则会有脏数据流入到服务器中;
• 浏览器有可能屏蔽javascript功能, 或者客户端根本不是浏览器;
• 客户端校验提供更好的用户体验;
• 客户端校验可以减少无效的网络交互, 从而提高服务器效率.

二、JSP常用语法与对象
指令
<%@ ... %>




JSP中导JAVA包:
<%@page import="java.util.Date"%>



JSP中编译的class文件和java文件所在:
E:\Workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\Jsptest.web\org\apache\jsp
项目名称

格式化时间:dateformat在java.text包下
主要是format方法和parse方法
new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss").format(date)
例:
<%
String dateString="1999-1-1";
Date date=new Date();
%>
<%=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss").format(date) %>
<%Date newdate=new SimpleDateFormat("yyyy-MM-dd").parse(dateString);  %>
<%=new SimpleDateFormat("yyyy年MM月dd日").format(newdate) %>


定义全局变量+!
例:
<%!
private String abc=”dsa”;
%>


JSP动作:
语法特征
<jsp: ... />



re use 重用/复用

静态包含:
<%@ include file="url"%>

动态包含:
<jsp:include page="url" />

静态包含与动态包含相比较:
静态包含性能稍好;
静态包含使两个页面之间可以共享局部变量(容易造成混乱);
属于编译器包含
动态包含可以加入参数(后面再讲)
当不确定使用静态包含还是动态包含时, 建议使用动态包含
属于运行包含

内置对象(9个):
1 out  输出流
2 request  请求
2.1 String 变量名 = request.getParameter("文本框对象名");//获取表单提交参数
2.2 String[] 变量名 = request.getParameterValues("多选框对象名");//获取表单多个参数(多用于多选按钮checkbox)
2.3 request.setCharacterEncoding("UTF-8");//设置请求的编码
2.4 request.getRemoteHost() //取得客户端主机名称
2.5 设置和访问共享属性
2.5.1 request.setAttribute("error", "用户名不能为空.");//设置和其他页面共享的属性, 该方法类似Map的put方法
2.5.2 request.getAttribute("error");//获取其他页面共享的属性, 该方法类似Map的get方法
2.5.3 request.removeAttribute("error");
2.6 request.getRealPath("文件名");//得到文件的绝对路径
3 response  响应
3.1 增加响应的头信息, 比如通知浏览器不要缓存这个响应
3.1.1 response.addHeader("pragma", "no-cache");//cache缓冲区
3.1.2 response.addHeader("cache-control", "no-cache");//cache缓冲区
3.1.3 response.addHeader("expires", "0");//失效时间
例:增加header属性, 比如通知浏览器不要缓存这个响应(运行后通过TCPTrace可观察响应头部的变化)
response.addHeader("pragma", "no-cache");
		response.addHeader("cache-control", "no-cache");
		response.addHeader("expires", "0");

no-cache:不要缓存
0:失效时间
3.2 response.sendRedirect("网址");
3.2.1 页面重定向
3.2.2 两次请求相应
4 session  会话
4.1 设置和访问共享属性
4.1.1 session.getAttribute(String name);
获得与制定名字name相联系的属性
4.1.2 session.setAttribute(String name,Object value);
设置name的属性值为value,并存储到session对象中
4.1.3 session.removeAttribute(name);
删除与制定的name项联系的属性
4.1.4 session.invalidate();
销毁session:人为销毁和服务器自动销毁
4.1.5 getMaxInactiveInterval;
返回总时间(秒),负值表示session永远不会超时,改值为scssion的生存时间
5 pageContext  转发请求
5.1 pageContext.forward("转发的页面");
5.1.1 转发到其他页面
5.1.2 一次请求相应
6 application  申请
6.1 application.getMajorVersion()+"."+application.getMinorVersion();
6.1.1 得到servlet的版本号
6.2 application.getServerInfo();
6.2.1 得到服务器信息
6.3 共享全局属性
6.3.1
application.setAttribute("company.name"," Microsoft中国");


6.3.2
application.getAttribute("company.name");


6.3.3 作用域最大
6.3.4 在web.xml中配置
例:
//在web.xml中加入
	<context-param>
  	      <param-name>company.name</param-name>
  	      <param-value>Microsoft中国</param-value>
	</context-param>


6.4 application.getInitParameter("company.name");//可配置的全局信息
7 config  设置页面的常量
7.1 config.getInitParameter("page.title");
8 exception  错误页面(异常)
8.1 异常的处理
8.1.1 创建处理报错的页面
例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>

8.1.2 isErrorPage属性
表示此页面为错误页面,属性必须是true
如果JSP页面增加了这个属性, 生成的java文件会增加exception对象.
8.1.3 发送错误的页面需要效用错误页面,否则错误页面无法显示
例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="错误页面名称"%>


注: 除IE浏览器都能正常看到效果,对IE浏览器的设置: 工具>Internet选项>高级> 取消勾选显示友好http错误信息
8.2 常见异常:
8.2.1 执行servlet时,发生404错误:
8.2.1.1 多为xml中配置出错.
8.2.1.2 可能在servlet通信方法中url出错.
8.2.1.3 表单提交时:action路径.
8.2.1.4 比较弱智的错误就是标记写错,请仔细检查.
8.2.2 执行servlet时,发生403错误:
tomcat下站点里发生错误.
8.2.3 执行servlet时,发生405错误:
servlet中没有post提交方法时.
8.2.4 执行servlet时,发生500错误:
多数为servlet程序代码中发生异常错误.
8.2.5 执行时,取出的数据为null.就要根据实际情况对应错误提示去找.
8.2.6 执行jsp页时,发生500错误提示....      
多数为jsp页面在转译过程中发生编译错误! 甚是严重错误,可以按提示回头去找..
9 page  页面

三、在JSP中实现MVC模式
1 JSP的语法要素
1.1 指令
1.2 小脚本
1.3 表达式
1.4 动作
2 JSP的作用域概念
2.1 作用域与对应的内置对象:(从低到高)
2.1.1 page: pageContext
2.1.2 request: request
2.1.3 session: session
2.1.4 application: application
3 JavaBean
3.1 人类语言, 描述客观现实世界, 使用动词和名词组成动宾短语, 主语+(动宾短语).
计算机语言, 描述数字世界, 各种机器指令组成的过程.
计算机语言模仿人类语言, 描述数字世界, 面向对象语言.
Java中使用JavaBean技术代表名词
3.2 JavaBean的特点:
3.2.1 实现Serializable接口;
3.2.2 有默认的构造方法;
3.2.3 有get/set方法:
3.2.4 普通的属性, 比如name, 生成setName和getName方法;
3.2.5 布尔属性, 比如male, 生成setMale和isMale方法
3.2.6 get/set方法从语义上并不是方法, 而是某个属性是否可读可写, 因为java沿袭c++的语法, 没有用新的语法指示属性的读写.
3.2.7 toString方法可以写成配置文件
toString方法例:
public String toString() {
return MessageFormat.format("姓名{0},邮箱{2},生日{3},性别{4}", this.userName,this.userEmail, this.userBirthday, this.userSex);
	}


4 JSP实现MVC模式
4.1 MVC模式:
4.1.1 M(Model): 模型,
4.1.2 V(View): 视图,
4.1.3 C(Controller): 控制器
4.1.4 现代的MVC为M V-C(V与C绑定)
4.2 为什么用MVC模式?
4.2.1 人员分工
4.2.2 关注分离
4.3 如何看待MVC模式的应用?
4.3.1 MVC用于有图形界面的应用系统开发
4.3.2 MVC是实现一个功能的不同方面
- 模型部分的代码负责抽象的(和具体界面比如jsp/swing/awt无关的)业务逻辑.
- 视图部分负责展示模型名词(怎么摆放, 什么风格, 什么样式等), 不需要知道模型名词怎么生成的.
- 控制器部分负责调用模型动词获取模型名词, 然后调用视图, 不需要知道模型名词怎么展示.

5 MVC模式图


当浏览器发出请求时,首先由控制器(C)接收到请求,并分析HTTP参数,然后调用模型层(M)中的动作(方法)获得模型层数据(名词),调用完成后将数据传回控制器,控制器再调用试图层(V)将数据通过视图层展示,最后试图层将请求内容展示在浏览器中。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics