사상 최 강 SpringMVC 상세 예시 실전 강좌(그림)
24374 단어 SpringMVC
1.우선 SpringMVC 에 필요 한 jar 가방 을 가 져 옵 니 다.
2.웹.xml 프로필 에 SpringMVC 설정 추가
<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->
<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>
</servlet-mapping>
3.src 에 springmvc-servlet.xml 프로필 추가
<?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"
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-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- scan the package and the sub package -->
<context:component-scan base-package="test.SpringMVC"/>
<!-- don't handle the static resource -->
<mvc:default-servlet-handler />
<!-- if you use annotation you must configure following setting -->
<mvc:annotation-driven />
<!-- configure the InternalResourceViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
4.WEB-INF 폴 더 아래 jsp 라 는 폴 더 를 만들어 jsp 보 기 를 저장 합 니 다.hello.jsp 를 만 들 고 body 에'Hello World'를 추가 합 니 다.5.가방 및 컨트롤 러 를 만 드 는 것 은 다음 과 같다.
6.컨트롤 러 코드 작성
@Controller
@RequestMapping("/mvc")
public class mvcController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
7.서버 시작,입력 http://localhost:8080/프로젝트 이름/mvc/hello2.설정 분석
1.Dispatcherservlet
Dispatcher Servlet 은 웹.xml 파일 에 설 치 된 사전 컨트롤 러 입 니 다.일치 하 는 요청 을 차단 합 니 다.Servlet 차단 일치 규칙 은 스스로 정의 하고 차단 한 요청 을 해당 규칙 에 따라 목표 Controller 에 나 누 어 처리 하 는 것 이 spring MVC 를 설정 하 는 첫 번 째 단계 입 니 다.
2.InternalResourceViewResolver
보기 이름 해석 기
3.위 에 나타 난 주해
@Controller spring 컨 텍스트 에 bean 등록 담당
@RequestMapping 주 해 는 컨트롤 러 로 어떤 URL 요청 을 처리 할 수 있 는 지 지정 합 니 다.
3.SpringMVC 상용 주해
@Controller
spring 컨 텍스트 에 bean 등록 담당
@RequestMapping
컨트롤 러 에서 어떤 URL 요청 을 처리 할 수 있 는 지 지정 합 니 다.
@RequestBody
이 설명 은 Request 가 요청 한 body 부분 데 이 터 를 읽 는 데 사 용 됩 니 다.시스템 기본 설정 의 HttpMessageConverter 를 사용 하여 분석 한 다음 해당 데 이 터 를 되 돌 릴 대상 에 연결 합 니 다. ,HttpMessage Converter 가 되 돌아 오 는 대상 데 이 터 를 controller 의 방법 에 연결 하 는 매개 변수 입 니 다.
@ResponseBody
이 주 해 는 Controller 의 방법 을 되 돌려 주 는 대상 으로,적절 한 HttpMessageConverter 를 통 해 지 정 된 형식 으로 변환 한 후 Response 대상 의 body 데이터 영역 에 기록 합 니 다.
@ModelAttribute
방법 정의 에@ModelAttribute 주 해 를 사용 합 니 다:Spring MVC 는 대상 처리 방법 을 호출 하기 전에 방법 급 에@ModelAttribute 방법 을 표시 합 니 다.
방법의 참 여 를 하기 전에@ModelAttribute 주 해 를 사용 합 니 다.함 축 된 대상 에서 함 축 된 모델 데이터 에서 대상 을 얻 을 수 있 고 요청 매개 변수 C 를 대상 에 연결 한 다음 에 참 여 된 방법 을 모델 에 추가 할 수 있 습 니 다.
@RequestParam
처리 방법 에 참여 할 때@RequestParam 을 사용 하면 요청 매개 변 수 를 요청 방법 에 전달 할 수 있 습 니 다.
@PathVariable
바 인 딩 URL 자리 차지 문자 입 참
@ExceptionHandler
방법 에 주석 을 달 면 이상 이 생 겼 을 때 이 방법 을 실행 합 니 다.
@ControllerAdvice
하나의 Contoller 를 전역 적 인 이상 처리 클래스 로 만 듭 니 다.클래스 에서@ExceptionHandler 방법 으로 설명 하 는 방법 으로 모든 Controller 에서 발생 하 는 이상 을 처리 할 수 있 습 니 다.
4.자동 일치 매개 변수
//match automatically
@RequestMapping("/person")
public String toPerson(String name,double age){
System.out.println(name+" "+age);
return "hello";
}
자동 포장1.Person 실체 클래스 작성
package test.SpringMVC.model;
public class Person {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
}
2.Controller 에서 작성 하 는 방법
//boxing automatically
@RequestMapping("/person1")
public String toPerson(Person p){
System.out.println(p.getName()+" "+p.getAge());
return "hello";
}
6.Date 형식의 인 자 를 InitBinder 로 처리 합 니 다.
//the parameter was converted in initBinder
@RequestMapping("/date")
public String date(Date date){
System.out.println(date);
return "hello";
}
//At the time of initialization,convert the type "String" to type "date"
@InitBinder
public void initBinder(ServletRequestDataBinder binder){
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),
true));
}
7.프론트 데스크 에 매개 변 수 를 전달 합 니 다.
//pass the parameters to front-end
@RequestMapping("/show")
public String showPerson(Map<String,Object> map){
Person p =new Person();
map.put("p", p);
p.setAge(20);
p.setName("jayjay");
return "show";
}
프론트 데스크 톱 은 Request 필드 에서"p"를 찾 을 수 있 습 니 다.8.Ajax 호출 사용
//pass the parameters to front-end using ajax
@RequestMapping("/getPerson")
public void getPerson(String name,PrintWriter pw){
pw.write("hello,"+name);
}
@RequestMapping("/name")
public String sayHello(){
return "name";
}
프론트 데스크 톱 은 아래 Jquery 코드 로 호출 합 니 다.
$(function(){
$("#btn").click(function(){
$.post("mvc/getPerson",{name:$("#name").val()},function(data){
alert(data);
});
});
});
9.Controller 에서 redirect 방식 으로 요청 처리
//redirect
@RequestMapping("/redirect")
public String redirect(){
return "redirect:hello";
}
파일 업로드1.jar 가방 2 개 가 져 오기
2.SpringMVC 프로필 에 추가
<!-- upload settings -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="102400000"></property>
</bean>
3.방법 코드
@RequestMapping(value="/upload",method=RequestMethod.POST)
public String upload(HttpServletRequest req) throws Exception{
MultipartHttpServletRequest mreq = (MultipartHttpServletRequest)req;
MultipartFile file = mreq.getFile("file");
String fileName = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
FileOutputStream fos = new FileOutputStream(req.getSession().getServletContext().getRealPath("/")+
"upload/"+sdf.format(new Date())+fileName.substring(fileName.lastIndexOf('.')));
fos.write(file.getBytes());
fos.flush();
fos.close();
return "hello";
}
4.프론트 폼
<form action="mvc/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" value="submit">
</form>
11.@RequestParam 을 사용 하여 지정 한 매개 변 수 를 설명 합 니 다 name
@Controller
@RequestMapping("/test")
public class mvcController1 {
@RequestMapping(value="/param")
public String testRequestParam(@RequestParam(value="id") Integer id,
@RequestParam(value="name")String name){
System.out.println(id+" "+name);
return "/hello";
}
}
12.RESTFul 스타일 의 SringMVC1.RestController
@Controller
@RequestMapping("/rest")
public class RestController {
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public String get(@PathVariable("id") Integer id){
System.out.println("get"+id);
return "/hello";
}
@RequestMapping(value="/user/{id}",method=RequestMethod.POST)
public String post(@PathVariable("id") Integer id){
System.out.println("post"+id);
return "/hello";
}
@RequestMapping(value="/user/{id}",method=RequestMethod.PUT)
public String put(@PathVariable("id") Integer id){
System.out.println("put"+id);
return "/hello";
}
@RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
public String delete(@PathVariable("id") Integer id){
System.out.println("delete"+id);
return "/hello";
}
}
2.form 폼 은 put 와 delete 요청 을 보 냅 니 다.웹.xml 에 설정
<!-- configure the HiddenHttpMethodFilter,convert the post method to put or delete -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
프론트 데스크 에서 다음 코드 로 요청 할 수 있 습 니 다.
<form action="rest/user/1" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="put">
</form>
<form action="rest/user/1" method="post">
<input type="submit" value="post">
</form>
<form action="rest/user/1" method="get">
<input type="submit" value="get">
</form>
<form action="rest/user/1" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="delete">
</form>
13.json 형식의 문자열 을 되 돌려 줍 니 다.1.아래 jar 패키지 가 져 오기
2.방법 코드
@Controller
@RequestMapping("/json")
public class jsonController {
@ResponseBody
@RequestMapping("/user")
public User get(){
User u = new User();
u.setId(1);
u.setName("jayjay");
u.setBirth(new Date());
return u;
}
}
14.이상 한 처리1.부분 이상 처리(컨트롤 러 내)
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView mv = new ModelAndView("error");
mv.addObject("exception", ex);
System.out.println("in testExceptionHandler");
return mv;
}
@RequestMapping("/error")
public String error(){
int i = 5/0;
return "hello";
}
2.전역 이상 처리(모든 컨트롤 러)
@ControllerAdvice
public class testControllerAdvice {
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView mv = new ModelAndView("error");
mv.addObject("exception", ex);
System.out.println("in testControllerAdvice");
return mv;
}
}
3.전역 이상 을 처리 하 는 또 다른 방법SpringMVC 프로필 에 설정
<!-- configure SimpleMappingExceptionResolver -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
</bean>
오류 페이지15.사용자 정의 차단기 설정
1.MyInterceptor 클래스 를 만 들 고 Handler Interceptor 인 터 페 이 스 를 실현 합 니 다.
public class MyInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("afterCompletion");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
System.out.println("postHandle");
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2) throws Exception {
System.out.println("preHandle");
return true;
}
}
2.SpringMVC 프로필 에 설정
<!-- interceptor setting -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/mvc/**"/>
<bean class="test.SpringMVC.Interceptor.MyInterceptor"></bean>gt;
</mvc:interceptor>
</mvc:interceptors>
3.차단기 실행 순서16.폼 의 검증(Hibernate-vaidate 사용)및 국제 화
1.Hibernate-validate 에 필요 한 jar 패키지 가 져 오기
(선택 되 지 않 았 습 니 다.가 져 오지 않 아 도 됩 니 다)
2.실체 클래스 User 를 작성 하고 인증 주 해 를 추가 합 니 다.
public class User {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", birth=" + birth + "]";
}
private int id;
@NotEmpty
private String name;
@Past
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birth;
}
ps:@Past 는 시간 이 과거 값 이 어야 함 을 표시 합 니 다.3.jsp 에서 SpringMVC 폼 사용 하기
<form:form action="form/add" method="post" modelAttribute="user">
id:<form:input path="id"/><form:errors path="id"/><br>
name:<form:input path="name"/><form:errors path="name"/><br>
birth:<form:input path="birth"/><form:errors path="birth"/>
<input type="submit" value="submit">
</form:form>
ps:path 대응 name4.Controller 코드
@Controller
@RequestMapping("/form")
public class formController {
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Valid User u,BindingResult br){
if(br.getErrorCount()>0){
return "addUser";
}
return "showUser";
}
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Map<String,Object> map){
map.put("user",new User());
return "addUser";
}
}
ps:1.jsp 에서 modelAttribute 속성 을 사 용 했 기 때문에 request 필드 에'user'가 있어 야 합 니 다.
2.@Valid 는 실체 에 표 시 된 주해 검증 파 라미 터 를 표시 합 니 다.
3.원래 페이지 로 돌아 가면 오류 메시지 가 나타 나 고 폼 도 나타 납 니 다.
5.오류 정보 사용자 정의
src 디 렉 터 리 에 locale.properties 추가
NotEmpty.user.name=name can't not be empty
Past.user.birth=birth should be a past value
DateTimeFormat.user.birth=the format of input is wrong
typeMismatch.user.birth=the format of input is wrong
typeMismatch.user.id=the format of input is wrong
SpringMVC 프로필 에 설정
<!-- configure the locale resource -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="locale"></property>
</bean>
6.국제 화 디 스 플레이src 에 locale 추가zh_CN.properties
username=
password=
locale.properties 에 추가
username=user name
password=password
locale.jsp 만 들 기
<body>
<fmt:message key="username"></fmt:message>
<fmt:message key="password"></fmt:message>
</body>
SpringMVC 에 설정
<!-- make the jsp page can be visited -->
<mvc:view-controller path="/locale" view-name="locale"/>
WEB-INF 에서 도 locale.jsp 가 직접 방문 할 수 있 도록 합 니 다.마지막 으로 locale.jsp 를 방문 하여 브 라 우 저 언어 를 바 꾸 고 계 정과 비밀 번 호 를 볼 수 있 는 언어 도 바 뀌 었 습 니 다.
17.압권 인 SpringIOC 와 SpringMVC 통합
1.테스트.SpringMVC.integrate 패 키 지 를 만 들 고 통합 을 보 여 주 며 다양한 패 키 지 를 만 듭 니 다.
2.User 실체 클래스
public class User {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", birth=" + birth + "]";
}
private int id;
@NotEmpty
private String name;
@Past
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birth;
}
3.UserService 클래스
@Component
public class UserService {
public UserService(){
System.out.println("UserService Constructor...
");
}
public void save(){
System.out.println("save");
}
}
4.UserController
@Controller
@RequestMapping("/integrate")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/user")
public String saveUser(@RequestBody @ModelAttribute User u){
System.out.println(u);
userService.save();
return "hello";
}
}
5.Spring 프로필src 디 렉 터 리 에 SpringIOC 프로필 만 들 기 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
>
<context:component-scan base-package="test.SpringMVC.integrate">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
</beans>
웹.xml 에 설정 추가
<!-- configure the springIOC -->
<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>
6.SpringMVC 에서 SpringMVC 와 SpringIOC 가 같은 대상 에 대한 관리 가 겹 치지 않도록 설정 합 니 다.
<!-- scan the package and the sub package -->
<context:component-scan base-package="test.SpringMVC.integrate">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
18.SpringMVC 상세 운행 절차 도19.SpringMVC 와 struts 2 의 차이
1.springmvc 는 방법 에 따라 개 발 된 것 이 고 struts 2 는 유형 에 따라 개 발 된 것 이다.springmvc 는 url 과 contrller 의 방법 을 매 핑 합 니 다.맵 에 성공 한 후 springmvc 는 Handler 대상 을 만 들 었 습 니 다.대상 에는 하나의 method 만 포함 되 어 있 습 니 다.방법 집행 종료,형 삼 데이터 소각.springmvc 의 controller 개발 은 웹 서비스 개발 과 유사 합 니 다.
2.springmvc 는 단일 사례 개발 을 할 수 있 고 단일 사례 개발 을 권장 합 니 다.struts 2 는 클래스 의 구성원 변 수 를 통 해 파 라 메 터 를 받 고 단일 사례 를 사용 할 수 없 으 며 여러 사례 만 사용 할 수 있 습 니 다.
3.실제 테스트 를 통 해 struts 2 속도 가 느 린 것 은 struts 라벨 을 사용 하 는 것 입 니 다.struts 를 사용 하면 jstl 을 사용 하 는 것 을 권장 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ssm 프레임워크 업로드 이미지 로컬 및 데이터베이스에 저장 예시본고는 ssm 프레임워크 업로드 이미지를 로컬과 데이터베이스에 저장하는 예시를 소개하고 주로 Spring+SpringMVC+MyBatis 프레임워크를 사용하여 ssm 프레임워크 업로드 이미지의 실례를 실현했다. 구체...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.