JSP基础 业 ,精于勤 荒于嬉.
- JSP基础 01.TOMCAT配置
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
Tomcatconfweb.xml
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>//这里本来是false改为true
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
//设置默认索引页
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
//设置错误页
项目目录/WEB-INFO/web.xml
<error-page>
<error-code>400</error-code>
<location>/lib/error.html</location>
<error-code>500</error-code>
<location>/lib/error.html</location>
</error-page>
- JSP基础 02.JSP标签形式
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
全局常量:
<%!
public static final String name = "eniac";
%>
普通语句
<%
String name = "xiaoMing";
class test{
........
}
%>
//易错点:当普通语句是单行时如:<%String name = "xiaoMing";%>要记得语句末尾一定要加;
输出语句:
<%
//java中我们是这样打印System.out.print();
//jsp中我们不用也不能写System了,可以这样直接写
out.print("xxxx");
%>
当然在jsp中这样写的是傻瓜,我们可以用简化写法
<%="xxxx"%>即表示打印字符串"xxxx",同out.print("xxxx");一样。
<%=要输出的内容%>要记得语句末尾不能加;
- JSP基础 03.@page指令
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
page指令共有以下12中:
1.autoFlush:可以设置为true或false,如果设置为true,当缓冲区满时,到客户端输出被刷新,如果设置为false,当缓冲区满时,将出现异常。表示缓冲区溢出。默认为true,
2.buffer:指定到客户端输出流的缓冲模式,如果none则表示不设置缓冲区;如果指定数值,那么输出的时候就必须使用不小于这个值的缓冲区进行缓冲。此属性要和autoFlush一起使用。默认不小于8K,根据不同的服务器可以设置。
3.contentType:定义JSP字符的编码和页面响应的MIME类型,如:contentType="text/html;charset=utf-8"
4.errorPage:定义此页面出错时要显示的页面,此属性要与isErrorPage一起使用。
5.extents:主要定义此页面产生的Servlet是从哪个父类扩展而来,例如extends="父类名称"。
6.import:此页面要导入哪几个包,和java一样。例如:import="java.IO.*"
7.info:此页面的信息,例如info="text info"
8.isErrorPage:可以设置true或false,表示此页面是否是处理出错的页面,如果是true,则errorPage指定的页面出错时才可跳转到此页面进行错误处理,如果设置成false,则无法处理。
9.isThreadSafe:可以设置为true或false,表示此页面是否是线程安全的,如果为true,表示一个JSP页面可以处理多个用户的请求,如果是false,则此页面一次只能处理一个用户请求。
10.language:定义脚本语言,参数只能说java,应为jsp只支持用java写啊。
11.pageEncoding:JSP页面的字符编码。
12.session:可以设置为true或false。是否开启session会话。
实例:
<%@ page language="java" contentType="text/html;" pageEncoding="utf-8" errorPage="error.html" isErrorPage="true" Encoding="UTF8"%>
<%@ page import = "java.sql.*"%>
比如可以设置mime类型,使页面变换显示形式实现下载为别的格式。
<%@page lanage="java" contentType="application/msword;charset=gbk"%>
<%
response.setHeader("Content-Disposition","attachement;filename=test.doc");
%>
- JSP基础 04.包含指令(两种包含形式静态包含/动态包含)
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
静态包含:
<%@ include file="header.jsp"%>
动态包含:不传参数写法
<jsp:include page="文件路径或|<%=表达式%>" flush="true|false"></jsp:include>
但是当然不传参数的时候尽量要这么写:
<% String str = "active.jsp"; %>
<jsp:include page="文件路径或|表达式(如:%<%=str>)" flush="true|false"/>
动态包含:传参数写法:
<jsp:include page="active.jsp" flush="true">
<jsp:param value="13" name="age"/>
<jsp:param value="<%=str%>" name="str"/>//也可以传递变量
</jsp:include>
包含页面接收参数:<%=request.getParameter("age")%>
两种包含文件类型的不同之处:
静态包含:是先提取内容,再和主文件一同编译,如果主文件中存在变量 String name,<%@ include file="包含文件.jsp"%>中也存在String name,那么程序会报错,提示变量名称重复!
动态包含:是各编译各的,包含文件内容编译了再提取出来,所以不会报错。
根据各方面而言我们选择尽量使用动态包含。
- JSP基础 05.页面跳转指令<jsp:forward
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
不传参数
<jsp:forward page="test.jsp|<%=表达式%>"/>
传参数的
<jsp:forward page="static.jsp">
<jsp:param value="参数名称" name="内容"/>
</jsp:forward>
此跳转非javascript的页面跳转,它的url不变,但内容(运行)的却是跳转后的页面。也就是说把当前页面替换成了设置的页面。我们称之为服务器跳转。
- JSP基础 06.JSP中九个内置对象
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
pageContent:javax.servlet.jsp.PageContext --JSP的页面容器
request:javax.servlet.http.HttpServletRequest --得到用户的请求
response:javax.servlet.http.HttpServletResponse --服务器向客户端的回应信息
session:javax.servlet.http.HttpSession --用来保存每一个用户的信息
application:javax.servlet.ServletContext --表示所有用户的共享信息
config:javax.servlet.ServletConfig --服务器配置,可以取得初始化参数
out:javax.servlet.jsp.JspWriter --页面输出
page:java.lang.Object --表示从该页面中表示出来的一个Servlet实例
exception:java.lang.Throwable --表示JSP页面所发生的异常,在错误页中才起到的作用。
- JSP基础 07.Tomact6.0/7.0+JAVA6.0+JSTL1.2配置
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
JSTL1.1以后根本不需要配置web.xml也不用复制什么tId文件夹
1.1.2:
下载页:http://tomcat.apache.org/download-taglibs.cgi
下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip
解压后:将lib中的两个jar放入项目WEB-INF/lib/目录下就OK了!
1.2.1:
JSTL1.1以后jstl.jar和Standard.jar两个文件合并为一个了如:taglibs-standard-xxxx-1.2.1.jar
下载页:http://tomcat.apache.org/download-taglibs.cgi
下载地址:http://apache.fayea.com/tomcat/taglibs/taglibs-standard-1.2.1/taglibs-standard-jstlel-1.2.1.jar
配置:直接将下载的taglibs-standard-jstlel-1.2.1.jar复制到项目WEB-INF/lib/目录下就OK了!
【重点】重启Tomcat服务器,别忘了凡是项目功能配置,组件扩展等都一定要重启服务器的!
- JSP基础 08.0 四种属性范围
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
1.pageContent 当前页面
2.request 当前页面及服务器跳转的页面
3.session 保存范围是当前用户,范围在该次打开的浏览器中本网站所有页面,浏览器关闭消失。
4.application 保存范围是服务器的所有用户都可同步获取。服务器重启消失
x.setAttribute("name","zhangSan");
x.getAttribute("name");
pageContent可以操作四种属性范围
比如说还可以将pageContent设置为request类型
pageContent.setAttribute("name","zhangSan",pageContent.REQUEST_SCOPE);
- JSP基础 08.1 request对象|request.getParameter中文乱码解决
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
实例:
form.html内容:
<form action="request.jsp" method="post">
<input type="text" name="pname"/><input type="submit"/>
</form>
request.jsp内容:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%=request.getParameter("pname") %>//接收表单参数pname
当我们提交字母数字时正常,但是当我们提交中文时,却显示乱码!解决方法:
原因:自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码。
方法一:(GET方法提交可能还是不能解决)
request.setCharacterEncoding("UTF-8");//设置接收的字符编码
【重点】但是记得必须将此代码放置到页面代码中任何request的上方,最好放到页面代码顶部,否则无效啊!
方法二:转换为字节数组:
<%=new String(request.getParameter("pname").getBytes("ISO-8859-1"),"UTF-8") %>
原因是表单提交时url默认是ISO-8859-1的字符编码提交方式,我们用字符数组以ISO-8859-1编码接收,然后输出为utf-8的字符串。【对get提交乱码很有效】
- JSP基础 08.2 response对象
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
设置跳转
response.setHeader("refresh", "3;");//每3秒刷新一次
response.sendRedirect("static.html");//跳转到指定页面
response.setHeader("refresh", "3;URL=static.html");//3秒后跳转到指定页面
和html跳转一样<meta HTTP-EQUIV="refresh" content="3;URL=static.html">
设置cookie
Cookie c1= new Cookie("name","eniac");
c1.setMaxAge(3600);//设置有效期(秒)
response.addCookie(c1);
读取cookie
Cookie cookie[] = request.getCookies();
for(int i=0;i<cookie.length;i++){
<%=cookie[i].getName() %>--<%=cookie[i].getValue() %>
}
- JSP基础 08.3 session对象
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
server.xml文件中,对当前虚拟目录/当前项目的session周期设置
<Context path="/JspRoot" docBase="D:AppServJspRoot" reloadable="true">
<Manager className="org.apache.catalina.session.PersistentManager" >
debug=0
saveOnRestart="true"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1"
<Store className="org.apache.catalina.session.FileStore" directory="../session" />
</Manager>
</Context>
saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入。
maxActiveSession:活动状态Session的最大数,为-1时则不限制,否则Session Manager将会把超出的Session对象转移到Session Store中。
minIdleSwap:Session不活动的最短时间,超过该时间,Session Manager 可能会把该Session对象转移到Session Store中,单位为秒。
maxidleSwap:Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象转移到Session Store中,该Session将不在内存中。
maxidleBackup: Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象备份到Session Store中,但该Session对象依然存在内存中。
<Store>指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的 session文件夹(当然自己创建)
在第四种配置中,配置完后可以写一个简单的jsp页面,在页面上显示本次用户访问的Session ID,然后重起tomcat,再刷新该页面,可以看到该Session Id不变,而在/session目录下自动生成一个以session id为名,以“session”为扩展名的文件。该Session的持久化配置成功。
- JSP基础 08.4 application对象
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
- JSP基础 09.安全配置
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
网站根目录的WEB-INF文件夹是不可见的,用户无法访问该文件夹下的资源。
可以映射,web.xml
<!--
dbInit.jsp文件在/WEB-INF/下,安全受到保护,但是不能访问。
将/WEB-INF/dbInit.jsp的文件
映射为
/hello.db
可以访问/hello.db实际为/WEB-INF/dbInit.jsp
并且可以配置dbInit.jsp的一些信息
只有/hello.db可以获取
-->
<servlet>
<servlet-name>db</servlet-name>
<jsp-file>/WEB-INF/dbInit.jsp</jsp-file>
<!-- 以下只对hello.eniac文件有作用,对其他页面没有用 -->
<init-param>
<param-name>dbDriver</param-name>
<param-value>org.git.mm.mysql.Driver</param-value>
</init-param>
<init-param>
<param-name>dbUrl</param-name>
<param-value>jdbc:mysql://localhost:3306/jsp</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>db</servlet-name>
<url-pattern>/hello.db</url-pattern>
</servlet-mapping>
读取:只有/WEB-INF/dbInit.jsp文件才可以读取信息
<%
String dbDriver = config.getInitParameter("dbDriver");
String dbUrl = config.getInitParameter("dbUrl");
%>
<h1>数据库驱动:<%=dbDriver %></h1>
<h1>数据库地址:<%=dbUrl %></h1>
- JSP基础 10.javaBean介绍
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
JavaBean是使用Java开发的一个可重用性的组件,使java开发中减少重复代码。使开发更快捷。
如果你还是不理解什么是JavaBean,那么打个直白的比方,可能不是很确切但就是这么个意思:
如果你有PHP或其他语音基础,或没有。。JavaBean其实就是一堆我们在开发项目中经常使用的一些类的集合/打包。
比如说数据库连接类/验证码类/文件上传类,可能我们大部分的项目都需要用,我们就没有必要做一个项目写一次这个代码了,那么我们把它写成一个类,以后在用我们直接调用就行了,就不用再写一次了!我们称为JavaBean。。。其实java是很装逼的语言,不要害怕java,不要看到什么JavaBean、spring什么的单词就害怕了,他就是把最基础的功能起个名字装装逼,根本不难,没什么特别的。
VO:值对象,存放所有的传递数据的操作上。
POJP:简单的java对象。
TO:传输对象,一个类必须实现Serializable接口后称为传输对象。
【ZhuangBi.java】
package testBean.canquick.yyd.demo;
public class ZhuangBi {
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getInfo() {
return "姓名:"+this.name+"----年龄:"+this.age;
}
}
---------------------------------------------------------------------
【javaBean.jsp】
//javaBean可以初始化对象,然后进行简单的setter
<jsp:useBean id="zbBi" scope="page" class="testBean.canquick.yyd.demo.ZhuangBi">
<jsp:setProperty property="name" value="zhangSan" name="zbBi"/>
<jsp:setProperty property="age" value="20" name="zbBi"/>
</jsp:useBean>
<%=zbBi.getInfo() %>//姓名:zhangSan----年龄:20
--------------------------------------------------------------------
//javaBean还可以通过表单对初始化的对象进行简单的setter
【form.html】
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在此处插入标题</title>
</head>
<body>
<form action="javaBean.jsp" method="post">
<p>name:<input type="text" name="name" value="ZhangSan"/></p>
<p>age:<input type="text" name="age" value="20"></p>
<p><input type="submit"></p>
</form>
</body>
</html>
【javaBean.jsp】
// id="zbBi"代表为给初始化的ZhuangBi类赋值,可以解释为:ZhuangBi zbBi = new ZhuangBi();
//scope="page"即变量zbBi作用域为page,当然也可以是session、request、application等四种类型
<jsp:useBean id="zbBi" scope="page" class="testBean.canquick.yyd.demo.ZhuangBi">
//property="*"代表设置表单中的所有字段,可以解释为zbBi.setName("ZhangSan");zbBi.setAge(20);
<jsp:setProperty property="*" name="zbBi"/>
</jsp:useBean>
<%=zbBi.getInfo() %>//姓名:zhangSan----年龄:20
如果:
//property="age"代表只设置表单的age字段,其它字段相同..
//property="age" name="zbBi" 可以解释为zbBi.setAge(20);(20代表的是表单form中age传过来的参数为20)
<jsp:setProperty property="age" name="zbBi"/>
//那么<%=zbBi.getInfo() %>为:姓名:null----年龄:20
- JSP基础 11.smartUPload
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
- JSP基础 12.0 Servlet简介
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
- JSP基础 12.1第一个Servlet程序
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
项目目录下配置web.xml
<servlet>
<servlet-name>hello</servlet-name>//设一个servlet的名称
<servlet-class>test.canquick.eniac.demo.ServletDemo</servlet-class>//对应的servlet.clss文件
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>//设置对应配置好的servlet的名称
<url-pattern>/helloServlet</url-pattern>//访问路径
http://localhost:xx端口/helloServlet 就可以访问此servlet
</servlet-mapping>
ServletDemo.java类:
package test.canquick.eniac.demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo extends HttpServlet {
public void doGet(HttpServletRequest hsrq,HttpServletResponse hsrs) throws IOException{
hsrs.setCharacterEncoding("UTF-8");
PrintWriter out = hsrs.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
out.println("<title>123456</title>");
out.println("</head>");
out.println("<body><h1>d标s题d</h1></body>");
out.println("</html>");
out.close();
}
}
- JSP基础 12.2 Servlet读取配置
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
- JSP基础 12.3 Servlet取得内置对象-Session
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
package demo.canquick.eniac.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class HttpSessionServletDemo extends HttpServlet {
public void doGet(HttpServletRequest hsr,HttpServletResponse hsrs){
HttpSession hs = hsr.getSession();
System.out.println(hs.getId());
hs.setAttribute("username", "eniac");
System.out.println(hs.getAttribute("username"));
}
public void doPost(HttpServletRequest hsr,HttpServletResponse hsrs){
this.doGet(hsr, hsrs);
}
}
<servlet>
<servlet-name>servletSession</servlet-name>
<servlet-class>demo.canquick.eniac.servlet.HttpSessionServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletSession</servlet-name>
<url-pattern>/servletSession</url-pattern>
</servlet-mapping>
- JSP基础 12.4 Servlet取得内置对象-Application
-
发表日期:2015-02-15 21:20:08 | 来源: | 分类:JSP基础
-
package demo.canquick.eniac.servlet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpApplicationServletDemo extends HttpServlet {
public void doGet(HttpServletRequest hsr,HttpServletResponse hsrs){
ServletContext sc = super.getServletContext();
System.out.println(sc.getRealPath("/"));
}
public void doPost(HttpServletRequest hsr,HttpServletResponse hsrs){
this.doGet(hsr, hsrs);
}
}
<servlet>
<servlet-name>HttpApplicationServletDemo</servlet-name>
<servlet-class>demo.canquick.eniac.servlet.HttpApplicationServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HttpApplicationServletDemo</servlet-name>
<url-pattern>/HttpApplicationServletDemo</url-pattern>
</servlet-mapping>
</web-app>