web小结

     1、MIME(Multipurpose Internet Mail Extensions,多功能Internet邮件扩充服务):就是指定某个扩展名文件将使用何种应用程序打开的一个说明。

      例如:<%@ page language="java" contentType="text/html;charset=GBK"%>

      注意:如果MIME类型设置错误,可能出现下载提示框。例如:将“text/html;charset=GBK”写为“test/html;charset=GBK”。

     注意:下载框必须指定MIME类型。

     如果自己想指定下载文件的名称,则使用以下语句:

     <%

             response.setHeader("Content-Disposition","attachment;filename=张三.doc")

      %>

      2、文件编码问题contentType和pageEncoding

       contentType中的charset指的是服务器发送给客户端的内容编码;

       pageEncoding指的是JSP文件本身的编码。

       在JSP中,如果pageEncoding存在,那么JSP编码将由pageEncoding决定,否则将由charset属性决定,如果两者都不存在,则将使用ISO-8859-1的编码方式。

     3、错误页问题

      完成错误页的搓澡,一定满足两个条件:

      指定错误出现时的跳转页,通过errorPage属性指定;<%@ page errorPage="error.jsp"%>

      错误处理页必须有明确的标识,通过isErrorPage属性指定。<%@ page isErrorPage="true"%>

      服务器端跳转:内容显示虽然改变了,但是地址栏没有改变,在整个操作中,客户端对服务器只发送了一次请求,服务器对客户端也只回应了一次。例如:错误页跳转。

      客户端跳转:程序跳转后,页面的地址栏发生改变了。例如超链接。

      这些错误是在每一个JSP页面中指定的,如果想在整个目录中指定全局的错误处理,就必须修改web.xml。全局的错误处理可以处理两种类型错误,一种是HTTP代码错误,例如:404,还有一种是异常的错误,例如:NullPointerException等。例如:

     <error-page>

             <error-code>500</error-code>

             <location>/error.jsp</location>

      </error-page>

      <error-page>

             <exception-type>java.lang.NullPointerException</exception-type>

             <location>/error.jsp</location>

       </error-page>

     注意:在错误页的操作中,如果出现了无法显示error.jsp页面的情况,则有可能是Tomcat将error.jsp也认为是出现了错误,从而无法跳转,此时,可以直接在error.jsp中编写一下语句:

      <%@ page language="java" contentType=text/html"pageEncoding="GBK"%>

      <%@ page isErrorPage="true"%>

      <%response.setStatus(200);%>

      此语句设置了一个200的HTTP状态码,表示本页没有错误,可以正确显示。

      4 、数据库连接操作

      将数据库驱动程序复制到Tomcat\lib目录下。

      <%@ page contentType="text/html" pageEncoding="GBK"%>

      <%@ page import="java.sql"%>

      <html>

      <head><title>连接数据库</title></head>

      <body>

      <%!

                public static final String DBDRIVER="org.gjt.mm.mysql.Driver";//定义数据库驱动程序

                public static final String DBURL="jdbc:mysql://localhost:3306/数据库名称";//数据库连接地址

                public static final String DBUSER="root";//数据库连接用户名

                public static final String DBPASS="mysqladmin";//数据库连接密码

      %>

      <%

             Connection conn=null;//声明数据库连接对象

             PreparedStatement pstmt=null;//声明数据库操作

             ResultSet rs=null;//声明数据库结果集  

      %>

      <%

             try{ //数据库操作中会出现异常,所以要使用try...catch处理

                     Class.forName(DBDRIVER);//数据库驱动程序加载

                     conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);取得数据库连接

                     String sql="SELECT empno,ename,job,sal,hiredate FROM emp";

                     pstmt=conn.prepareStatement(sql);//实例化prepareStatement 对象

                     rs=pstmt.executeQuery();//执行查询操作           

      %>

       <center>

                <table border="1" width="80%">

                        <tr>

                                 <td>雇员编号</td>

                                 <td>雇员姓名</td>

                                 <td>雇员工作</td>

                                 <td>雇员工资</td>

                                 <td>雇佣日期</td>

                        <tr>

                <%

                        while(rs.next()){//循环emp表中的行记录

                                   int empno=rs.getInt(1);//取出雇员编号

                                   String ename=rs.getString(2);//取出雇员姓名

                                   String job=rs.getString(3);

                                   float sal=rs.getFloat(4);

                                   java.util.Date date=rs.getDate(5);

                %>

                        <tr>

                                   <td><%=empno%></td>

                                   <td><%=ename%></td>

                                   <td><%=job%></td>

                                   <td><%=sal%></td>

                                   <td><%=date%></td>

                         </tr>

                 <%

                         }

                  %>

                       </table>

                 </center>

                 <%

                 }catch(Exception e){

                           System.out.println(e);

                }finally{      //程序的统一出口

                      rs.close();//关闭结果集

                      pstmt.close();//关闭操作

                      conn.close();//关闭连接

                 }

                %>

                </body>

                </html>

     5、乱码解决

      在Web开发中,使用request接受请求参数是最常见的操作,但是,在进行参数提交时也会存在一些中文的乱码问题。

      在JSP中加入一句即可解决问题:

      request.setCharacterEncoding("GBK");//设置统一编码

      String content=request.getParameter("info");//接受表单提交的参数

      注意:单一的参数都可以使用getParameter()接受,而一组参数药用getParameterValues()接受。在表单控件中,像文本框(text)、单选按钮(radio)、密码框(password)、隐藏域(hidden)等,一般都会使用getParameter()方法进行接受,因为这些控件在使用时参数的名称都只有一个不会重复;而像复选框(checked),一般参数的名称都是重复的,是一组参数,所以只能使用getParameterValues()接受,如果不小心使用了getParameter()方法,则只会接受第一个选中的内容。

      注意:在进行表单参数接受时,如果用户没有输入文本框内容或者没有选择复选框内容,那么在使用getParameter()或getParameterValues()接收参数时,返回的内容为null,此时就有可能产生NullPointerException,所以在使用时最好判断接收来的参数是否为null。

      即:

      <%

            String inst[]=request.getParameterValues("inst");  //接受复选框提交的参数

             if(inst!=null){  //判断是否有内容

                       for(int x=0;x<inst.length;x++){

        %>

                                    <%= inst[x]%>

         <%

                        }

          %>

          <%

                 }

           %>

      URL地址写法:动态页面地址?参数名称1=参数内容1&参数名称2=参数内容2&...

      所有参数与之前的地址之间使用“?”分离,然后按照“参数名称=参数内容”的格式传递参数,多个参数之间使用“&”分离。

     <%

              String param1=request.getParameter("参数名称1");//接受参数

               String param2=request.getParameter("参数名称2");//接受参数

      %>

      6、response对象的用法

        头信息:客户端在进行请求时会发送许多额外的信息,这些信息就是头信息,服务器端也可以根据需要向客户端设置头信息,在所有的头信息设置中,定时刷新页面的头信息使用最多,直接使用setHeader(),将头信息的名称设置为refresh,同时制定刷新的时间。

       定时刷新页面的设置语句:

       <%

                response.setHeader("refresh","2");//设置两秒一刷新

        %>

 

       设置此网站访问了次数的语句:

       <%!

                int count=0;//定义全局变量

       %>

        <h3>已经访问了<%=count++%>次!</h3>

 

        设置三秒后跳转到其他页面的语句:

        <h3>3秒后跳转到hello.htm页面,如果没有跳转请按<a href="hello.htm">这里</a></h3>

        <%

                response.setHeader("refresh","3;URL=hello.htm");//3秒后跳转到hello.htm

         %>

         注意:如果上面的3改为0,则表示无条件立刻跳转。定时跳转属于客户端跳转。

        设置头跳转头信息的另一种方式:

        <META HTTP-EQUIV="refresh" CONTENT="3;URL=hello.htm">

        <body>

                <h3>3秒后跳转到hello.htm页面,如果没有跳转请按<a href="hello.htm">这里</a></h3> 

        </body>

        页面跳转的另一种方式:

        <%

              response.sendRedirect("hello.htm");//直接跳转到hello.htm

        %>

        注意:这种跳转也属于客户端跳转

        注意:服务器端跳转与客户端跳转之间的区别:<jsp:forward>属于服务器端跳转,跳转至后地址栏的信息并没有任何改变;而response.sendRedirect()属于客户端跳转,跳转至后地址栏会改变的。在使用request属性范围时,只有是服务器端跳转才能够将request属性保存到跳转页,如果是客户端跳转,则无法进行属性的传递。另外,如果使用的是服务器端跳转,则执行到跳转语句时会立刻进行跳转,如果使用的是客户端跳转,则是在整个页面执行完之后才执行跳转。

      7、session对象:主要用于完成用户的登录(login)、注销(logout)等常见功能。

      用户的登录:

      session.setAttribute("userid",name);//将登录的用户名保存在session中

      session.getAttribute("userid");

      判断是否是新用户:

      <%

            if(session.isNew()){

      %>

                     <h3>欢迎新用户光临</h3>

       <%

              }else{

       %>

                     <h3>您已经是老用户了!</h3>

        <%

               }

         %>

 

       取得用户的操作时间:

        <%

               long start=session.getCreationTime();//取得创建时间

               long end=session.getLastAccessedTime();//取得最后一次操作时间

               long time=(end-start)/1000; //得出操作的秒

         %>

          <h3>您已经停留了<%=time%>秒!</h3>

     8、每次修改JavaBean都需要重启服务器,会很麻烦,但是加上以下语句,即可自动启动:

     <Context path="/mldn" docBase="D:\mldnwebdemo" reloadable="true"/>

     直接在配置虚拟目录的位置上增加一个reloadable属性即可,但是这种情况只适合于开发。因为使用reloadable自动加载后,服务器将始终处于监视状态,一旦发现类修改后就要立刻重新加载,运行的性能是比较低的,所以,在项目真正发布运行时一定要将reloadable的内容设置为false,以提升服务器的运行性能。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值