ifanr2基于框架实现

来源:互联网 发布:linux下复制粘贴命令 编辑:程序博客网 时间:2024/05/21 22:49

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.MySQLDialecthibernate.hbm2ddl.auto=update<!-- update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行 -->hibernate.format_sql=truehibernate.show_sql=truehibernate.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;@Idpublic int getUserId() {return UserId;}@Overridepublic 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;}@Overridepublic 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 stubsession=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.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://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属性,异常与处理页面映射 --><beanclass="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>


                       


0 0
原创粉丝点击