现在很多网站都用框架开发,不过为了奠定基础,我在这里记录下在没有框架的条件下进行网站开发的总结.
基本框架:
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)
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(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>