java web知识点荟萃

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值