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的内容,而且还将参数userNameuserPwd传递到了6.1.jsp

           第二种就是客户端跳转,response.sendRedirect("6.1.jsp"),是在所有代码执行之后才跳转,而上面的跳转在遇到jsp:forward之后就不再执行,无条件跳转。

6.       四种属性范围

jsp中有四种属性范围:applicationsessionrequestpage范围依次减小,和其他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.       cookiesession

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的信息不再赘余,在四种属性范围已经说过。但是注意:注销sessionsession.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";//其中JavaTestodbc中的数据源名称

                    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连接数据库(这里以oraclemysql为例,在oracle/mysql安装目录找到相应驱动拷贝到tomcatlib目录)

Ioracle

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;

IIMysql

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

原创粉丝点击