ifanr2基于框架实现

ifanr2基于框架实现


       暑假实习项目,本来想做一个类似于爱范儿的科技新闻媒体网站,顺带着运用一下框架。因为框架本来就可以极大的提高开发效率,并且使开发简单化 模块化。

目录结构

  1. spring + hibernate +springMVC

  •         spring

           1.导入spring的相关包,和依赖包commons-logging.jar


           2.在web.xml中配置spring的监听

               
           
<!-- 引入spring -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	

           3.在applicationContext.xml中配置bean


<!-- spring注解扫描的包 -->
	<context:component-scan base-package="com.kanbujian" />

	
	<bean id="user" class="com.kanbujian.model.User"></bean>

	<bean id="author" class="com.kanbujian.model.Author"></bean>

	<bean id="tag" class="com.kanbujian.model.Tag"></bean>

	<bean id="news" class="com.kanbujian.model.News"></bean>

	<bean id="comment" class="com.kanbujian.model.Comment"></bean>
           

           4.依赖注入

 
<!-- User服务类和数据库处理类 -->
	<bean id="userDao" class="com.kanbujian.DAO.UserDAO">
		<property name="sessionFactory" ref="mySessionFactory"></property>
	</bean>

	<bean id="userService" class="com.kanbujian.service.UserService">
		<property name="userDao" ref="userDao"></property>
	</bean>



  •         Hibernate

              hibernate的配置实现直接集成在spring中,没有在单独的hihibernate.cfg.xml中

              1.在spring的applicationContext.xml中集成hibernate,创造数据库连接池,基于DBCP


<!-- 数据源配置 数据库连接信息 -->
	<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/ifanr" />
		<property name="username" value="root" />
		<property name="password" value="XXXXX" />
	</bean>
             
                 注意基于DBCP数据库连接池,除了需要导入hibernate的包之外,还需要导入Apache 的dbcp pool  collection    这几个包       

             2.在spring的applicationContext.xml创建sessionfactory


<!-- sessionFactory配置 -->
	<bean id="mySessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="myDataSource" />
		<property name="annotatedClasses">
			<list>
				<value>com.kanbujian.model.User</value>
				<value>com.kanbujian.model.News</value>
				<value>com.kanbujian.model.Tag</value>
				<value>com.kanbujian.model.Author</value>
				<value>com.kanbujian.model.Comment</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<value>
				hibernate.dialect=org.hibernate.dialect.MySQLDialect
				hibernate.hbm2ddl.auto=update
				<!-- update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行 -->
				hibernate.format_sql=true
				hibernate.show_sql=true
				hibernate.current_session_context_class=thread
			</value>
		</property>
	</bean>
	
                   
                   hibernate实体类基于注解实现,设置实体类的全限定包名,还有设置hibernate的属性
                         

                3.注解实体类

                  
                    使用注解,来映射实体类,例如User
                
package com.kanbujian.model;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="users")
public class User {
	private int UserId;
	private String Username;
	private String UserGender;
	private String UserMail;
	private String UserPassWord;
	
	@Id
	public int getUserId() {
		return UserId;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((UserPassWord == null) ? 0 : UserPassWord.hashCode());
		result = prime * result
				+ ((Username == null) ? 0 : Username.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (UserPassWord == null) {
			if (other.UserPassWord != null)
				return false;
		} else if (!UserPassWord.equals(other.UserPassWord))
			return false;
		if (Username == null) {
			if (other.Username != null)
				return false;
		} else if (!Username.equals(other.Username))
			return false;
		return true;
	}
	public void setUserId(int userId) {
		UserId = userId;
	}
	public String getUsername() {
		return Username;
	}
	public void setUsername(String username) {
		Username = username;
	}
	public String getUserGender() {
		return UserGender;
	}
	public void setUserGender(String userGender) {
		UserGender = userGender;
	}
	public String getUserMail() {
		return UserMail;
	}
	public void setUserMail(String userMail) {
		UserMail = userMail;
	}
	public String getUserPassWord() {
		return UserPassWord;
	}
	public void setUserPassWord(String userPassWord) {
		UserPassWord = userPassWord;
	}
	
}


                 4.操作数据库

                
                  下面就可以获取sessionFactory,进而获取session,完成对数据库的操作。例如UserDAO.java

<span style="font-family:Microsoft YaHei;">package com.kanbujian.DAO;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.kanbujian.model.User;

public class UserDAO {
	SessionFactory sessionFactory;
	Session session;
	
	public boolean checkLogin(User user){
   	 session=sessionFactory.getCurrentSession();
   	 
   	 List<User> list=list();
   	 boolean flag=list.contains(user);
   	
   	 return flag;
   	 
   	 
    }
	
	public List<User> list() {
		// TODO Auto-generated method stub
		session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		/* from User 后面跟的和类名对应,不是数据库中的表名*/
		List<User> result=(List<User>) session.createQuery("from User").list();
		
		/*list.contain() 与 hibernate中封装session.contains()的区别
		 * User u=new User();
		u.setUsername("jay");
		u.setUserPassWord("12345");
		System.out.println(result.contains(u));
		*/
	    System.out.println("User 数据库遍历成功!");
		session.getTransaction().commit();
		
	
		return result;
	}
	
	public User show(String username){
		/*session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		报could not initialize proxy - no Session异常, load生成的是代理对象
		//user u=(user)session.load(user.class,username);
		User u=(User)session.get(User.class,username);
		session.getTransaction().commit();
		
		return u;*/
		
		return getUserByUsername(username);
	}
	
	public User getUserByUsername(String username){
		List<User> li=list();
		User u=new User();
		
		Iterator<User> it=li.iterator();
		while(it.hasNext()){
			User temp=it.next();
			if(temp.getUsername().endsWith(username))
				return temp;
		}
		System.out.println("未根据用户名找到给定用户");
		return u;
	}
	
	public void add(User u){
		session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		session.save(u);
		session.getTransaction().commit();
	}
	
     public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	
}
</span>

                

  •         springmvc

        1.在web.xml中注册springmvc的拦截器

 <!-- 字符编码处理的过滤器 -->
   <filter>
        <filter-name>CharacterFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  

<!-- spring mvc 拦截器配置 -->
  <servlet>
	<servlet-name>dispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
	<servlet-name>dispatcher</servlet-name>
	<!-- <url-pattern>*.do</url-pattern>  扩展映射    以前缀”*.”开头的是用来做扩展映射的-->
	<!-- <url-pattern>/</url-pattern> 路径映射  以”/’开头和以”/*”结尾的是用来做路径映射的-->
	<!-- /   拦截所有的请求,包括静态文件 css js jpg等等 -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
   

            注意springmvc拦截器配置,servlet-name 中 dispatcher,则springmvc配置的文件名为 dispatcher-servlet.xml,默认位置为classpath,也就是WEB-INF文件夹


         2.diapatcher-servlet.xml的配置


<span style="font-family:Microsoft YaHei;"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
    <!--注解扫描  -->
	<context:component-scan base-package="com.kanbujian" />
    <!-- MVC 默认注册Handlermapping 和 viewResolver -->
	<mvc:annotation-driven/>
	
	 <!-- spring 内部同样可以实现对静态资源的访问 -->
    <!-- 注意 /** 表示文件包括子文件夹内的所有文件    ;location中以/结尾 -->
    <mvc:resources location="/images/" mapping="/images/**"/>	
    <mvc:resources location="/js/" mapping="/js/**"/>	
    <mvc:resources location="/css/" mapping="/css/**"/>	
    
    <!-- 映射页面路径  前缀 后缀   /WEB-INF/jsp/xxx.jsp -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
		
		
   	
     
     <!-- 全局异常处理,注入exceptionMappings属性,异常与处理页面映射 -->
	<bean
		class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<!-- 定义默认的异常处理页面 -->
		<property name="defaultErrorView" value="error" />
		<!-- 定义异常处理页面用来获取异常信息的变量名,如果不添加exceptionAttribute属性,则默认为exception -->
		<property name="exceptionAttribute" value="exception" />
		<!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页面名作为值 -->
		<property name="exceptionMappings">
			<props>
				<prop key="com.kanbujian.exception.UserException">error</prop>
				
			</props>
		</property>
	</bean>

</beans>
</span>

              3.     控制器的注解实现

               
              前端控制器,当接受到特定URL,将映射的页面返回到浏览器
               @Controller   控制器
               @RequestMapping   URL映射
               @PathVariable   路径参数

<span style="font-family:Microsoft YaHei;">package com.kanbujian.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.kanbujian.exception.UserException;
import com.kanbujian.model.User;
import com.kanbujian.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
    private static UserService us;

    public UserService getUs() {
		return us;
	}
    @Resource(name="userService")
	public void setUs(UserService us) {
		this.us = us;
	}
	
   /*  //展示用户信息
     
	
	 public String list(Model model){
		 List<User> Users=us.list();
		 Map<String,User> UserMap=new HashMap<String,User>();
		// model.addAttribute("Users",Users);
		 Iterator<User> it=Users.iterator();
		 while(it.hasNext()){
			 User u=it.next();
			 System.out.println(u.getUsername()+"  "+u.getUserPassWord());
			 UserMap.put(u.getUsername(), u);
		 }
	     //map形式 
		// model.addAttribute("UserMap", UserMap);
		 //直接list形式
		 model.addAttribute("UserMap", Users);
		 
		//--just for testing 测试addAllAttributes(list) jsp遍历-->
		 List<String> strList=new ArrayList<String>();
		 strList.add("hsuhsush1");
		 strList.add("shdushdiu2");
		 strList.add("ahsiasui3");
		 model.addAllAttributes(strList);
		 
		 model.addAttribute("PageTitle", "心系");
	
		 
    	 return "/User/list";
	 }
	
	 // 添加用户信息
	 
	@RequestMapping(value="/add",method=RequestMethod.GET)
	public String add(Model model){
		model.addAttribute("User1",new User());
		return "/User/add";
	}
	
	@RequestMapping(value="/add",method=RequestMethod.POST)
	public String add(@Validated User u,BindingResult br){
		if(br.hasErrors())
			return "redirect:/User/add";
		us.add(u);
		return "redirect:/User/Users";
		
	}*/
	
	/**
	 * 展示用户信息
	 * @param Username  用户名
	 * @param model
	 * @param session
	 * @return
	 */
	 
	@RequestMapping(value="/{Username}/show",method=RequestMethod.GET)
	public String show(@PathVariable String Username,Model model,HttpSession session){
		/*如果session中不存在登陆信息,则不允许进入用户信息查看页面,转到登陆页面*/
		if(session.getAttribute("LoginUser")==null){
			//System.out.println(session.getAttribute("LoginUser"));
			model.addAttribute("errorMessqge", "请您先登陆");			
			return "redirect:/login";
		}
		/*如果session存的LoginUser与Url中请求的用户名不相同,返回错误请求信息*/
		User u=(User)session.getAttribute("LoginUser");
		if(!u.getUsername().equals(Username)){
			throw new UserException("用户未登陆,无信息查看权限");
			
			/*return "redirect:/error";*/
		}
		User user=us.show(Username);
		model.addAttribute(user);
		model.addAttribute("PageTitile",user.getUsername());
		return "/user/show";		
		
	}
	@RequestMapping(value="/{Username}/show",method=RequestMethod.GET,params="json")
	public String show(@PathVariable String Username){
		
		return "/user/show";		
		
	}
	
	
	/* // 修改用户信息
	 
	@RequestMapping(value="/{Username}/update",method=RequestMethod.GET)
	public String update(@PathVariable String Username,Model model){
		model.addAttribute("User",new User());
		System.out.println("dao zhe mei ?");
		return "/User/update";
	}
	
	@RequestMapping(value="/{Username}/update",method=RequestMethod.POST)
	public String update(@Validated User u,BindingResult br,Model model){
		if(br.hasErrors())
				return "/User/update";
		us.update(u);
		
		return "redirect:/User/Users";
	}
	
	@RequestMapping(value="{Username}/delete",method=RequestMethod.GET)
	public String delete(@PathVariable String Username,Model model){
        us.delete(Username); 
        return "redirect:/User/Users";
	}
	*/
}</span>


               4.返回到特定jsp页面


<span style="font-family:Microsoft YaHei;"><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"   %>
<%@include file="inheader.jsp" %>
   

   
  <c:forEach items="${newsMap }" var="news">
      <div style="width:640px ;height:340px ;margin:20px auto;padding:20px 20px" >
         <div style="width:640px ;height:40px ;margin:10px auto;padding:5px 5px">
           <h3><a href="../news/${news.getNewsId().toString()}/detail">${news. getTitle()}</a></h3>          
         <div style="width:200px ;height:145px ;">
           <img alt=${news. getTitle()} src="../images/${news. getTitle()}.jpg">
         </div>
         
         <div style="width:400px ;height:145px ;position: relative; left: 210px;
          bottom: 145px;margin:0px 20px;">
          <p>${news.getContent() }</p>
          
         </div>
         
         </div>
         
    
      </div>
  </c:forEach>
  
  
    
<%@include file="infooter.jsp" %>    
  
  </span>


                       


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值