j2ee学习
package net.meybo.mail;
import org.apache.log4j.Logger;
public class Log4jTest {
private static final Logger logger = (Logger) Logger.getLogger(Log4jTest.class.getName());
public static void main(String[] args) {
try {
String str = "3d";
logger.debug("str length:"+str.length());
int num = Integer.parseInt(str);
p(new Integer(num));
} catch (NumberFormatException e) {
logger.warn("字符串格式化错误!"+e);
logger.error("字符串格式化错误! error级别的!!!"+e.getMessage());
logger.info("系统初始化!");
}
}
public static void p(Object obj){
System.out.println(obj);
}
}
log4j.properties
log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.RollingFileAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%L) | %m%n
log4j.appender.stdout.MaxFileSize=30MB
log4j.appender.stdout.MaxBackupIndex=1
log4j.appender.stdout.file=E:\\output.log
一、Model
package Bank;
public class BankCustomer {
private String userName;
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
二、Controller
package Bank;
import java.io.IOException;
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 Controller extends HttpServlet {
private static final long serialVersionUID = 1L;
String next;
public Controller() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request,response);
}
public void init() throws ServletException {
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if(request.getParameter("command").equals("showarticle")){
Contribute command = new Contribute();
next = command.getAllArticle(request, response);
}
dispatcher(request,response,next);
}
protected void dispatcher(HttpServletRequest request,HttpServletResponse response,String page) throws ServletException, IOException {
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
三、util class
package Bank;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Contribute {
public Contribute() {
}
public String getAllArticle(HttpServletRequest request,
HttpServletResponse response) {
BankCustomer bc = new BankCustomer();
bc.setAge(3);
bc.setUserName("lunzi");
request.setAttribute("bc", bc);
return "/fristc.jsp";
}
}
四、View
toFrist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'frist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<a href="/DispatherServlet/servlet/Controller?command=showarticle">显示用户信息</a>
</body>
</html>
frist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'frist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<jsp:useBean id="bc" type="Bank.BankCustomer" scope="request"></jsp:useBean>
Customer Name:<jsp:getProperty name="bc" property="userName"/><br/>
Customer age:<jsp:getProperty name="bc" property="age"/>
</body>
</html>
一、DAO
package org.lunzi.dao.user;
import java.util.List;
import org.lunzi.util.page.PaginationSupport;
public interface UserDAO {
public int findUsersCount();
public List findUserList(int first,int pageSize);
public PaginationSupport getUserList(int startIndex,int pageSize);
}
二、Impl
package org.lunzi.dao.impl.user;
import java.util.List;
import org.hibernate.Query;
import org.lunzi.dao.base.BaseDAO;
import org.lunzi.dao.user.UserDAO;
import org.lunzi.util.page.PaginationSupport;
public class UserDAOImpl extends BaseDAO implements UserDAO {
public int findUsersCount() {
Integer count = (Integer) getSession().createQuery(
"select count(*) from User").uniqueResult();
return count.intValue();
}
public List findUserList(int first, int pageSize) {
return getSession()
.createQuery("select new org.lunzi.model.SearchUserModel(u.username) from User u ")
.setFirstResult(first).setMaxResults(pageSize).list();
}
public PaginationSupport getUserList(int startIndex, int pageSize) {
PaginationSupport pageSupport = new PaginationSupport();
pageSupport.setStartIndex(startIndex);
pageSupport.setCountOnEachPage(pageSize);
Query query = getSession().createQuery("from User u");
pageSupport.setTotalCount(findUsersCount());
query.setFirstResult(pageSupport.getStartIndex());
query.setMaxResults(pageSupport.getCountOnEachPage());
pageSupport.setItems(query.list());
return pageSupport;
}
}
三、ServiceImpl
package org.lunzi.service.impl.user;
import java.util.List;
import org.lunzi.dao.user.UserDAO;
import org.lunzi.service.user.UserService;
import org.lunzi.util.page.PaginationSupport;
public class UserServiceImpl implements UserService {
private UserDAO userDao;
public UserDAO getUserDao() {
return userDao;
}
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
public int findUsersCount() {
return userDao.findUsersCount();
}
public List findUserList(int first,int pageSize){
return userDao.findUserList(first, pageSize);
}
public PaginationSupport getUserList(int startIndex, int pageSize){
return userDao.getUserList(startIndex, pageSize);
}
}
四、spring上下文配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/bookstore">
</property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>org/lunzi/pojos/User.hbm.xml</value>
</list>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="userDao" class="org.lunzi.dao.impl.user.UserDAOImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="userDaoProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="userDao" />
</property>
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED, readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="userService"
class="org.lunzi.service.impl.user.UserServiceImpl">
<property name="userDao">
<ref bean="userDaoProxy" />
</property>
</bean>
</beans>
import java.sql.*;
public class ConnSqlServer2005 {
private Connection con;
private Statement stmt;
private ResultSet rs;
public ConnSqlServer2005() throws SQLException {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//1295
String url = "jdbc:sqlserver://localhost:1443;DatabaseName=test;user=sa;password=123456";
con = DriverManager.getConnection(url);
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String str = "select * from news";
rs = stmt.executeQuery(str);
while (rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
/* rs = stmt.executeQuery("select max(id) from news");
rs.next();
int maxId = rs.getInt(1);
maxId++;
System.out.println("maxId:"+maxId);
String insertSql = "insert into news(id,title,content)values("+maxId+",'新闻标题','新闻内容')";
boolean go = stmt.execute(insertSql);
System.out.println("go="+go);
*/
} catch (Exception e) {
e.printStackTrace();
}
if (con != null) {
con.close();
}
if (stmt != null) {
stmt.close();
}
if (rs != null) {
rs.close();
}
}
public static void main(String[] args) throws SQLException {
ConnSqlServer2005 conn2005 = new ConnSqlServer2005();
}
}
参考:http://www.mylinux.com.cn/bbsShowDetail.do?id=2,180
1、 安装
1.1、软件安装
首先要安装JDK(仅仅安装JRE是不行的,因为JSP页面需要编译),最新的正式版是JDK1.4.2。然后把JBoss的压缩包解压到一个目录下,目录名一般是"Jboss_版本号",JBoss目前的最新正式版是JBoss4.0.0(2004年9月20日发布)。下面的配置都是针对JBoss3.2.5。
1.2、环境变量的设置
需要的环境变量有JAVA_HOME和JBOSS_HOME。环境变量JAVA_HOME设置为刚才JDK的安装路径,JBOSS_HOME设置为刚才JBoss解压后的路径。设置方法如下:
在Windows2000中可以右键点我的电脑,选"属性"-> 选"高级"选项卡 -> 点击"环境变量"按钮 -> 点击系统变量的"新建"按钮,然后在对话框中输入"变量名"为"JAVA_HOME",变量值为JDK的安装路径,最后确定。同样的方法添加JBOSS_HOME。
1.3、运行
直接执行JBoss\bin目录下的run.bat批处理文件即可,启动时间从20秒到1分钟左右不等,视CPU速度和内存大小而定。
1.4、终止JBoss的运行
最好不要直接关闭运行JBoss时的控制台窗口,直接关闭控制台可能导致JBoss下次启动时出现异常。正常关闭JBoss的方法是另外打开一个控制台窗口,执行JBoss\bin目录下的shutdown.bat批处理文件,不过要带一个参数"-S",注意是大写字母。为了方便起见,也可以创建一个快捷方式。
1.5、把JBoss安装为Windows2000的系统服务
每次从控制台启动JBoss不是很方便,虽然调试程序时可以从控制台看到很多信息,但有的时候需要JBoss作为系统服务自动运行。这需要下载一个小工具JavaService.exe,到如下地址下载:
http://www.alexandriasc.com/software/JavaService/index.html
我已经下载了该工具。
2、 WAR文件的部署
JBoss支持热部署,也就是war文件部署到服务器上后不需要重新启动JBoss(Tomcat不支持这种特性)。war文件的部署很简单,直接将war文件拷贝到JBoss\server\default\deploy目录下即可。
JBoss支持热部署,也就是war文件部署到服务器上后不需要重新启动JBoss(Tomcat不支持这种特性)。war文件的部署很简单,直接将war文件拷贝到JBoss\server\default\deploy目录下即可。
3、 JBoss的目录结构
bin目录:改目录包含各种脚本文件以及相关文件,前面已经用过run.bat和shutdown.bat两个批处理文件。
client目录:存储配置信息和可能被Java客户端应用程序或外部Web容器用到的jar文件。
docs目录:保存在JBoss中引用到的XML文件和DTD文件(这里也提供了在JBoss中如何写配置文件的例子)。该目录下有针对不通的数据库(如MySql、Oracle、SQL Server、Postgres等)配置数据源的JCA配置文件。
lib目录:这里存储运行JBoss微内核所需的jar文件。该目录下不要存储任何你自己的jar文件。
server目录:这里的每一个子目录对应着一个服务器配置。该配置由运行脚本文件时的参数"-c <配置名称>"来确定。在server目录下有三个配置例子,即all、default和minimal,每一个配置安装的服务都不一样。其中default下是缺省配置。
minimal目录:仅加载启动JBoss所需的最少服务,如日志服务、JNDI和URL部署扫描器(发现新的部署),不包含Web容器、EJB和JMS。
all目录:启动所有的服务,包括RMI/IIOP、集群服务和Web服务部署器(默认配置不会被加载)。
启动JBoss时,如果run.bat不带任何参数,则使用的配置是server/default目录下的配置。如果要以其它目录下的配置启动JBoss,可以使用如下参数:
run -c all上述命令将以all目录下的配置信息启动JBoss。也可以在server目录下新建目录,按自己的需要写配置文件。
下面以default目录为例,介绍服务器配置的目录结构。
conf目录:该目录下有指定核心服务的jboss-service.xml文件,也可以放其它服务配置的文件。
data目录:该目录是JBoss内置的数据库Hypersonic存储数据的地方,也是JBossMQ(the JBoss implementation of JMS)存储相关信息的地方。
deploy目录:这是部署J2EE应用程序(jar、war和ear文件)的位置,只需将相应文件拷贝到该目录下即可。该目录也用来热部署服务和JCA资源适配器。已经有一些服务部署到这个目录了,如jmx-console,你启动JBoss后即可访问。JBoss会周期性的扫描deploy目录,当有任何组件改变,JBoss会重新部署该程序。
lib目录:存放服务器配置所需的jar文件,比如,你可以将JDBC驱动程序放在该目录下。
log目录:存放日志信息。JBoss使用Jakarta log4j包存储日志,在程序中你也可以直接使用该信息。
tmp目录:存储在部署过程中解压时产生的临时文件。
work目录:Tomcat编译JSP文件时的工作目录。
目录data、log、tmp和work在JBoss安装后并不存在,当JBoss运行时自动建立。
4、 JBoss中和数据库的连接这里所说的数据库连接是在JBoss中通过XML文件配置数据源,在程序中通过名字来访问数据库。从JBoss3.2.3之后的数据库连接配置比较简单,关于配置文件的书写在JBoss中针对不同的数据库有相应的例子,配置文件的例子在目录JBoss_HOME\docs\examples\jca下,如对MySql数据库的配置文件是mysql-ds.xml。只要针对数据库的具体情况修改该配置文件即可。修改完成之后,将配置文件拷贝到JBoss_HOME\server\default目录下。下面是一个设置MySql数据库为数据源的mysql-ds.xml配置文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlTest</jndi-name>
<connection-url>jdbc:mysql://127.0.0.1:3306/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password></password>
</local-tx-datasource>
</datasources>
另外,连接数据库所用到的JDBC驱动程序要拷贝到JBoss_HOME\server\default\lib目录下。
package com.netstar8.dao.test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.netstar8.pojos.tree.BaseNode;
public class XmlToJavaList {
static Document doc;// 声明xml文件
static List<BaseNode> tree = new ArrayList<BaseNode>();
public static void main(String[] args) {
executeXml2List();
}
private static void executeXml2List() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringComments(true);
dbf.setIgnoringElementContentWhitespace(true);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(new File("E:\\tree.xml"));
toTrans();
showNewTree();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void showNewTree() {
BaseNode node;
for(int m=0;m<tree.size();m++){
node = tree.get(m);
System.out.println("id:"+node.getId()+"\n");
}
}
private static void toTrans() {
BaseNode node;
NodeList tagNodes = doc.getElementsByTagName("item");
for (int i = 0; i < tagNodes.getLength(); i++) {
NamedNodeMap atts = tagNodes.item(i).getAttributes();
node = new BaseNode();
for(int l=0;l<atts.getLength();l++){
Node att = atts.item(l);
if(att.getNodeName().equals("id")){
node.setId(Long.parseLong(att.getNodeValue()));
}else if(att.getNodeName().equals("text")){
node.setName(att.getNodeValue());
}
System.out.println("atts"+l+":"+att.getNodeName()+"="+att.getNodeValue());
}
tree.add(node);
}
}
}
<tree id="0">
<item id="1" text="t2">
<item id="2" text="lb1" >
</item>
<item id="3" text="ts1" >
</item>
</item>
</tree>
import java.io.FileOutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public final class SessionListener implements HttpSessionActivationListener,
HttpSessionListener, ServletContextListener {
private static final long serialVersionUID =
ServletContext context;
int users = 0;
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occure
*/
public void init() throws ServletException {
// Put your code here
}
public void sessionCreated(HttpSessionEvent event) {
users++;
log("sessionCreated(" + event.getSession().getId() + "),目前有" + users
+ "个用户");
context.setAttribute("users", new Integer(users));
System.out.println("sessionCreated(" + event.getSession().getId()
+ "),目前有" + users + "个用户");
}
public void sessionDestroyed(HttpSessionEvent event) {
users--;
log("sessionDestroyed(" + event.getSession().getId() + "),目前有" + users
+ "个用户");
}
public void contextDestroyed(ServletContextEvent sce) {
log("contextDestroyed()-->ServletContext被销毁");
}
public void contextInitialized(ServletContextEvent sce) {
this.context = sce.getServletContext();
log("contextInitialized()-->ServletContext初始化了");
}
public void sessionDidActivate(HttpSessionEvent se) {
log("sessionDidActivate(" + se.getSession().getId() + ")");
}
public void sessionWillPassivate(HttpSessionEvent se) {
log("sessionWillPassivate(" + se.getSession().getId() + ")");
}
private
