java web知识点荟萃
来源:互联网 发布:淘宝专业刷信誉平台app 编辑:程序博客网 时间:2024/05/21 06:43
1. 页面之间参数传递
例如有表单页面1.html,里面有文本域name熟悉为UserName(或者是一个超链接,href属性为1.jsp?UserName=’cmj’),提交到1.jsp,在1.jsp中就可以使用<%String uname=request.getParameter(“UserName”)%>进行接收。
2. 避免使用out.print()
在jsp页面中应该尽量避免使用out.print(),除非是为了测试需要,否则,应该使用scriptlet(即java小程序)来处理。
3. 排除页面乱码
在jsp中如何避免出现乱码?其实很简单,乱码是因为编码格式不正确造成的,我们只需要在jsp中指定编码格式。在页面的开头部分添加:<%@ page contentType="text/html;charset=gb2312"%>
4. 两种文件包含
Jsp中可以使用两种方式包含一个文件:第一种<%@ include file="5.1.jsp"%>;第二种:<jsp:include page="5.1.jsp" />。但是两种方式有着很大的处理区别:第一种是先包含再处理,第二种是先处理再包含。意思就是说如果包含文件中有java代码,用第一中包含就会先将文件当成文本包含进来,然后在执行文本中的java代码;而第二种方式就首先执行文件中的java代码,而后再将执行后的文本内容包含进来。
5. 两种页面跳转
第一种无条件跳转,也就是只要只想到这一段代码就会跳转。例如在6.jsp页面有这样一段java代码(这里在跳转的同时还传递了参数):
<%
String pwd="123456";
%>
<jsp:forward page="6.1.jsp" >
<jsp:param name="userName" value="cmjstudio"/>
<jsp:param name="userPwd" value="<%=pwd%>" />
</jsp:forward>
但是打开这个页面的时候地址栏是不会更改的,还是6.jsp,而不是6.1.jsp。这种情况属于页面内容跳转,是服务器端跳转。也就是说用户请求没有改变,还是6.jsp。但是页面内容会变成6.1.jsp的内容,而且还将参数userName和userPwd传递到了6.1.jsp。
第二种就是客户端跳转,response.sendRedirect("6.1.jsp"),是在所有代码执行之后才跳转,而上面的跳转在遇到jsp:forward之后就不再执行,无条件跳转。
6. 四种属性范围
在jsp中有四种属性范围:application、session、request、page范围依次减小,和其他web应用程序相似。设置属性分别是:application.setAttribute(“属性名”)、session.setAttribute(“属性名”)、request.setAttribute(“属性名”)、pageContent.setAttribute(“属性名”);获得属性对应的是:application.getAttribute(“属性名”)……
可以发现page范围的属性是用pageContent实现的,而事实上另外其他三种属性范围也都是通过pageContent实现的。例如:pageContext.setAttribute("name","cmj",pageContext.PAGE_SCOPE)
pageContext.setAttribute("name","cmj",pageContext.APPLICATION_SCOPE)等,
接收是对应的pageContext.getAttribute("name")/application.getAttribute("userPwd")等。
7. 表单提交中的特殊符号
有时候我们在就收表单值时会出现意想不到的结果,乱码或其他状况。这个时候我们可以在用reques接受的时候,在就收之前加上:request.setCharacterEncoding("gbk");来限定编码方式。
8. 设置头信息
设置头信息通过response.setHead例如我们通过response.setHeader("refresh","1"); 设置每秒钟刷新一次
9. cookie和session
在jsp中可以通过以下代码设置和读取cookie信息:
Cookie c1=new Cookie("name","cmj");
c1.setMaxAge(60);//设置cookie的有效期为60秒
response.addCookie(c1);//服务器端给客户端设置cookie
Cookie[] c=request.getCookies();//服务器端读取客户
for(int i=0;i<c.length;++i){
Cookie temp=c[i];
temp.getName()}
设置和读取cookie的信息不再赘余,在四种属性范围已经说过。但是注意:注销session用session.invalidate();另外session使用了cookie的机制,cookie被禁用以后,session也不能使用。
10. 文件/目录路径
有时候我们需要获得服务器的工作目录等可以试试下面的几种方法:
工作目录真实路径(两种方法都可以):
<%=application.getRealPath("/")%>
<%=getServletContext().getRealPath("/")%>
事实上它是通过在tomcat中的配置路径得到的.实际中常常用getServletContext()方法代替application但是这个getServletContext()是由哪个对象条用的呢?事实上对所有的web应用程序都有一个web容器,这个方法就是有web容器调用的,可以加一个this试一下:<%=this.getServletContext().getRealPath("/")%>
11. 如何保存数据库连接字符串
数据库连接字符串我们一般不希望直接在代码中出现,这时我们可以通过在web.xml(整个站点的配置文件)来配置,将连接字符串写到web.xml中
格式:
<servlet>
<init-param>
<param-name>connection</param-name>
<param-value>连接字符串</param-value>
</init-param>
</servlet>
读取方法可以调用jsp内置对象config来读取。(顺便说一下我们在jsp中用到的out也是jsp内置对象)
12. 连接mysql
<%!
//驱动字符串
String DBDRIVER="sun.jdbc.odbc.jdbcodbcDriver";
//数据库连接地址
String DBURL="jdbc:odbc:JavaTest";//其中JavaTest是odbc中的数据源名称
Connection conn=null;
//Statement对象,用于操作数据库
Statement stmt=null;
%>
<%
//1.加载数据库驱动
try{
Class.forName(DBDRIVER);
}catch(ClassNotFoundException ex){
ex.printStackTrace();
}
//2.创建数据库连接
try{
conn=DriverManager.getConnection(DBURL);
}catch(SQLException ex){
ex.printStackTrace();
}
//3.操作数据库
try{
String sql="insert into tb_Person(UserName,UserPwd,Age) values('nyx','123',20)";
stmt=conn.createStatement();
stmt.executeUpdate(sql);
}catch(SQLException ex){
ex.printStackTrace();
}
//4.关闭数据库
try{
stmt.close();
conn.close();
}catch(SQLException ex){
ex.printStackTrace();
}
%>
补充:
(1) jdbc连接数据库(这里以oracle、mysql为例,在oracle/mysql安装目录找到相应驱动拷贝到tomcat的lib目录)
I.oracle
String DBDRIVER="oracle.jdbc.driver.OracleDriver";
String DBURL="jdbc:oracle:thin:@localhost:1521:HR";
String USER="HR";
String PASSWORD="123456";
Connection conn=null;
Statement stmt=null;
II.Mysql
String DBDRIVER="com.mysql.jdbc.Driver";
//String DBDRIVER="org.gjt.mm.mysql.Driver";
String DBURL="jdbc:mysql://localhost/db_JavaTest";
String USER="root";
String PASSWORD="123456";
Connection conn=null;
Statement stmt=null;
(2)如何读取数据
String sql="select * from tb_Person";
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){
int id=rs.getInt("ID");
String name=rs.getString("UserName");
String password=rs.getString("UserPwd");
int age=rs.getInt("Age");
}
(3)防止SQL注入
String sql="insert into tb_Person(UserName,UserPwd,Age) values(?,?,?)";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setString(2,password);
pstmt.setInt(3,age);
pstmt.executeUpdate();
(4)执行批处理
String sql1="insert into tb_Person(UserName,UserPwd,Age) values('nyx','123',20)";
String sql2="insert into tb_Person(UserName,UserPwd,Age) values('wty','123',20)";
String sql3="insert into tb_Person(UserName,UserPwd,Age) values('ljh','123',20)";
String sql4="insert into tb_Person(UserName,UserPwd,Age) values('zdp','123',20)";
String sql5="insert into tb_Person(UserName,UserPwd,Age) values('wys','123',20)";
stmt=conn.createStatement();
conn.setAutoCommit(false);//禁止自动执行
stmt.addBatch(sql1);
stmt.addBatch(sql2);
stmt.addBatch(sql3);
stmt.addBatch(sql4);
stmt.addBatch(sql5);
stmt.executeBatch();//执行批处理
conn.commit();//提交
13. javabean
由于javabean相应的描述比较多,参见我的另一篇:谈谈javabean
- java web知识点荟萃
- C++一句话知识点荟萃
- java web知识点总结
- java Web知识点整理
- Java web常用知识点
- Java Web知识点【3】
- java web知识点总结
- Java Web 知识点
- java-web知识点
- java web 知识点总结
- java经典名句荟萃
- JAVA面试题荟萃
- JAVA 基础类 荟萃
- WEB页面常用代码荟萃
- C++一句话知识点荟萃[累计更新]
- java web的知识点总结
- JAVA WEB SERVLET 基础知识点
- java Web知识点(1)
- 用FILE打开文件
- Arch Install & some configuration
- Linux集群的I/O性能测试
- 公司招聘C/C++面试题
- Asp.net程序
- java web知识点荟萃
- valgrind中文命令行帮助
- 算法设计 -- VC控制台模拟“汉诺塔”移动过程
- (转帖)Visual C++开发工具与调试技巧整理
- 我的“独立日”
- Windows下用C语言获取进程cpu使用率,内存使用,IO情况
- 数据库SQL大全
- 我的部分诗词
- xfce