学的时候不记得记录,考完试了回来能想到多少是多少把。。。。
代码不能直接复制运行,要增删改一些东西,为了方便记忆,整合,将好几个同类项目的知识点放在了一起
目录
Servlet
web.xml
使用servlet技术。在Web项目的 web.xml中创建一个servlet,并指定使用该servlet的url模式;
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<!-- 类名 -->
<servlet-name>Student</servlet-name>
<!-- 所在的包 -->
<servlet-class>com.mucfc.chapter0.Student</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Student</servlet-name>
<!-- 访问的网址 -->
<url-pattern>/servlet/Student</url-pattern>
</servlet-mapping>
</web-app>
Servlet有哪些接口
Javax.servlet包
Servletconfig,servletcontent,requestdispatcher,servletrequest,servletresponse,servlet接口
Genericservlet类
Javax.servlet.http包
Httpservletresponse,httpservletrequest接口
Httpservlet类
Servlet 的生命周期
1加载和实例化 当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。
2初始化:执行init方法,只执行一次
实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。
3提供服务:初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。
4被销毁:当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。
最简单显示姓名
创建dynamic web project项目
配置web.xml文件
创建一个servlet,类名为Student.java
重写doGet方法
package com.mucfc.chapter0;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Student")
public class Student extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Student() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("HelloStudent I am Servlet");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
通过get方法获取姓名
// TODO Auto-generated method stub
String clientName=request.getParameter("clientName");
if(clientName!=null)
//字符编码转换
clientName=new String(clientName.getBytes("ISO-8859-1"),"GB2312");
else
clientName="我的朋友";
String title="HelloServlet";
//设置响应正文的类型
response.setContentType("text/html");
//生成HTML正文
PrintWriter out = response.getWriter();
out.print("<HTML><HEAD><TITLE>"+title+"</TITLE>");
out.print("</HEAD><BODY>");
out.println("<h1><P> "+clientName+" : 您好</h1>");
out.print("</BODY></HTML>");
//关闭输出流
out.close();
运行http://localhost:8080/ServletLeaningChapter0/servlet/HelloWorld
struts
jar包
使用Struts2技术,在网页中显示你的姓名
配置过滤器
配置Struts的过滤器之后,Struts才会对用户请求做出响应
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>StructsFight</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<absolute-ordering />
</web-app>
- 使用Struts2技术。在Struts配置文件Struts.xml中,定义一个action,实现如果返回结果是success,则加载success.jsp;否则加载loginFail.jsp。
- 使用Struts2技术。创建一个与action对应的类UserAction.java。类有两个属性username和password。实现功能:如果username=password,返回SUCCESS,否则返回FAIL。
创建dynamic web project项目
修改配置文件web.xml,配置struts过滤器
创建struts.xml,配置action
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd" >
<struts>
<package name="show" extends="struts-default">
<action name="show" class="com.action.UserAction" method="execute">
<result name="success">success.jsp</result>
<result name=”fail”>loginFail.jsp</result>
</action>
</package>
</struts>
创建action对应的java类,配置属性和方法
package com.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
HttpServletRequest request=ServletActionContext.getRequest();
String username=request.getParameter("username");
String password=request.getParameter("password");
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception{
String strReturn;
if(this.username.equals(this.password)){
strReturn="success";
}else{
strReturn="fail";
}
return strReturn;
}
}
创建jsp文件
Login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆界面</title>
</head>
<body>
<center>
${tip}
<form action="show.action" method="post">
<table>
<tr>
<td>请输入学号:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>请输入姓名:</td>
<td><input type="text" name="password"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录"/></td>
</tr>
</table>
</form>
</center>
</body>
</html>
Show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.action.UserAction"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示界面</title>
</head>
<body>
学号:<%UserAction act=new UserAction();%>
<%=act.getUsername() %><%; %>
姓名: <%=act.getPassword() %><%; %>
</body>
</html>
运行
mybatis
创建maven项目,当初就因为建错项目搞了好久好久,代码一点问题都没有,就是不能运行
使用mybatis技术。数据库有表user(userid intger,name varchar2(22))。创建表user对应的类;
package mb.mb.pojo;
public class Emp {
private int id;
private String first_name;
private int salary;
@Override
public String toString() {
return "emp{" +
"id='" + id + '\'' +
", first_name='" + first_name + '\'' +
", salary='" + salary + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
- 使用mybatis技术。数据库有表user(userid intger,name varchar2(22))。在user对应的映射文件中,并编写按userid查询用户的功能,和插入一条记录的功能。
Usermapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mb.mb.dao.EmpMapper">
<select id="selectEmp" resultType="mb.mb.pojo.Emp">
select * from emp where salary > #{salary}
</select>
<insert id=”insertuser” keyproperty=”userid” usegeneratedkeys=”true”>
Insert into users values(#{userid},#{username})
</insert>
</mapper>
- 使用mybatis技术。创建一个测试程序,从数据库的user表中查询一条记录。
表user对应的POJO类USER和映射文件userMapper已存在。映射文件中已编写:
Test.java
package mb.mb.test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import mb.mb.dao.EmpMapper;
import mb.mb.pojo.Emp;
import java.io.InputStream;
import java.util.List;
public class mybatisTest {
public static void main(String[] args) throws Exception {
// 指定全局配置文件
String resource = "mybatis-config.xml";
// 读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 构建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
System.out.println(empMapper.getClass());
empMapper.Insertuser(“”);
sqlSession.commit();
// 返回值为List
List<Emp> list = empMapper.selectEmp(5000);
for (Emp emp : list) {
System.out.println(emp);
}
} finally {
sqlSession.close();
}
}
}
- 使用mybatis技术。数据库有表user(userid intger,name varchar2(22))。创建user表对应的JAVA类、映射文件和配置文件
Userdao.java
package mb.mb.dao;
import java.util.List;
import mb.mb.pojo.Emp;
public interface EmpMapper {
public List<Emp> selectEmp(Integer i);
Public void insertuser(int userid,String name);
}
- 使用mybatis技术。数据库有表user(userid intger,name varchar2(22))。表user对应的映射文件、java类和配置文件已完成。创建一个测试程序,完成对表插入一条记录。
创建maven project
配置pom.xml
配置mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/my_student" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mb/mb/mapper/empMapper.xml"/>
</mappers>
</configuration>
创建实体类文件
创建实体类对应的映射文件
创建映射器类文件
创建test文件
hibernate
https://www.cnblogs.com/mq0036/p/8522150.html
- 使用hibernate技术。数据库有表user(userid intger,name varchar2(22))。创建user表对应的类、映射文件和配置文件
Hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/my_student</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/entity/Emp.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Hibernate.reveng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
<table-filter match-catalog="my_student" match-name="Emp"/>
</hibernate-reverse-engineering>
- 使用hibernate技术。数据库有表user(userid intger,name varchar2(22))。表user对应的映射文件、java类和配置文件已完成。创建一个测试程序,完成对表插入一条记录。
User.hbm.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generated by Hibernate Tools 5.2.12.Final -->
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class catalog="my_student" name="com.entity.Emp" table="emp">
<id name="id" type="java.lang.Integer">
<column name="id"/>
<generator class="identity"/>
</id>
<property name="firstName" type="string" >
<column length="22" name="first_name"/>
</property>
<property name="salary" type="java.lang.Integer">
<column name="salary"/>
</property>
</class>
</hibernate-mapping>
- 使用hibernate技术。数据库有表user(userid intger,name varchar2(22))。表user对应的映射文件、java类和配置文件已完成。创建一个测试程序,从表中查询一条记录,插入、删除、修改一个记录,
创建maven project
配置hibernate.cfg.xml
配置hibernate.reveng.xml
创建实体类
创建实体类对应的映射
创建test文件
package com.entity;
import java.util.Iterator;
import java.util.List;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1. SessionFectory
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//2. Session
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// Configuration cfg = new Configuration();
// cfg.configure();
//
// @SuppressWarnings("deprecation")
// SessionFactory sf = cfg.buildSessionFactory();
//
// Session s = sf.openSession();
//
// Transaction tx = s.beginTransaction();
// Emp emp = new Emp();
// emp.setId(1007);
// emp.setFirstName("tom");
// emp.setSalary(2000);
//
// session.save(emp);
//
//
//
// User user=new User();
// User.setUserid(“”);
// User.setusername(“”);
// ss.save(user);
// User user=ss.get(user.class,1);
// User.setname(“”);
// ss.update(user);
// User user=ss.get(user.class,1);
// ss.delete(user);
// Ts.commit();
Query query = session.createQuery("from Emp where salary > ? ");
query.setParameter(0, 5000);
List<Emp> list = query.list();
Iterator its=list.iterator();
while(its.hasNext()){
Emp user=(Emp)its.next();
System.out.println(user.getId()+" "+user.getFirstName()+" "+user.getSalary());
}
transaction.commit();
session.close();
sessionFactory.close();
}
}
springmvc
简易
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>springMVC1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>springMVC</servlet-name>
<!-- 请求触发器 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!-- 提前启动 -->
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
<!-- 或*.action -->
</servlet-mapping>
<!-- 解决springMVC的post乱码 -->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
springMVC-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置controller层路径扫描 com.qfedu.springmvc.controller -->
<context:component-scan base-package="com.qfedu.springmvc.controller"></context:component-scan>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
cotroller类
package com.qfedu.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorld {
//在tomcat输入的地址
@RequestMapping("/hello")
public String helloworld() {
System.out.println("hello world");
//根据返回的视图名字找到相应的jsp页面进行跳转
return "hello";
}
}
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>我的第一个springMVC哦!</h1>
</body>
运行
复杂
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>springaaaa</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<!-- 在web.xml中配置SpringMVC的前端控制器 -->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--指定SpringMVC的配置文件-->
<!--SpringMVC的配置文件的默认路径是/WEB-INF/${servlet-name}-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--设置所有以*.action结尾的请求进入SpringMVC-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
controller类StudentController.java
package com.qfedu.springmvc.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.qfedu.springmvc.pojo.Student;
@Controller
public class StudentController {
@RequestMapping("itemList")
public ModelAndView itemList() {
ModelAndView mav=new ModelAndView();
List<Student> itemList=new ArrayList<Student>();
itemList.add(new Student(1001, "你好"));
//设置视图名称
mav.setViewName("WEB-INF/jsp/itemList.jsp");
//设置商品数据
mav.addObject("itemList",itemList);
return mav;
}
}
Student.java
package com.qfedu.springmvc.pojo;
public class Student {
private String name;
private Integer id;
public Student(int id, String name) {
this.id=id;
this.name=name;
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/queryItem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td><input type="submit" value="查询"/></td>
</tr>
</table>
学生列表:
<table width="100%" border=1>
<tr>
<td>学生学号</td>
<td>学生姓名</td>
</tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td>${item.id }</td>
<td>${item.name }</td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>
</form>
</body>
</html>
还没做完,跟着这位博主做的
https://blog.csdn.net/qq_43674132/article/details/90348948#SpringMVC_2springmvc_4
解释ORM思想的主要内容
对象关系映射。将关系数据库中表记录映射到对象中,以对象形式展现。程序员把对数据库的操作转为对对象的操作。
解释IOC思想的主要内容
控制反转。将设计好的对象交给容器控制而不是直接在对象内部操作。
我们通过IOC将这些相互依赖对象的创建、协调工作交给spring容器去处理,每个对象只需要关注其自身的业务逻辑关系就可以了。在这样的角度上来看,获得依赖的对象的方式,进行了反转,变成了由spring容器控制对象如何获取外部资源
解释AOP思想的主要内容
面向切面编程。在一系列纵向控制流程中,将相同子流程提取为一个横向的面。
aop就是用来封装与业务逻辑无关的代码隐式调用,从而使得业务逻辑能重用。
核心思想:是将业务逻辑中与类不相关的通用功能切面式的提取分离出来,让多个类共享一个行为,一旦这个行为发生改变,不必修改类,而只需要修改这个行为即可。
Java中POJO类的主要特点
实体类,无业务逻辑,属性,setget方法
给出5个组件模型
Javabeans组件模型,.NET模型,corba模型,com+模型,EJB模型
组件接口有哪些不兼容类型?如何解决?
操作不兼容,操作不完善,参数不兼容
编写适配器组件,使可复用组件接口一致
CBSE的设计原则
基于组件的软件工程
设计原则
组件式独立,彼此互不影响
组件细节实现隐藏
组件平台共享,减少开发成本
组件通过良好定义接口实现交互
描述mybatis的运行机制
读取Mybatis-config.xml配置文件,根据配置文件中的属性组装configuration对象
Sqlsessionfactorybuilder生成sqlsessionfactory
生成sqlsession
Sql语句
描述hibernate的运行机制
读取并解析配置文件,
读取并解析映射文件,创建sessionfactory
打开session
创建事务
持久性操作
提交事务
描述Struts2的运行机制
客户端发出http请求
根据web.xml配置,被filterdispatcher接受
根据struts.xml文件,找到需要调用的action属性和操作
根据action业务逻辑,找到对应的返回结果
跳转到结果对应页面,返回响应给客户端
描述servlet的运行机制
第一次调用,服务器自动创建一个servlet实例并运行
被实例化,启动一个新线程运行
①客户端向服务器端发出请求;
②这个过程比较重要,这时Tomcat会创建两个对象:HttpServletResponse和HttpServletRequest。并将它们的引用(注意是引用)传给刚分配的线程;
③线程开始着手接洽servlet;
④servlet根据传来的是GET和POST,分别调用doGet()和doPost()方法进行处理;
⑤和⑥servlet将处理后的结果通过线程传回Tomcat,并在之后将这个线程销毁或者送还线程池;
⑦Tomcat将处理后的结果变成一个HTTP响应发送回客户端,这样,客户端就可以接受到处理后的结果了。
描述springMVC的运行机制
用户请求到前端控制器dispatcherservlet
dispatcherservlet调用处理映射器handlermapping
handlermapping根据请求调用具体处理 器,生成处理器执行链handlerexecutionchain,返回dispatcherservlet
dispatcherservlet根据Handler获取适配器handleradapter
handleradapter调用handler
handleradapter返回modelandview给dispatcherservlet
handler返回modelandview给dispatcherservlet
dispatcherservlet将收到的给Viewresolver视图解析器解析
Viewresolver返回view
渲染view