mvc

来源:互联网 发布:python中统计字符串 编辑:程序博客网 时间:2024/05/29 18:04
一、mvc的作用:mvc是一种思想,用来解决,大型项目中,代码层次不清,耦合度过高,不易扩张的问题。
mvc分别指什么:m指模型层,v值视图层,c指控制层
mvc的执行流程:
1.浏览器发出请求
2.被控制器中的核心控制器dispatchservlet拦截到,拦截到后被handleMapping对请求进行处理,将请求分发给不同的Cotrolller

3.controller执行后,返会一个modelandview(存储数据)。这里面包含了3个参数:将要跳往的页面;数据的key;数据的value。

4.当modelAndview返回到控制器时,控制器不能直接解析modelandview的数据。需要调用一个视图解析器进行解析,结合前缀加后缀的方式,返回到相应的界面。

二、通过spring执行登录方式——纯用xml配置,非注解
1.新建工程
2.导包。需要核心包。spring web包如果需要jdbctemplate操作数据库,好需要导入持久化包
3.在web.xml文件总配置dispatchservlet
4.1在rsc/applicationContext.xml下配置handleMapping
<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
abstract="false" lazy-init="default" autowire="default">
<property name="mappings"  ref="urlMapping"></property>
</bean>
4.2配置控制器
<util:properties id="urlMapping">
<prop key="/login.html">loginControll</prop>
<prop key="/regist.html">registControll</prop>
<prop key="/userList.html">userListControll</prop>
</util:properties>


<bean id="loginControll" class="com.eduask.smc.login1.controller.LoginController">
<constructor-arg index="0"  ref="userService">
</constructor-arg>
</bean>
<bean id="registControll" class="com.eduask.smc.login1.controller.RegisetController"/>
<bean id="userListControll" class="com.eduask.smc.login1.controller.UserListController"/>

<bean id="userService" class="com.eduask.smc.login1.serviceimpl.UserServiceImpl"/>
5.写控制层
注意点:在new实例时或属性注入时,可以采取3中方式进行属性的注入
1.使用属性setter方法注入
举例:public class UserServiceImplBySetter implements UserService   
{   
    private PersonDao personDao;   
       
    public void show()   
    {   
        personDao.show();   
    }   
    public PersonDao getPersonDao()   
    {   
        return personDao;   
    }   
    public void setPersonDao(PersonDao personDao)   
    {   
        this.personDao = personDao;   
    }   
}  
2.使用构造器注入
public class UserServiceImplConstructor implements UserService   
{   
    private PersonDao personDao;   
    private String name;   
    public UserServiceImplConstructor(PersonDao personDao, String name)   
    {   
        this.personDao = personDao;   
        this.name = name;   
    }   
  
    public void show()   
    {   
        personDao.show();   
        System.out.println("name属性:"+name);   
    }   
}  
在applicationcontext。xml中对应的控制器bean注入中添加
<constructor-arg index="0"  ref="userService">
</constructor-arg>
另外
<bean id="userService" class="com.eduask.smc.login1.serviceimpl.UserServiceImpl"/>
3.使用注解方式注入
6:去写服务


7:去写领域对象




8:去写dao


三、通过spring执行登录方式——纯注解
1:新建工程
2:导包 核心包,web包以及 如果需要spring 的jdbcTemplate,c3p0,bdcp还需要导入持久化包



3:在xml文件中配置DispatchServlet




4:在web-inf文件夹下添加一个和web.xml中的DispatchServlet名称一样的spring配置文件
DispatchServlet名称-servlet.xml




5:在4中的文件里面添加视图解析器




6:在spring的配置文件下添加<mvc:annotation-driven></mvc:annotation-driven>//替代handleMapping
7:添加自动扫包
8.添加控制器
9.写页面

四、从表单中将值传入到控制器中有3中方法
1:用HttpServletRequest re
re.getParameter("name");
2.通过@RequestParam("pass") String password  
这种情况要发生在表单中的name属性命名和控制器中方法的形参不一样

3:通过bean
要注意bean的属性要和表单中的name属性一样。

五、控制器将值传递到jsp页面中
1.直接使用HttpServletRequest
@RequestMapping("login.html")
public String login1(HttpServletRequest req,
HttpServletResponse res) throws Exception {
//拿到传过来的用户名和密码
String name=req.getParameter("name");
String pass=req.getParameter("pass");
System.out.println("name===>"+name+"pass==>"+pass);
//调用登录方法
User user=userService.login(name, pass);
String tiget="";
if(user!=null){
req.setAttribute("user", user);
tiget="success";
}else{
tiget="failed";
}
return tiget;
}
值在request作用域

2.直接使用session
和以上一样,只是在req。getSession().setAttribute("user",user);

3.使用modelAndview
public ModelAndView login3(String name,String pass){
User user=userService.login(name, pass);
ModelAndView mv=null;
if(user!=null){
mv=new ModelAndView("success","user",user);
}else{
mv=new ModelAndView("failed");
}
return mv;
}
值的作用范围是request

4.使用modelmap
public String login4(String name,String pass,ModelMap modelMap) throws Exception {
//调用登录方法s
User user=userService.login(name, pass);
String tiget="";
if(user!=null){
modelMap.addAttribute("user", user);
tiget="success";
}else{
tiget="failed";
}
return tiget;
}

4:使用@ModelAttribute——这种方式直接返回相应的页面,不用检验和判断
@RequestMapping("login5.html")
public String login5(@ModelAttribute("user")User user) throws Exception {
String tiget="";
tiget="success";
return tiget;
}

六、中文乱码
提交方式:get
1.在servlet.xml中找到
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
//添加——UrIEncoding="utf-8"/>

2:先拿到ISO8859-1编码的string将其转换成字节码,在通过String 的String(byte[] bytes, Charset charset) 构造方法重新得到一个UTF-8或者gbk,gb2312编码的String

提交方式:post
1:在代码中通过 req.setCharacterEncoding("utf-8");


2:写一个过滤器
在web工程里新建一个class,实现implements Filter,重写doFilter()、destroy()、init()三个方法
然后,在web.xml中配置
 <filter>
        <filter-name>dofilter</filter-name>
        <filter-class>com.eduask.test.DoCharsetFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>dofilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.用spring帮我提供的过滤器,只需要在web.xml文件中配置就好
<filter>
  <filter-name>chineseFilter</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>chineseFilter</filter-name>
  <url-pattern>*</url-pattern>
</filter-mapping>
  
七、spring如何实现重定向
A:使用redirect前缀
a:当控制器的方法是返回String类型的时候使用该方法
如:tig="redirect:list.html";


B:使用RedirectView
当控制器返回一个ModelAndView类型的时候使用该方法
RedirectView re=new RedirectView("list.html");
mv=new ModelAndView(re);


八、spring拦截器
1.定义一个类 实现HandlerInterceptor并实现他的方法
2.在spring配置文件中配置
//自定义拦截请求配置
<mvc:interceptors>
<mvc:interceptor>
//将被拦截的请求
<mvc:mapping path="/login2.html"/>
//不被拦截的请求
<mvc:exculde-mapping path=""/>
<bean class="com.eduask.smc.login1.controller.MyInter"/>
</mvc:interceptor>
</mvc:interceptors>


















0 0
原创粉丝点击