J2EE
J2EE API包含以下几个部分:
Jsp(java server page)接口:优秀的jsp接口易于维护,不负责业务逻辑的处理(可以交给JavaBean和ejb完成)
JNDI(java naming and directory interface)接口:为访问目录服务提供支持
还有[/size]Java事务接口(jta),数据库连接(jdbc api),远程方法调用(rmi),消息服务接口(jms)
这些API和3层架构的关系如下图:
在myeclipse中建立一个web工程MVCFirst。
模型层
/*
*@(#){file_name} Aug 3, 2010
*
*Copyright 2010 Zhoujunmei.
*/
package javabean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class User {
private String userName;
private String userAddress;
private String userSex;
private Connection conn;
private static final String SQL = "select username,usersex,useraddress from user where username=?";
public User() { // 构造函数进行jdbc数据库连接
try {
Class.forName("org.gjt.mm.mysql.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/login", "root", "root");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void getDBUser(String userName) {
PreparedStatement selectQuery = null;
try {
selectQuery = conn.prepareStatement(SQL);
selectQuery.setString(1, userName);
ResultSet rs = selectQuery.executeQuery();
while (rs.next()) {
this.setUserName(rs.getString("username"));
this.setUserSex(rs.getString("usersex"));
this.setUserAddress(rs.getString("useraddress"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
}
使用的是mysql数据库,需要导入数据库驱动包,mysql中建立一个login数据库,建立user数据表
用户输入界面的jsp代码:Usernameinput.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"
pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>username input</title>
</head>
<body bgcolor="#ffffff">
<!-- 我们约定本页面将用户输入提交的action所指定的servlet中去,这里就是视图和控制器交互的所在 -->
<form method="post" action="UserServlet" name="form1">
<br>
Username:
<br>
<input type="text" size="24" name="username" value="">
<p>
<input type="submit" value="提交" name="submit">
<input type="reset" value="重置" name="reset">
</form>
</body>
</html>
返回信息的界面jsp代码:Usernameresult.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"
pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>username result</title>
</head>
<body bgcolor="#ffffff">
<!-- 接收控制器层的返回信息,在servlet控制器中的定义3个返回信息会以userName,userSex标识 -->
<h1>username:</h1><%=request.getAttribute("userName") %>
<h2>usersex:</h2><%=request.getAttribute("userSex") %>
<h3>useraddress:</h3><%=request.getAttribute("userAddress") %>
</body>
</html>
控制器代码:
在myeclipse中新建一个servlet,doPost和doGet代码如下:
doPost和doGet根本区别是doGet请求时url会包含传入的参数
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javabean.User;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public UserServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// <input type="text" size="24" name="username" value="">
String username = request.getParameter("username"); //取得视图层的表单输入的username
User user = new User();
user.getDBUser(username); //调用 模型层的业务逻辑方法
//将得到的信息放在request的attribute中以userName,。。来标识
request.setAttribute("userName", user.getUserName());
request.setAttribute("userSex", user.getUserSex());
request.setAttribute("userAddress", user.getUserAddress());
String nextpage ="/usernameresult.jsp";
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(nextpage);
dispatcher.forward(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
建完servlet后在web.xml会自动配置所见的servlet,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 建立servlet类后自动配置的 -->
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UserServlet</servlet-name>
<servlet-class>servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
</web-app>
执行结果:
启动Tomcat,在地址栏输入:
http://localhost:8080/MVCFirst/usernameinput.jsp,输入数据库中已有的用户名,就会跳转到usernameresult.jsp页面