Allgemeine Anmerkungen zu SpringMVC
1. @Controller
In SpringMVC ist der Controller verantwortlich Zur Verarbeitung von Anforderungen, die von DispatcherServlet verteilt werden, werden die vom Benutzer angeforderten Daten nach der Verarbeitung durch die Geschäftsverarbeitungsschicht in ein Modell gekapselt und das Modell dann zur Anzeige an die entsprechende Ansicht zurückgegeben. SpringMVC bietet eine sehr einfache Möglichkeit, einen Controller zu definieren. Sie müssen keine bestimmte Klasse erben oder eine bestimmte Schnittstelle implementieren. Sie müssen lediglich @Controller verwenden, um eine Klasse als Controller zu markieren, und dann einige Anmerkungen wie @ verwenden. RequestMapping und @RequestParam, um die Zuordnung zwischen URL-Anfragen und Controller-Methoden zu definieren, damit die Außenwelt auf den Controller zugreifen kann. Darüber hinaus ist Controller nicht direkt von HttpServlet-Objekten wie HttpServletRequest und HttpServletResponse abhängig. Sie können flexibel über die Methodenparameter von Controller abgerufen werden.
@Controller wird zum Markieren einer Klasse verwendet, und die damit markierte Klasse ist ein SpringMVC-Controller-Objekt. Der Dispatch-Prozessor scannt die Methode der annotierten Klasse und erkennt, ob die Methode mit @RequestMapping annotiert ist. @Controller definiert lediglich eine Controller-Klasse, und die mit @RequestMapping annotierte Methode ist der Prozessor, der die Anforderung tatsächlich verarbeitet. Die bloße Verwendung der @Controller-Markierung für eine Klasse kann nicht wirklich sagen, dass es sich um eine Controller-Klasse von SpringMVC handelt, da Spring sie derzeit nicht erkennt. Wie nutzen Sie Spring, um es zu erkennen? Zu diesem Zeitpunkt müssen wir diese Controller-Klasse zur Verwaltung an Spring übergeben. Es gibt zwei Möglichkeiten:
(1) Definieren Sie das Bean-Objekt von MyController in der SpringMVC-Konfigurationsdatei.
(2) Teilen Sie Spring in der SpringMVC-Konfigurationsdatei mit, wo sich der mit @Controller gekennzeichnete Controller befindet.
<!--方式一--> <bean class="com.host.app.web.controller.MyController"/> <!--方式二--> < context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)
2. @RequestMapping
RequestMapping ist eine Annotation, die zur Verarbeitung der Anforderungsadressenzuordnung verwendet wird und für Klassen oder Methoden verwendet werden kann. Bei einer Klasse bedeutet dies, dass alle Methoden in der Klasse, die auf Anfragen antworten, diese Adresse als übergeordneten Pfad verwenden.
Die RequestMapping-Annotation hat sechs Attribute. Nachfolgend unterteilen wir sie zur Erläuterung in drei Kategorien (entsprechende Beispiele finden Sie weiter unten).
1. Wert, Methode;
Wert: Geben Sie die tatsächliche Adresse der Anfrage an (wird später erläutert). : Geben Sie den Typ der Anforderungsmethode, GET, POST, PUT, DELETE usw. an , wie application/json , text/html;
erzeugt: Gibt den zurückzugebenden Inhaltstyp an. Er wird nur zurückgegeben, wenn der (Accept)-Typ im Anforderungsheader den angegebenen Typ enthält
3. Parameter, HeaderParameter: Geben Sie an, dass die Anfrage bestimmte Parameterwerte enthalten muss, bevor diese Methode sie verarbeiten kann. Header: Die angegebene Anfrage muss bestimmte angegebene Header-Werte enthalten, damit diese Methode die Anfrage verarbeiten kann.3. @Resource und @Autowired
@Resource und @Autowired werden beide für die Bean-Injection verwendet Das Paket ist javax.annotation.Resource und muss importiert werden, aber Spring unterstützt die Injektion dieser Annotation. 1. Gemeinsame PunkteBeide können auf Felder und Setter-Methoden geschrieben werden. Wenn beide in die Felder geschrieben werden, besteht keine Notwendigkeit, Setter-Methoden zu schreiben.
2. Unterschiede (1) @Autowired@Autowired ist eine von Spring bereitgestellte Annotation und muss das Paket org.springframework.beans.factory.annotation importieren. Autowired; Nur nach byType injizieren.public class TestServiceImpl { // 下面两种@Autowired只要使用一种即可 @Autowired private UserDao userDao; // 用于字段上 @Autowired public void setUserDao(UserDao userDao) { // 用于属性的方法上 this.userDao = userDao; } }Die Annotation @Autowired setzt abhängige Objekte nach Typ (byType) zusammen. Standardmäßig muss das abhängige Objekt vorhanden sein. Wenn Nullwerte zulässig sind, kann sein erforderliches Attribut auf false gesetzt werden. Wenn wir nach Namen (byName) assemblieren möchten, können wir ihn in Verbindung mit der Annotation @Qualifier verwenden. Wie folgt:
public class TestServiceImpl { @Autowired @Qualifier("userDao") private UserDao userDao; }(2) @Resource@Resource wird standardmäßig automatisch von ByName injiziert, von J2EE bereitgestellt und muss das Paket javax.annotation.Resource importieren. @Resource verfügt über zwei wichtige Attribute: Name und Typ. Spring löst das Namensattribut der @Resource-Annotation in den Namen der Bean auf, und das Typattribut löst sich in den Typ der Bean auf. Wenn daher das Namensattribut verwendet wird, wird die automatische Injektionsstrategie byName verwendet, und wenn das Typattribut verwendet wird, wird die automatische Injektionsstrategie byType verwendet. Wenn weder der Name noch das Typattribut angegeben sind, wird die automatische Injektionsstrategie byName über den Reflexionsmechanismus verwendet.
public class TestServiceImpl { // 下面两种@Resource只要使用一种即可 @Resource(name="userDao") private UserDao userDao; // 用于字段上 @Resource(name="userDao") public void setUserDao(UserDao userDao) { // 用于属性的setter方法上 this.userDao = userDao; } }
Hinweis: Es ist am besten, @Resource auf die Setter-Methode zu setzen, da dies eher dem objektorientierten Denken entspricht und Attribute über Set und Get verwaltet, anstatt Attribute direkt zu bearbeiten.
@Resource-Assembly-Sequenz: ① Wenn Name und Typ gleichzeitig angegeben werden, wird die einzige passende Bean aus dem Spring-Kontext für die Assemblierung gefunden gefunden, wird eine Ausnahme ausgelöst.③ Wenn der Typ angegeben ist, wird eine ähnliche passende eindeutige Bean aus dem Kontext für die Assemblierung gefunden. Wenn keine oder mehr als eine Bean gefunden wird, wird eine Ausnahme ausgelöst.② Wenn der Name angegeben ist, wird die Bean, die dem Namen (ID) entspricht, aus dem Kontext für die Assembly gesucht. Wenn sie nicht gefunden wird, wird eine Ausnahme ausgelöst.
④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。
@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。
4、@ModelAttribute和 @SessionAttributes
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
@SessionAttributes即将值放到session作用域中,写在class上面。
具体示例参见下面:使用 @ModelAttribute 和 @SessionAttributes 传递和保存数据
5、@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:
@Controller public class TestController { @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET) public String getLogin(@PathVariable("userId") String userId, @PathVariable("roleId") String roleId){ System.out.println("User Id : " + userId); System.out.println("Role Id : " + roleId); return "hello"; } @RequestMapping(value="/product/{productId}",method = RequestMethod.GET) public String getProduct(@PathVariable("productId") String productId){ System.out.println("Product Id : " + productId); return "hello"; } @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}", method = RequestMethod.GET) public String getRegExp(@PathVariable("regexp1") String regexp1){ System.out.println("URI Part 1 : " + regexp1); return "hello"; } }
6、@requestParam
@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
7、@ResponseBody
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
8、@Component
相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。
9、@Repository
用于注解dao层,在daoImpl类上面注解。
推荐教程:《Java教程》
Das obige ist der detaillierte Inhalt vonAllgemeine Anmerkungen zu SpringMVC. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!