JavaWeb网站用Servlet实现前后台交互

现在很多网站都用框架开发,不过为了奠定基础,我在这里记录下在没有框架的条件下进行网站开发的总结.

基本框架

JavaWeb网站用Servlet实现前后台交互_第1张图片

Servlet用于处理用户的Http请求,本文不讲原理,只是我的个人代码总结。程序用最简单的Servlet实现。

Servlet代码结构:

public class Example extends HttpServlet{
     public void doPost(HttpServletRequest request,HttpServlet response)throws ServletException{
     //do something
}
     public void doGet..
}

一般需要重写的方法就是doPost,doPut,doGet之类的方法,在Servlet原理讲到的service() init()方法都不用重写。比如在example.jsp中,你提交表单访问Example(Servlet)

"Example" method="post"> type="submit" value="submit"/>

Server(你创建的tomcat服务器)会调用init(),然后调用service(),然后service()调用doPost(),doGet()。当然,我这里的表单method=”post”,
重写doPost方法就可以了。

在web.xml中配置servlet
Web.xml是配置web项目基本信息的文件
配置servlet字段:

   <servlet>

     <servlet-name>servlet-name>

     <servlet-class>包名.子包名.实现类名servlet-class>
   servlet>

<servlet-mapping>
          <servlet-name>servlet-name>
       
          <url-pattern>/servletnameurl-pattern>
servlet-mapping>

虽然配置servlet的文章很多很多。但是这个指的是什么?都说是这个servlet可以处理的url。我真正做的时候,才知道,就是在表单action属性里面填的东西。

后台数据传到前台?

假设现在有一个数据表dbo.user

怎么从把数据库获取的数据放到前台页面?

   username varchar(20);    
   password  varchar(20);
   id   int identity(1,1) primary key;   

连接数据库的EJB(Java Bean)连接SQL Server:

public class DBInfo {
       //This is a EJB that connects the DataBase
       private static String userName="";
       private static String password="";
       private static String DBURL="jdbc:sqlserver://localhost:1433;DatabaseName=DBuser";
       private static String DMInfo="com.microsoft.sqlserver.jdbc.SQLServerDriver";//DriverManager's class in DBService provider
       //these Field are Connection Component
       public static Statement command;
       public static Connection connection;


       //Load the DriverManager
       private static void LoadDM() throws ClassNotFoundException{
            try{
                 Class.forName(DMInfo);
            }catch(ClassNotFoundException e){
                 e.printStackTrace();
            }

       }


       //connect to the DataBase
       public static void InitSystem() throws SQLException{
               //Load the DriverManager
             try{
               LoadDM();
             }catch(ClassNotFoundException excep){
                 excep.printStackTrace();
             }
              //Load End


              try{
                    connection=DriverManager.getConnection(DBURL,userName,password);
                    command=connection.createStatement();

                }catch(SQLException e){
                    System.out.println("SYSTEM ERROR");
                    e.printStackTrace();
                }

       }

}

连接数据库之后,我们希望把user的各种信息显示到display.jsp

Session对象能够存储对象属性。并且直到浏览器窗口关闭,JSP内置对象Session一直存在,用于存储多页面跳转时的参数。


       ResultSet result=statement.executeQuery(sql);
       User[] userList=new user[listlength];
       int i;
       while(result.next()){

 userList[i].setAttribute (result.getString("fieldName"));
            //  ……
      }
//doPost/doGet方法中
  //现在你需要的对象列表存储在userList
         HttpSession session=request.getSession();

        session.setAttribute("list",userList);
   //跳转到display.jsp页面
         response.sendRedirect("display.jsp");

dispaly.jsp


         <%
         User[] userlist=(User[])session.getAttrbute("list");
       //do something "userlist"

      %>
      <%for(int i=0;i
      <p><%=user[i].username%>p>
      <p><%=user[i].password%>p>
      <%}%>

这些代码基本可以连成一条线了,读取数据的时候存成user(EJB)模式.

前台页面怎么传递数据到后台?

我喜欢的是用form表单提交给相应的servlet,然后在Servlet可以调用EJB进行存储

"example" method="post"> type="text" name="username"> type="submit" value="submit"/>

提交到example(servlet)中在servlet的doPost方法中,你就可以调用响应的EJB,把数据库存到数据库。

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
    /**这里的getParameter通过表单的name属性**/
    String username=request.getParameter("username");
    //do something
}

PLUS
通常提交表单之前,要通过JS做一些事情。JS和Java是无法进行直接数据交换的,需要通过HTML DOM元素。



<form id="user" name="userform" action="" method="">
   <button onclick="deal()">button>
form>
<script>
 var deal=function(){
     var userForm=document.getElementById("user");
     //do something
     userForm.submit();//此时提交表单

 }
script>

上述通过JS来提交表单,将把数据送到相应的Servlet,但是这不代表JS能够和后台沟通。而是因为JS发送了一个HTTP请求。HTTP请求在后台Servlet容器会调用相应的Servlet处理客户端浏览器请求。

虽然JS和Java无法进行值交换,但是,可以通过表单隐藏域,将数据提交给JS。

<input type="hidden" id="transmiss" value=<%=userlist[i].username%> >

<script>
var trans=document.getElementById("transmiss");
var text=trans.value;
script>

你可能感兴趣的:(JavaWeb网站用Servlet实现前后台交互)